認証
Red Hat Developer Hub で外部サービスへの認証を設定する
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
組織のセキュリティーポリシーによっては、Red Hat Developer Hub などのリソースへのアクセスを許可する前に、ユーザーを識別して認可することを推奨します。
Developer Hub では、認証と認可は 2 つの別々のプロセスになります。
- 認証はユーザーアイデンティティーを定義し、この情報を Developer Hub に渡します。Developer Hub で認証を設定するには、次の章を参照してください。
- 認可は、認証されたアイデンティティーが Developer Hub でアクセスできる内容や実行できる内容を定義します。認可 を参照してください。
Developer Hub の機能を調べるには、ゲストユーザーが認証と認可の設定をスキップするように有効化し、ゲストユーザーとしてログインして、すべての機能にアクセスします。
Developer Hub の認証システムは、外部認証プロバイダーによって処理されます。
Developer Hub は次の認証プロバイダーをサポートしています。
- Red Hat Single-Sign On (RHSSO)
- GitHub
- Microsoft Azure
Developer Hub でユーザーを識別するには、以下を設定します。
- サインインと識別用の 1 つの (唯一の) 認証プロバイダー。
- オプションで、識別のための追加の認証プロバイダーを使用して、ユーザーアイデンティティーに詳細情報を追加したり、追加の外部リソースへのアクセスを有効にしたりします。
認証プロバイダーごとに、認証プロバイダーと Developer Hub が通信するために必要な共有シークレットを、最初に認証プロバイダーでセットアップし、次に Developer Hub でセットアップします。
Developer Hub は、ユーザーアイデンティティー情報を Developer Hub ソフトウェアカタログに保存します。
認証システムを調べ、認可ポリシーなしで Developer Hub を使用するには、Developer Hub ソフトウェアカタログをバイパスし、Developer Hub ソフトウェアカタログをプロビジョニングせずに Developer Hub の使用を開始できます。
グループやチームの所有権などの追加のユーザー情報を取得、保存、更新し、このデータを使用して認可ポリシーを定義し、Developer Hub ソフトウェアカタログでユーザーとグループをプロビジョニングします。
Developer Hub は、一方向の同期システムを使用して、認証システムから Developer Hub ソフトウェアカタログにユーザーとグループをプロビジョニングします。したがって、Developer Hub Web UI または REST API を使用してユーザーとグループを削除すると、意図しない結果が生じる可能性があります。
第1章 ゲストユーザーによる認証 リンクのコピーリンクがクリップボードにコピーされました!
Developer Hub の機能を調べるには、認証と認可の設定をスキップできます。Developer Hub を設定して、ゲストユーザーとしてログインし、Developer Hub の機能にアクセスすることができます。
1.1. Operator ベースのインストールでゲストユーザーによる認証を行う リンクのコピーリンクがクリップボードにコピーされました!
Operator ベースのインストール後、Developer Hub を設定してゲストユーザーとしてログインし、Developer Hub の機能にアクセスできます。
前提条件
- Operator を使用して Developer Hub をインストール している。
- カスタム Developer Hub アプリケーション設定を追加 している。また、それを変更するための十分な権限を持っている。
手順
Developer Hub のカスタム設定でゲストユーザーを有効にするには、次の内容で Developer Hub アプリケーション設定を編集 します。
app-config-rhdh.yamlの一部auth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: true
検証
- Developer Hub のログインページに移動します。
- ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
- Developer Hub の Settings ページでは、プロファイル名は Guest です。
- Developer Hub の機能を使用できます。
1.2. Helm ベースのインストールでゲストユーザーによる認証を行う リンクのコピーリンクがクリップボードにコピーされました!
Helm ベースのインストールでは、Developer Hub を設定してゲストユーザーとしてログインし、Developer Hub の機能にアクセスできます。
前提条件
手順
Developer Hub のカスタム設定でゲストユーザーを有効にするには、次の内容で Red Hat Developer Hub Helm チャートを設定 します。
Red Hat Developer Hub Helm チャート設定フラグメント
upstream: backstage: appConfig: app: baseUrl: 'https://{{- include "janus-idp.hostname" . }}' auth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: true
検証
- Developer Hub のログインページに移動します。
- ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
- Developer Hub の Settings ページでは、プロファイル名は Guest です。
- Developer Hub の機能を使用できます。
第2章 Red Hat Single Sign-On (RHSSO) による認証 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On (RHSSO) を使用してユーザーを認証する場合:
2.1. Red Hat Single-Sign On (RHSSO) による認証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Single Sign-On (RHSSO) を使用してユーザーを認証するには、Red Hat Developer Hub で OpenID Connect (OIDC) 認証プロバイダーを有効にします。
前提条件
- カスタム Developer Hub アプリケーション設定を追加 している。また、それを変更するための十分な権限を持っている。
- RHSSO でレルムを作成および管理するための十分な権限がある。
手順
Developer Hub が RHSSO で認証できるようにするには、RHSSO の手順を完了し、レルムとユーザーを作成 し、Developer Hub アプリケーションを登録 します。
既存のレルムを使用するか、<my_realm> などの固有の 名前 を持つ レルムを作成 します。次のステップのために値を保存します。
- RHSSO レルムのベース URL (例: <your_rhsso_URL>/auth/realms/<your_realm>)。
RHSSO に Developer Hub を登録するには、作成されたレルムで、次の内容を使用して クライアント ID を作成 します。
- クライアント ID: <RHDH> などの固有のクライアント ID。
-
有効なリダイレクト URI: OIDC ハンドラー URL
https://<RHDH_URL>/api/auth/oidc/handler/frameに設定します。 - Credentials タブに移動し、Client secret をコピーします。
次のステップのために値を保存します。
- Client ID
- Client Secret
- 検証手順を準備するには、同じレルムで、既存のユーザーの認証情報を取得するか、ユーザーを作成 します。検証手順用にユーザー認証情報を保存します。
RHSSO 認証情報を Developer Hub シークレットに追加するには、
secrets-rhdhなどの Developer Hub シークレットを編集し、次のキー/値のペアを追加します。AUTH_OIDC_CLIENT_ID- 保存した クライアント ID を入力します。
AUTH_OIDC_CLIENT_SECRET- 保存した クライアントシークレット を入力します。
AUTH_OIDC_METADATA_URL- 保存した RHSSO レルムのベース URL を入力します。
Developer Hub のカスタム設定で RHSSO 認証プロバイダーをセットアップするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config-rhdh.yamlコンテンツに次の行を追加します。RHSSO による認証を有効にするための必須フィールドを含む
app-config-rhdh.yamlフラグメントauth: environment: production providers: oidc: production: metadataUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET} signInPage: oidcenvironment: production-
環境を
productionとしてマークすると、Developer Hub のホームページでゲストログインが非表示になります。 metadataUrl、clientId、clientSecret- シークレットを使用して OIDC プロバイダーを設定します。
sigInPage: oidc- OIDC プロバイダーをデフォルトのサインインプロバイダーとして有効にします。
オプション: 次のオプションフィールドを追加することを検討してください。
dangerouslyAllowSignInWithoutUserInCatalog: true
Developer Hub ソフトウェアカタログでユーザーをプロビジョニングする必要なく認証を有効にします。
警告このオプションは Developer Hub の機能を調べるために使用しますが、実稼働環境では使用しないでください。
ソフトウェアカタログに存在しないユーザーを認証できるようにするオプションフィールドを含む
app-config-rhdh.yamlフラグメントauth: environment: production providers: oidc: production: metadataUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET} signInPage: oidc dangerouslyAllowSignInWithoutUserInCatalog: true
callbackUrl
RHSSO コールバック URL。
オプションの callbackURL フィールドを含む app-config-rhdh.yaml フラグメント
auth:
providers:
oidc:
production:
callbackUrl: ${AUTH_OIDC_CALLBACK_URL}
tokenEndpointAuthMethod
トークンエンドポイント認証方法。
オプションの tokenEndpointAuthMethod フィールドを含む app-config-rhdh.yaml フラグメント
auth:
providers:
oidc:
production:
tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}
tokenSignedResponseAlg
トークン署名応答アルゴリズム。
オプションの tokenSignedResponseAlg フィールドを含む app-config-rhdh.yaml フラグメント
auth:
providers:
oidc:
production:
tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}
scope
RHSSO スコープ。
オプションの scope フィールドを含む app-config-rhdh.yaml フラグメント
auth:
providers:
oidc:
production:
scope: ${AUTH_OIDC_SCOPE}
signIn.resolvers
デフォルトのリゾルバーをオーバーライドする宣言型リゾルバー: emailLocalPartMatchingUserEntityName。認証プロバイダーは、成功するまで各サインインリゾルバーを試行し、どれも成功しない場合は失敗します。
オプションの callbackURL フィールドを含む app-config-rhdh.yaml フラグメント
auth:
providers:
oidc:
production:
signIn:
resolvers:
- resolver: preferredUsernameMatchingUserEntityName
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
auth.backstageTokenExpiration
Developer Hub トークンの有効期限をデフォルト値の 1 時間から変更する場合、これはセッション期間ではなく、短期暗号化トークンの有効期間を指すことに注意してください。有効期限の値は 10 分から 24 時間の間で設定する必要があります。
オプションの auth.backstageTokenExpiration フィールドを含む app-config-rhdh.yaml フラグメント
auth:
backstageTokenExpiration: { minutes: <user_defined_value> }
セキュリティー上の考慮事項
頻繁なリフレッシュトークンの要求により複数の有効なリフレッシュトークンが発行された場合、古いトークンは期限が切れるまで有効です。セキュリティーを強化し、古いトークンの誤用を防ぐには、RHBK レルムでリフレッシュトークンのローテーションストラテジーを有効にします。
- ナビゲーションメニューの Configure セクションで、Realm Settings をクリックします。
- Realm Settings ページで、Tokens タブをクリックします。
- Tokens タブの Refresh tokens セクションで、Revoke Refresh Token を Enabled に切り替えます。
検証
- Developer Hub のログインページに移動します。
- Developer Hub のサインインページには OIDC を使用してサインイン と表示され、ゲストユーザーのサインインは無効になっています。
- 保存した ユーザー名 と パスワード の値を使用して、OIDC でログインします。
2.2. Red Hat Single-Sign On (RHSSO) からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- RHSSO による認証を有効化 している。
手順
RHSSO メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config-rhdh.yamlコンテンツに次の行を追加します。必須の
keycloakOrgフィールドを含むapp-config.yamlフラグメントdangerouslyAllowSignInWithoutUserInCatalog: false catalog: providers: keycloakOrg: default: baseUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET}dangerouslyAllowSignInWithoutUserInCatalog: false- Developer Hub ソフトウェアカタログに存在するユーザーのみに認証を許可します。
baseUrl- RHSSO での認証を有効化 する際に定義される RHSSO サーバー URL。
clientId- RHSSO での認証を有効化 する際に定義される、RHSSO の Developer Hub アプリケーションクライアント ID。
clientSecret- RHSSO での認証を有効化 する際に定義される、RHSSO の Developer Hub アプリケーションクライアントシークレット。
オプション: 次のオプションフィールドを追加することを検討してください。
realm同期するレルムデフォルト値は
masterです。オプションの
realmフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: realm: masterloginRealm認証に使用するレルムデフォルト値は
masterです。オプションの
loginRealmフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: loginRealm: masteruserQuerySize同時にクエリーするユーザー数。デフォルト値は
100です。オプションの
userQuerySizeフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: userQuerySize: 100groupQuerySize同時にクエリーするグループの数。デフォルト値は
100です。オプションの
groupQuerySizeフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: groupQuerySize: 100schedule.frequencyカスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
オプションの
schedule.frequencyフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: schedule: frequency: { hours: 1 }schedule.timeoutカスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.timeoutフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: schedule: timeout: { minutes: 50 }schedule.initialDelayカスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.initialDelayフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: schedule: initialDelay: { seconds: 15}
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
{"class":"KeycloakOrgEntityProvider","level":"info","message":"Read 3 Keycloak users and 2 Keycloak groups in 1.5 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"} {"class":"KeycloakOrgEntityProvider","level":"info","message":"Committed 3 Keycloak users and 2 Keycloak groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}- RHSSO アカウントでログインします。
2.3. Red Hat Single-Sign On (RHSSO) からソフトウェアカタログにユーザーをプロビジョニングするためのカスタムトランスフォーマーの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHSSO ユーザーとグループを Red Hat Developer Hub エンティティーにマッピングする方法をカスタマイズするには、keycloakTransformerExtensionPoint を使用して Keycloak バックエンドにカスタムのユーザーおよびグループトランスフォーマーを提供するバックエンドモジュールを作成します。
手順
-
yarn newコマンドで新しいバックエンドモジュールを作成します。 カスタムのユーザーおよびグループトランスフォーマーを
keycloakTransformerExtensionPointに追加します。以下は、バックエンドモジュールを定義する方法の例です。
plugins/<module-name>/src/module.tsimport { GroupTransformer, keycloakTransformerExtensionPoint, UserTransformer, } from '@janus-idp/backstage-plugin-keycloak-backend'; const customGroupTransformer: GroupTransformer = async ( entity, // entity output from default parser realm, // Keycloak realm name groups, // Keycloak group representation ) => { /* apply transformations */ return entity; }; const customUserTransformer: UserTransformer = async ( entity, // entity output from default parser user, // Keycloak user representation realm, // Keycloak realm name groups, // Keycloak group representation ) => { /* apply transformations */ return entity; }; export const keycloakBackendModuleTransformer = createBackendModule({ pluginId: 'catalog', moduleId: 'keycloak-transformer', register(reg) { reg.registerInit({ deps: { keycloak: keycloakTransformerExtensionPoint, }, async init({ keycloak }) { keycloak.setUserTransformer(customUserTransformer); keycloak.setGroupTransformer(customGroupTransformer); /* highlight-add-end */ }, }); }, });重要モジュールの
pluginIdは、keycloak-backendのpluginIdと一致するようにcatalogに設定する必要があります。そうしないと、モジュールは初期化に失敗します。この新しいバックエンドモジュールを Developer Hub バックエンドにインストールします。
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))
検証
Developer Hub は起動するたびにユーザーとグループをインポートします。コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
{"class":"KeycloakOrgEntityProvider","level":"info","message":"Read 3 Keycloak users and 2 Keycloak groups in 1.5 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"} {"class":"KeycloakOrgEntityProvider","level":"info","message":"Committed 3 Keycloak users and 2 Keycloak groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}- 最初のインポートが完了したら、Catalog ページに移動し、User を選択してユーザーのリストを表示します。
- ユーザーを選択すると、RHSSO からインポートされた情報が表示されます。
- グループを選択してリストを表示し、RHSSO からインポートされた情報にアクセスしたり確認したりできます。
- RHSSO アカウントでログインできます。
第3章 GitHub での認証 リンクのコピーリンクがクリップボードにコピーされました!
GitHub または GitHub Enterprise でユーザーを認証する場合は、以下を行います。
3.1. GitHub での認証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
GitHub を使用してユーザーを認証するには、Red Hat Developer Hub で GitHub 認証プロバイダーを有効にします。
前提条件
- カスタム Developer Hub アプリケーション設定を追加 している。また、それを変更するための十分な権限を持っている。
- GitHub アプリケーション を作成および管理するのに十分な権限が GitHub にある。
手順
Developer Hub が GitHub で認証できるようにするには、GitHub アプリケーションを作成します。きめ細かな権限を使用し、アプリケーションがアクセスできるリポジトリーをより細かく制御して、有効期間の短いトークンを使用するには、OAuth アプリケーションではなく GitHub アプリケーションを選択します。
次の設定で GitHub アプリケーションを登録します。
- GitHub アプリケーション名: <Red Hat Developer Hub>-<GUID> など、GitHub アプリケーションを識別する一意の名前を入力します。
-
ホームページ URL: Developer Hub の URL:
https://<my_developer_hub_url> -
認可コールバック URL: Developer Hub 認証バックエンド URL:
https://<my_developer_hub_url>/api/auth/github/handler/frame -
Webhook URL: Developer Hub の URL:
https://<my_developer_hub_url> - Webhook シークレット: 強力なシークレットを提供します。
リポジトリー権限:
次の項目に対する
Read-onlyアクセスを有効にします。- 管理
- コミットステータス
- 内容
- Dependabot アラート
- Deployments
- プルリクエスト
Webhook
ヒントGitHub API を使用して変更を加える予定の場合は、
Read-onlyではなく、Read and write権限が有効になっていることを確認してください。
- 必要に応じて他の権限を切り替えます。
組織の権限:
-
メンバー への
Read-onlyアクセスを有効にします。
-
メンバー への
-
Where can this GitHub App be installed? で、
Only on this accountを選択します。
- General → Clients secrets セクションで、Generate a new client secret をクリックします。
- General → Private keys セクションで、Generate a private key をクリックします。
- Install App タブで、GitHub アプリケーションをインストールするアカウントを選択します。
次のステップのために以下の値を保存します。
- アプリケーション ID
- クライアント ID
- クライアントシークレット
- 秘密鍵
- Webhook シークレット
GitHub 認証情報を Developer Hub シークレットに追加するには、
secrets-rhdhなどの Developer Hub シークレットを編集し、次のキー/値のペアを追加します。AUTH_GITHUB_APP_ID- 保存した アプリケーション ID を入力します。
AUTH_GITHUB_CLIENT_ID- 保存した クライアント ID を入力します。
GITHUB_HOST_DOMAIN-
GitHub Enterprise を使用していない場合は、GitHub ホストドメイン (
github.com) を入力します。 GITHUB_ORGANIZATION- `<your_github_organization_name>' などの GitHub 組織名を入力します。
GITHUB_ORG_URL-
$GITHUB_HOST_DOMAIN/$GITHUB_ORGANIZATIONを入力します。 GITHUB_CLIENT_SECRET- 保存した クライアントシークレット を入力します。
GITHUB_PRIVATE_KEY_FILE- 保存した 秘密鍵 を入力します。
GITHUB_WEBHOOK_URL-
Developer Hub の URL を入力します (
https://<my_developer_hub_url>)。 GITHUB_WEBHOOK_SECRET- 保存した Webhook シークレット を入力します。
GitHub 認証プロバイダーを設定し、Developer Hub のカスタム設定で GitHub API とのインテグレーションを有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config-rhdh.yamlコンテンツに次の行を追加します。GitHub での認証を有効にするための必須フィールドを含む
app-config-rhdh.yamlフラグメントauth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: githubenvironment: production-
環境を
productionとしてマークすると、Developer Hub のホームページでゲストログインが非表示になります。 clientId,clientSecret,host,appId,webhookUrl,webhookSecret,privateKey- GitHub で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
sigInPage: github- GitHub プロバイダーをデフォルトのサインインプロバイダーとして有効にします。
オプション: 次のオプションフィールドを追加することを検討してください。
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログでユーザーをプロビジョニングする必要なく認証を有効にします。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーを認証できるようにするオプションフィールドを含む
app-config-rhdh.yamlフラグメントauth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: github dangerouslyAllowSignInWithoutUserInCatalog: truecallbackUrlOAuth フローを開始するときに GitHub が使用するコールバック URL (例: <your_intermediate_service_url/handler>)。多くの Developer Hub インスタンスに対して 1 つの OAuth アプリケーションを使用する場合など、Developer Hub が直接のレシーバーではない場合に定義します。
オプションの
enterpriseInstanceUrlフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>enterpriseInstanceUrlGitHub Enterprise の URL。前のステップで
GITHUB_HOST_DOMAINシークレットを定義しておく必要があります。オプションの
enterpriseInstanceUrlフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: enterpriseInstanceUrl: ${GITHUB_HOST_DOMAIN}
ヒント別の認証プロバイダーとの GitHub インテグレーションを有効にするには、次の設定を完了します。
-
GitHub プロバイダーを既存の
authセクションに追加します。 -
認証プロバイダーの設定から
signInPageセクションを保持します。
GitHub インテグレーションを有効にし、別の認証プロバイダーを使用するための必須フィールドを含む、
app-config-rhdh.yamlフラグメントauth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} <your_other_authentication_providers_configuration> integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: <your_main_authentication_provider>
検証
- Developer Hub のログインページに移動します。
- Developer Hub のサインインページには Sign in using GitHub と表示され、ゲストユーザーのサインインは無効になっています。
- GitHub でログインします。
3.2. GitHub からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
ユーザーを認証する場合、Red Hat Developer Hub ではソフトウェアカタログにユーザーが登録されていることが必要です。ユーザーを手動でプロビジョニングするのではなく、スケジュールに従って GitHub からソフトウェアカタログにユーザーをプロビジョニングするように Developer Hub を設定することを検討してください。
前提条件
次のシークレットを含む GitHub での認証が有効化されている。
-
GITHUB_HOST_DOMAIN -
GITHUB_ORGANIZATION
-
手順
GitHub メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config-rhdh.yamlコンテンツに次の行を追加します。必須の
githubフィールドを含むapp-config.yamlフラグメントdangerouslyAllowSignInWithoutUserInCatalog: false catalog: providers: github: providerId: organization: "${GITHUB_ORGANIZATION}" schedule: frequency: minutes: 30 initialDelay: seconds: 15 timeout: minutes: 15 githubOrg: githubUrl: "${GITHUB_HOST_DOMAIN}" orgs: [ "${GITHUB_ORGANIZATION}" ] schedule: frequency: minutes: 30 initialDelay: seconds: 15 timeout: minutes: 15dangerouslyAllowSignInWithoutUserInCatalog: false- Developer Hub ソフトウェアカタログに存在するユーザーのみに認証を許可します。
organization、githubUrl、orgs- GitHub で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
schedule.frequency- カスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
schedule.timeout- カスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
schedule.initialDelay- カスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
{"class":"GithubMultiOrgEntityProvider","level":"info","message":"Reading GitHub users and teams for org: rhdh-dast","plugin":"catalog","service":"backstage","target":"https://github.com","taskId":"GithubMultiOrgEntityProvider:production:refresh","taskInstanceId":"801b3c6c-167f-473b-b43e-e0b4b780c384","timestamp":"2024-09-09 23:55:58"} {"class":"GithubMultiOrgEntityProvider","level":"info","message":"Read 7 GitHub users and 2 GitHub groups in 0.4 seconds. Committing...","plugin":"catalog","service":"backstage","target":"https://github.com","taskId":"GithubMultiOrgEntityProvider:production:refresh","taskInstanceId":"801b3c6c-167f-473b-b43e-e0b4b780c384","timestamp":"2024-09-09 23:55:59"}- GitHub アカウントでログインします。
第4章 Microsoft Azure での認証 リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure でユーザーを認証する場合:
4.1. Microsoft Azure での認証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub には、OAuth を使用してユーザーを認証できる Microsoft Azure 認証プロバイダーが組み込まれています。
前提条件
- Microsoft Azure にアプリケーションを登録する権限がある。
- カスタム Developer Hub アプリケーション設定を追加している。
手順
Developer Hub が Microsoft Azure で認証できるようにするために、Microsoft Azure で OAuth アプリケーションを作成 します。
Azure ポータルで App registrations に移動し、次の設定で New registration を作成します。
- 名前
- Azure 内のアプリケーション名 (例: <My Developer Hub>)
Home > App registrations > <My Developer Hub> > Manage > Authentication ページで、次の設定で プラットフォームを追加 します。
- Redirect URI
-
Developer Hub で設定されたバックエンド認証 URI (
https://<my_developer_hub_url>/api/auth/microsoft/handler/frame) を入力します。 - Front-channel logout URL
- 空白のままにします。
- Implicit grant and hybrid flows
- すべてのチェックボックスをオフのままにします。
Home > App registrations > <My Developer Hub> > Manage > API permissions ページで、権限を追加 してから、Microsoft Graph API の次の 委任された権限 を追加します。
-
email -
offline_access -
openid -
profile -
User.Read このセクションと Developer Hub 設定 (
app-config-rhdh.yaml) の両方で定義する Microsoft Graph API のオプションのカスタムスコープ。注記企業によっては、これらの権限に対して管理者の同意を与えることが必要な場合があります。管理者の同意が必要ない場合でも、管理者の同意を与える場合があります。そうすることで、ユーザーが初めて Backstage にアクセスするときに、個別に同意する必要がなくなるためです。管理者の同意を付与するには、ディレクトリー管理者は admin consent ページに移動し、Grant admin consent for COMPANY NAME をクリックする必要があります。
-
- Home > App registrations > <My Developer Hub> > Manage > Certificates & Secrets ページの Client secrets タブで、新しいクライアントシークレット を作成します。
次のステップのために保存します。
- ディレクトリー (テナント) ID
- アプリケーション (クライアント) ID
- アプリケーション (クライアント) シークレット
Microsoft Azure 認証情報を Developer Hub に追加するには、
secrets-rhdhなどの次のキー/値ペアを Developer Hub シークレットに追加します。AUTH_AZURE_TENANT_ID- 保存した ディレクトリー (テナント) ID を入力します。
AUTH_AZURE_CLIENT_ID- 保存した アプリケーション (クライアント) ID を入力します。
AUTH_AZURE_CLIENT_SECRET- 保存した アプリケーション (クライアント) シークレット を入力します。
app-config-rhdhなどの Developer Hub カスタム設定で Microsoft Azure 認証プロバイダーをセットアップします。app-config-rhdh.yamlの一部auth: environment: production providers: microsoft: production: clientId: ${AUTH_AZURE_CLIENT_ID} clientSecret: ${AUTH_AZURE_CLIENT_SECRET} tenantId: ${AUTH_AZURE_TENANT_ID} signInPage: microsoftenvironment: production- 環境を production とマークすると、Developer Hub のホームページで ゲスト ログインが非表示になります。
clientId、clientSecret、tenantId- Microsoft Azure で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
signInPage: microsoft- Microsoft Azure プロバイダーをデフォルトのサインインプロバイダーとして有効にします。
オプション: 次のオプションフィールドを追加することを検討してください。
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログでユーザーをプロビジョニングする必要なく認証を有効にします。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーを認証できるようにするオプションフィールドを含む
app-config-rhdh.yamlフラグメントauth: environment: production providers: microsoft: production: clientId: ${AUTH_AZURE_CLIENT_ID} clientSecret: ${AUTH_AZURE_CLIENT_SECRET} tenantId: ${AUTH_AZURE_TENANT_ID} signInPage: microsoft dangerouslyAllowSignInWithoutUserInCatalog: truedomainHintシングルテナントアプリケーションの場合は任意です。他のテナントのアカウントを自動的に除外することで、複数のテナントにアカウントを持つユーザーのログインの手間を軽減できます。このパラメーターをシングルテナントアプリケーションで使用する場合は、コメントを解除してテナント ID を入力します。アプリケーション登録がマルチテナントの場合は、このパラメーターを空白のままにします。詳細は、Home Realm Discovery を参照してください。
オプションの
domainHintフィールドを含むapp-config-rhdh.yamlフラグメントauth: environment: production providers: microsoft: production: domainHint: ${AUTH_AZURE_TENANT_ID}additionalScopes追加のスコープの場合は任意です。アプリケーション登録のスコープを追加するには、コメントを解除して、追加するスコープのリストを入力します。デフォルトおよび必須の値のリストは
'openid', 'offline_access', 'profile', 'email', 'User.Read'です。オプションの
additionalScopesフィールドを含むapp-config-rhdh.yamlフラグメントauth: environment: production providers: microsoft: production: additionalScopes: - Mail.Send
ファイアウォールルールなどの送信アクセス制限がある環境では、このステップはオプションになります。環境にこのような制限がある場合は、RHDH バックエンドが次のホストにアクセスできることを確認してください。
-
login.microsoftonline.com: 認可コードとアクセストークンを取得および交換します。 -
graph.microsoft.com: ユーザープロファイル情報を取得します (ソースコードで参照)。このホストにアクセスできない場合は、ログインしようとすると Authentication failed, failed to fetch user profile というエラーが表示されることがあります。
4.2. Microsoft Azure からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure でユーザーを認証するには、Microsoft Azure での認証を有効化 した後、Microsoft Azure から Developer Hub ソフトウェアカタログにユーザーをプロビジョニングします。
手順
Microsoft Azure メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config-rhdh.yamlコンテンツに次の行を追加します。必須の
microsoftGraphOrgフィールドを含むapp-config.yamlフラグメントdangerouslyAllowSignInWithoutUserInCatalog: false catalog: providers: microsoftGraphOrg: providerId: target: https://graph.microsoft.com/v1.0 tenantId: ${AUTH_AZURE_TENANT_ID} clientId: ${AUTH_AZURE_CLIENT_ID} clientSecret: ${AUTH_AZURE_CLIENT_SECRET}dangerouslyAllowSignInWithoutUserInCatalog: false- Developer Hub ソフトウェアカタログ内のユーザーのみに認証を許可します。
target: https://graph.microsoft.com/v1.0- プロバイダーが接続する MSGraph API エンドポイントを定義します。ベータエンドポイント などの別のバージョンを使用するには、このパラメーターを変更することを推奨します。
tenandId、clientId、clientSecret- Microsoft Azure で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
オプション: 次のオプションの
microsoftGraphOrg.providerIdフィールドを追加することを検討してください。authority: https://login.microsoftonline.com使用する機関を定義します。Azure US government などの別の 機関 を使用するには、値を変更します。デフォルト値は
https://login.microsoftonline.comです。オプションの
queryModeフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: authority: https://login.microsoftonline.com/
queryMode: basic | advancedデフォルトでは、Microsoft Graph API はクエリー用に
basic機能セットのみを提供します。特定の機能にはadvancedクエリー機能が必要です。Microsoft Azure Advanced queries を参照してください。オプションの
queryModeフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: queryMode: advanced
user.expand単一のリレーションシップ (ナビゲーションプロパティー) によって参照される拡張リソースまたはコレクションを結果に含めます。1 回のリクエストで拡張できる関係は 1 つだけです。Microsoft Graph query expand parameter を参照してください。このパラメーターは ] or xref:userFilter[ と組み合わせることができます。
オプションの
user.expandフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: user: expand: manager
user.filterユーザーをフィルタリングします。Microsoft Graph API および Microsoft Graph API query filter parameters syntax を参照してください。このパラメーターと ???TITLE??? は相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
user.filterフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: user: filter: accountEnabled eq true and userType eq 'member'
user.loadPhotos: true | falseデフォルトで写真をロードします。ユーザーの写真をロードしない場合は
falseに設定します。オプションの
user.loadPhotosフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: user: loadPhotos: true
user.select取得する Microsoft Graph リソースの種類 を定義します。
オプションの
user.selectフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: user: select: ['id', 'displayName', 'description']
userGroupMember.filterグループメンバーシップを使用してユーザーを取得します。グループをフィルタリングし、そのメンバーを取得します。このパラメーターと ???TITLE??? は、相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
userGroupMember.filterフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: userGroupMember: filter: "displayName eq 'Backstage Users'"
userGroupMember.searchグループメンバーシップを使用してユーザーを取得します。グループを検索し、そのメンバーを取得します。このパラメーターと ???TITLE??? は、相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
userGroupMember.searchフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: userGroupMember: search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
group.expand単一のリレーションシップ (ナビゲーションプロパティー) によって参照される拡張リソースまたはコレクションを結果に含めるためのオプションのパラメーター。1 回のリクエストで拡張できる関係は 1 つだけです。https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter を参照してください。このパラメーターは、] instead of xref:userFilter[ と組み合わせることができます。
オプションの
group.expandフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: group: expand: member
group.filterグループをフィルタリングします。Microsoft Graph API query group syntax を参照してください。
オプションの
group.filterフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: group: filter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified')
group.searchグループを検索します。Microsoft Graph API query search parameter を参照してください。
オプションの
group.searchフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: group: search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
group.select取得する Microsoft Graph リソースの種類 を定義します。
オプションの
group.selectフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: group: select: ['id', 'displayName', 'description']schedule.frequencyカスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
オプションの
schedule.frequencyフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: schedule: frequency: { hours: 1 }schedule.timeoutカスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.timeoutフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: schedule: timeout: { minutes: 50 }schedule.initialDelayカスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.initialDelayフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: schedule: initialDelay: { seconds: 15}
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
backend:start: {"class":"MicrosoftGraphOrgEntityProvider$1","level":"info","message":"Read 1 msgraph users and 1 msgraph groups in 2.2 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"MicrosoftGraphOrgEntityProvider:default:refresh","taskInstanceId":"88a67ce1-c466-41a4-9760-825e16b946be","timestamp":"2024-06-26 12:23:42"} backend:start: {"class":"MicrosoftGraphOrgEntityProvider$1","level":"info","message":"Committed 1 msgraph users and 1 msgraph groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"MicrosoftGraphOrgEntityProvider:default:refresh","taskInstanceId":"88a67ce1-c466-41a4-9760-825e16b946be","timestamp":"2024-06-26 12:23:42"}- Microsoft Azure アカウントでログインします。