Red Hat Developer Hub での認証
Red Hat Developer Hub で外部サービスへの認証を設定する
概要
第1章 認証とユーザープロビジョニングについて リンクのコピーリンクがクリップボードにコピーされました!
このモジュールでは、Red Hat Developer Hub における認証およびユーザープロビジョニングの仕組みについて、その概要を説明します。ソフトウェアカタログでのユーザーおよびグループエンティティーの作成からユーザーのサインインまでのプロセスと、認証およびカタログプラグインが各ステップをどのように有効にするかを説明します。このプロセスを理解することは、Developer Hub インスタンスを正常に設定し、認可を通じてアクセスを保護し、同期されたユーザーおよびグループデータに依存する機能を有効にするために不可欠です。
カタログ機能を完全に有効にするには、アイデンティティープロバイダーから Developer Hub ソフトウェアカタログにユーザーおよびグループのデータをプロビジョニングします。カタログプロバイダープラグインは、このタスクを非同期的に処理します。これらのプラグインは、関連するユーザーおよびグループ情報のアイデンティティープロバイダー (IdP) をクエリーし、Developer Hub カタログ内の対応するエンティティーを作成または更新します。スケジュールされたプロビジョニングにより、カタログが組織内のユーザーとグループを正確に反映されるようになります。
ユーザーが Developer Hub にアクセスしようとすると、Developer Hub は、Red Hat Build of Keycloak (RHBK)、GitHub、Microsoft Azure などの設定済みの認証プロバイダーにリダイレクトします。この外部 IdP はユーザーの認証を行います。
認証が成功すると、app-config.yaml ファイルで設定されている Developer Hub 認証プラグインが IdP からの応答を処理し、Developer Hub ソフトウェアカタログ内のアイデンティティーを解決し、Developer Hub 内でユーザーセッションを確立します。
認証とユーザープロビジョニングの設定は、いくつかの理由から重要です。
- 認証されたユーザーのみがアクセスできるようにすることで、Developer Hub インスタンスを保護します。
- IdP から同期されたユーザーおよびグループのメンバーシップに基づいてアクセス制御を定義できるようにすることで、認可を有効にします。
- エンティティーの所有権と、ユーザー、グループ、ソフトウェアコンポーネント間の関係を理解することに依存するさまざまなカタログ機能には、ユーザーおよびグループのデータをカタログにプロビジョニングすることが必要です。このプロビジョニングのステップがないと、カタログ内のコンポーネントの所有者を表示するなどの機能が正しく機能しない可能性があります。
Developer Hub の機能を調べるには、以下を実行します。
- 外部 IdP なしで Developer Hub を使用するには、ゲストユーザー が認証と認可の設定をスキップし、ゲストユーザーとしてログインして、すべての Developer Hub 機能にアクセスできるようにします。
-
ソフトウェアカタログに依存する認可ポリシーと機能を使用せずに Developer Hub を使用するには、
dangerouslyAllowSignInWithoutUserInCatalogリゾルバーオプションを有効にします。この設定により、ユーザーがカタログに登録されている必要があるチェックはバイパスされますが、認証は引き続き強制されます。
Developer Hub は一方向の同期モデルを使用しており、ユーザーとグループのデータはアイデンティティープロバイダーから Developer Hub ソフトウェアカタログに流れます。その結果、Developer Hub Web UI または REST API を使用してユーザーまたはグループを手動で削除すると、次回の取り込み時にそれらのエンティティーが再作成されるため、効果がないか、不整合が発生する可能性があります。
第2章 ゲストユーザーによる認証 リンクのコピーリンクがクリップボードにコピーされました!
Developer Hub の機能を調べるには、認証と認可の設定をスキップできます。Developer Hub を設定して、ゲストユーザーとしてログインし、Developer Hub の機能にアクセスすることができます。
2.1. Operator ベースのインストールでゲストユーザーによる認証を行う リンクのコピーリンクがクリップボードにコピーされました!
Operator ベースのインストール後、Developer Hub を設定してゲストユーザーとしてログインし、Developer Hub の機能にアクセスできます。
前提条件
- Operator を使用して Developer Hub をインストール している。
- カスタムの Developer Hub アプリケーション設定を追加 した。また、その設定を変更するための十分な権限を持っている。
手順
Developer Hub のカスタム設定でゲストユーザーを有効にするには、次の内容で Developer Hub アプリケーション設定を編集 します。
app-config.yamlフラグメントauth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: trueauth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- Developer Hub のログインページに移動します。
- ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
- Developer Hub の Settings ページでは、プロファイル名は Guest です。
- Developer Hub の機能を使用できます。
2.2. Helm ベースのインストールでゲストユーザーによる認証を行う リンクのコピーリンクがクリップボードにコピーされました!
Helm ベースのインストールでは、Developer Hub を設定してゲストユーザーとしてログインし、Developer Hub の機能にアクセスできます。
前提条件
- カスタムの Developer Hub アプリケーション設定を追加 した。また、その設定を変更するための十分な権限を持っている。
- Red Hat Developer Hub Helm チャートを使用して Developer Hub を実行 している。
手順
Developer Hub のカスタム設定でゲストユーザーを有効にするには、次の内容で Red Hat Developer Hub Helm チャートを設定 します。
Red Hat Developer Hub Helm チャート設定フラグメント
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- Developer Hub のログインページに移動します。
- ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
- Developer Hub の Settings ページでは、プロファイル名は Guest です。
- Developer Hub の機能を使用できます。
第3章 Red Hat build of Keycloak (RHBK) による認証 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak (RHBK) を使用してユーザーを認証するには、以下を行います。
3.1. Red Hat build of Keycloak (RHBK) による認証の有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat build of Keycloak (RHBK) を使用してユーザーを認証するには、Red Hat Developer Hub で OpenID Connect (OIDC) 認証プロバイダーを有効にします。
前提条件
- カスタムの Developer Hub アプリケーション設定を追加 した。また、その設定を変更するための十分な権限を持っている。
- RHSSO でレルムを作成および管理するための十分な権限がある。
手順
Developer Hub が RHBK で認証できるようにするには、RHBK で手順を完了し、レルムとユーザーを作成 して 最初のアプリケーションを保護 します。
既存のレルムを使用するか、<my_realm> などの固有の 名前 を持つ レルムを作成 します。次のステップのために値を保存します。
- RHBK レルムのベース URL (例: <your_rhbk_URL>/realms/<your_realm>)。
RHBK に Developer Hub を登録するには、作成されたレルムで、次の操作を実行して 最初のアプリケーションを保護 します。
- クライアント ID: <RHDH> などの固有のクライアント ID。
-
有効なリダイレクト URI: OIDC ハンドラー URL
https://<RHDH_URL>/api/auth/oidc/handler/frameに設定します。 - Credentials タブに移動し、クライアントシークレット をコピーします。
次のステップのために値を保存します。
- クライアント ID
- クライアントシークレット
- 検証手順を準備するには、同じレルムで、既存のユーザーの認証情報を取得するか、ユーザーを作成 します。検証手順用にユーザー認証情報を保存します。
RHSSO 認証情報を Developer Hub に追加するには、以下のキーと値のペアを Developer Hub シークレット に追加します。
AUTH_OIDC_CLIENT_ID- 保存した クライアント ID を入力します。
AUTH_OIDC_CLIENT_SECRET- 保存した クライアントシークレット を入力します。
AUTH_OIDC_METADATA_URL- 保存した RHBK realm base URL を入力します。
Developer Hub のカスタム設定で RHBK 認証プロバイダーをセットアップするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config.yamlコンテンツに次の行を追加します。必須フィールドを設定します。
RHBK による認証を有効にするための必須フィールドを含む
app-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow environment: production-
環境を
productionとしてマークすると、Developer Hub のホームページでゲストログインが非表示になります。 metadataUrl、clientId、clientSecret- シークレットを使用して OIDC プロバイダーを設定します。
sigInPage: oidc- OIDC プロバイダーをデフォルトのサインインプロバイダーとして有効にします。
prompt: auto- アクティブな RHSSO セッションが存在する場合に、アイデンティティープロバイダーが認証情報を要求するか、ログインリダイレクトをバイパスするかを自動的に決定できるようにします。
prompt: auto が設定されていない場合、アイデンティティープロバイダーはデフォルトで prompt: none に設定されます。この場合、すでにログインしていると想定され、アクティブなセッションのないサインイン要求が拒否されます。
callbackUrlRHBK コールバック URL。
オプションの
callbackURLフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: callbackUrl: ${AUTH_OIDC_CALLBACK_URL}auth: providers: oidc: production: callbackUrl: ${AUTH_OIDC_CALLBACK_URL}Copy to Clipboard Copied! Toggle word wrap Toggle overflow tokenEndpointAuthMethodトークンエンドポイント認証方法。
オプションの
tokenEndpointAuthMethodフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}auth: providers: oidc: production: tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}Copy to Clipboard Copied! Toggle word wrap Toggle overflow tokenSignedResponseAlgトークン署名応答アルゴリズム。
オプションの
tokenSignedResponseAlgフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}auth: providers: oidc: production: tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}Copy to Clipboard Copied! Toggle word wrap Toggle overflow scopeRHBK スコープ。
オプションの
scopeフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: scope: ${AUTH_OIDC_SCOPE}auth: providers: oidc: production: scope: ${AUTH_OIDC_SCOPE}Copy to Clipboard Copied! Toggle word wrap Toggle overflow signInresolvers認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバーをオーバーライドするには、リゾルバーリストを入力します (
oidcSubClaimMatchingKeycloakUserId)。認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolver:::: サインインリゾルバー名を入力します。使用可能な値: *oidcSubClaimMatchingKeycloakUserId*emailLocalPartMatchingUserEntityName*emailMatchingUserEntityProfileEmail*preferredUsernameMatchingUserEntityName+ オプションの
resolversリストを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログのユーザープロビジョニング要件を回避するようにサインインリゾルバーを設定します。
警告このオプションは Developer Hub の機能を調べるために使用しますが、実稼働環境では使用しないでください。
ソフトウェアカタログに存在しないユーザーのサインインを許可するオプションのフィールドを含む
app-config-rhdh.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
sessionDurationユーザーセッションの有効期間。期間を
msライブラリー形式 ('24h'、'2 days' など)、ISO 期間形式、またはコード内で使用される "human duration" 形式で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: sessionDuration: { hours: 24 }auth: providers: github: production: sessionDuration: { hours: 24 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow authbackstageTokenExpiration- Developer Hub トークンの有効期限をデフォルト値の 1 時間から変更する場合、これはセッション期間ではなく、短期暗号化トークンの有効期間を指すことに注意してください。有効期限の値は 10 分から 24 時間の間で設定する必要があります。
オプションの
auth.backstageTokenExpirationフィールドを含むapp-config.yamlフラグメントauth: backstageTokenExpiration: { minutes: <user_defined_value> }auth: backstageTokenExpiration: { minutes: <user_defined_value> }Copy to Clipboard Copied! Toggle word wrap Toggle overflow セキュリティー上の考慮事項頻繁なリフレッシュトークンの要求により複数の有効なリフレッシュトークンが発行された場合、古いトークンは期限が切れるまで有効です。セキュリティーを強化し、古いトークンの誤用を防ぐには、RHBK レルムでリフレッシュトークンのローテーションストラテジーを有効にします。
- ナビゲーションメニューの Configure セクションで、Realm Settings をクリックします。
- Realm Settings ページで、Tokens タブをクリックします。
- Tokens タブの Refresh tokens セクションで、Revoke Refresh Token を Enabled に切り替えます。
検証
- Developer Hub のログインページに移動します。
- Developer Hub のサインインページには Sign in using OIDC と表示され、ゲストユーザーのサインインは無効になっています。
- 保存した ユーザー名 と パスワード の値を使用して、OIDC でログインします。
3.2. Red Hat build of Keycloak (RHBK) からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
前提条件
手順
RHBK メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config.yamlコンテンツに次の行を追加します。必須の
keycloakOrgフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow baseUrl- RHBK による認証を有効にする ときに定義される RHBK サーバー URL。
clientId- RHBK での認証を有効にする ときに定義される、RHBK 内の Developer Hub アプリケーションクライアント ID。
clientSecret- RHBK での認証を有効にする ときに定義される、RHBK 内の Developer Hub アプリケーションクライアントシークレット。
オプション: 次のオプションフィールドを追加することを検討してください。
realm同期するレルムデフォルト値は
masterです。オプションの
realmフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: realm: mastercatalog: providers: keycloakOrg: default: realm: masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow loginRealm認証に使用するレルムデフォルト値は
masterです。オプションの
loginRealmフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: loginRealm: mastercatalog: providers: keycloakOrg: default: loginRealm: masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow userQuerySize同時にクエリーするユーザー数。デフォルト値は
100です。オプションの
userQuerySizeフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: userQuerySize: 100catalog: providers: keycloakOrg: default: userQuerySize: 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow groupQuerySize同時にクエリーするグループの数。デフォルト値は
100です。オプションの
groupQuerySizeフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: groupQuerySize: 100catalog: providers: keycloakOrg: default: groupQuerySize: 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.frequencyカスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
オプションの
schedule.frequencyフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.timeoutカスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.timeoutフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.initialDelayカスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.initialDelayフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
{"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"}{"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"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - RHBK アカウントでログインします。
3.3. Red Hat build of Keycloak (RHBK) からソフトウェアカタログにユーザーをプロビジョニングするためのカスタムトランスフォーマーの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHBK ユーザーとグループを Red Hat Developer Hub エンティティーにマッピングする方法をカスタマイズするには、keycloakTransformerExtensionPoint を使用して Keycloak バックエンドにカスタムのユーザーおよびグループトランスフォーマーを提供するバックエンドモジュールを作成します。
手順
-
yarn newコマンドで新しいバックエンドモジュールを作成します。 カスタムのユーザーおよびグループトランスフォーマーを
keycloakTransformerExtensionPointに追加します。以下は、バックエンドモジュールを定義する方法の例です。
plugins/<module-name>/src/module.tsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要モジュールの
pluginIdは、keycloak-backendのpluginIdと一致するようにcatalogに設定する必要があります。そうしないと、モジュールは初期化に失敗します。この新しいバックエンドモジュールを Developer Hub バックエンドにインストールします。
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
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"}{"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"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 最初のインポートが完了したら、Catalog ページに移動し、User を選択してユーザーのリストを表示します。
- ユーザーを選択すると、RHBK からインポートされた情報が表示されます。
- グループを選択してリストを表示し、RHBK からインポートされた情報にアクセスしたり確認したりできます。
- RHBK アカウントでログインできます。
第4章 GitHub での認証 リンクのコピーリンクがクリップボードにコピーされました!
GitHub または GitHub Enterprise でユーザーを認証する場合は、以下を行います。
4.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 アラート
- デプロイメント
- プルリクエスト
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 に追加するには、以下のキーと値のペアを Developer Hub シークレット に追加します。
AUTH_GITHUB_APP_ID- 保存した アプリケーション ID を入力します。
AUTH_GITHUB_CLIENT_ID- 保存した クライアント ID を入力します。
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 とのインテグレーションを有効にするには、Developer Hub のカスタム config map (
my-rhdh-app-configなど) を編集し、app-config.yamlファイルの内容に次の行を追加します。GitHub での認証を有効にするための必須フィールドを含む
app-config.yamlファイルのフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 環境を
productionとしてマークし、Developer Hub のログインページでゲストログインオプションを無効にします。 - 2
- Developer Hub のシークレットに設定されている GitHub 認証情報を適用します。
- 3
- GitHub プロバイダーを Developer Hub サインインプロバイダーとして有効にします。
オプション: 次のオプションフィールドを追加することを検討してください。
callbackUrlOAuth フローを開始するときに GitHub が使用するコールバック URL (例: <your_intermediate_service_url/handler>)。多くの Developer Hub インスタンスに対して 1 つの OAuth アプリケーションを使用する場合など、Developer Hub が直接のレシーバーではない場合に定義します。
オプションの
enterpriseInstanceUrlフィールドを含むapp-config.yamlファイルのフラグメントauth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>auth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
sessionDurationユーザーセッションの有効期間。期間を
msライブラリー形式 ('24h'、'2 days' など)、ISO 期間形式、またはコード内で使用される "human duration" 形式で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: sessionDuration: { hours: 24 }auth: providers: github: production: sessionDuration: { hours: 24 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow signInresolvers-
認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
usernameMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。
認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。利用可能なリゾルバーは次のとおりです。
-
usernameMatchingUserEntityName -
preferredUsernameMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログのユーザープロビジョニング要件を回避するようにサインインリゾルバーを設定します。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーのサインインを許可するオプションのフィールドを含む
app-config.yamlファイルのフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
別の認証プロバイダーとの GitHub インテグレーションを有効にするには、次の設定を完了します。
-
GitHub プロバイダーを既存の
authセクションに追加します。 -
認証プロバイダーの設定から
signInPageセクションを保持します。
GitHub インテグレーションを有効にし、別の認証プロバイダーを使用するための必須フィールドを含む app-config.yaml ファイルのフラグメント
検証
- Developer Hub のログインページに移動します。
- Developer Hub のサインインページには Sign in using GitHub と表示され、ゲストユーザーのサインインは無効になっています。
- GitHub でログインします。
4.2. GitHub からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
ユーザーを認証する場合、Red Hat Developer Hub ではソフトウェアカタログにユーザーが登録されていることが必要です。ユーザーを手動でプロビジョニングするのではなく、スケジュールに従って GitHub からソフトウェアカタログにユーザーをプロビジョニングするように Developer Hub を設定することを検討してください。
前提条件
次のシークレットを含む GitHub での認証が有効化されている。
-
GITHUB_HOST_DOMAIN -
GITHUB_ORGANIZATION
-
手順
GitHub メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config.yamlコンテンツに次の行を追加します。必須の
githubフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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"}{"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"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - GitHub アカウントでログインします。
第5章 Microsoft Azure での認証 リンクのコピーリンクがクリップボードにコピーされました!
Microsoft Azure でユーザーを認証する場合:
5.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 -
Microsoft Graph API のオプションのカスタムスコープ。これは、このセクションと Developer Hub 設定ファイル
app-config.yamlの両方で定義します。
-
企業によっては、これらの権限に対して管理者の同意を与えることが必要な場合があります。管理者の同意が必要ない場合でも、管理者の同意を与える場合があります。そうすることで、ユーザーが初めて 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 に追加するには、以下のキーと値のペアを Developer Hub シークレット に追加します。
AUTH_AZURE_TENANT_ID- 保存した ディレクトリー (テナント) ID を入力します。
AUTH_AZURE_CLIENT_ID- 保存した アプリケーション (クライアント) ID を入力します。
AUTH_AZURE_CLIENT_SECRET- 保存した アプリケーション (クライアント) シークレット を入力します。
app-config.yamlファイルで Microsoft Azure 認証プロバイダーを設定します。app-config.yamlファイルのフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 環境を実稼働環境としてマークし、Developer Hub のログインページで Guest ログインオプションを無効にします。
- 2
- Developer Hub のシークレットに設定されている Microsoft Azure 認証情報を適用します。
- 3
- Microsoft Azure プロバイダーを Developer Hub サインインプロバイダーとして設定します。
オプション: 次のオプションフィールドを追加することを検討してください。
domainHintシングルテナントアプリケーションの場合は任意です。他のテナントのアカウントを自動的に除外することで、複数のテナントにアカウントを持つユーザーのログインの手間を軽減できます。このパラメーターをシングルテナントアプリケーションで使用する場合は、コメントを解除してテナント ID を入力します。アプリケーション登録がマルチテナントの場合は、このパラメーターを空白のままにします。詳細は、Home Realm Discovery を参照してください。
オプションの
domainHintフィールドを含むapp-config.yamlファイルのフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow additionalScopes追加のスコープの場合は任意です。アプリケーション登録のスコープを追加するには、コメントを解除して、追加するスコープのリストを入力します。デフォルトおよび必須の値のリストは
'openid', 'offline_access', 'profile', 'email', 'User.Read'です。オプションの
additionalScopesフィールドを含むapp-config.yamlファイルのフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow sessionDurationユーザーセッションの有効期間。期間を
msライブラリー形式 ('24h'、'2 days' など)、ISO 期間形式、またはコード内で使用される "human duration" 形式で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: microsoft: production: sessionDuration: { hours: 24 }auth: providers: microsoft: production: sessionDuration: { hours: 24 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow signInresolvers-
認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
emailLocalPartMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。
認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。利用可能なリゾルバーは次のとおりです。
-
userIdMatchingUserEntityAnnotation -
emailLocalPartMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログのユーザープロビジョニング要件を回避するようにサインインリゾルバーを設定します。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーのサインインを許可するオプションのフィールドを含む
app-config-rhdh.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
注記ファイアウォールルールなどの送信アクセス制限がある環境では、このステップはオプションになります。環境にこのような制限がある場合は、RHDH バックエンドが次のホストにアクセスできることを確認してください。
-
login.microsoftonline.com: 認可コードとアクセストークンを取得および交換します。 -
graph.microsoft.com: ユーザープロファイル情報を取得します (ソースコードで参照)。このホストにアクセスできない場合は、ログインしようとすると Authentication failed, failed to fetch user profile というエラーが表示されることがあります。
= Microsoft Azure からソフトウェアカタログへのユーザーのプロビジョニング
Microsoft Azure でユーザーを認証するには、Microsoft Azure での認証を有効化 した後、Microsoft Azure から Developer Hub ソフトウェアカタログにユーザーをプロビジョニングします。
手順
-
Microsoft Azure メンバー検出を有効にするには、
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集し、app-config.yamlコンテンツに次の行を追加します。
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/catalog: providers: microsoftGraphOrg: providerId: authority: https://login.microsoftonline.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
queryMode: basic | advancedデフォルトでは、Microsoft Graph API はクエリー用に
basic機能セットのみを提供します。特定の機能にはadvancedクエリー機能が必要です。Microsoft Azure Advanced queries を参照してください。オプションの
queryModeフィールドを含むapp-config.yamlフラグメントcatalog: providers: microsoftGraphOrg: providerId: queryMode: advancedcatalog: providers: microsoftGraphOrg: providerId: queryMode: advancedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
user.expand単一のリレーションシップ (ナビゲーションプロパティー) によって参照される拡張リソースまたはコレクションを結果に含めます。1 回のリクエストで拡張できる関係は 1 つだけです。Microsoft Graph query expand parameter を参照してください。このパラメーターは ] or xref:userFilter[ と組み合わせることができます。
オプションの
user.expandフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
user.filterユーザーをフィルタリングします。Microsoft Graph API および Microsoft Graph API query filter parameters syntax を参照してください。このパラメーターと ???TITLE??? は相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
user.filterフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
user.loadPhotos: true | falseデフォルトで写真をロードします。ユーザーの写真をロードしない場合は
falseに設定します。オプションの
user.loadPhotosフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
user.select取得する Microsoft Graph リソースの種類 を定義します。
オプションの
user.selectフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
userGroupMember.filterグループメンバーシップを使用してユーザーを取得します。グループをフィルタリングし、そのメンバーを取得します。このパラメーターと ???TITLE??? は、相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
userGroupMember.filterフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
userGroupMember.searchグループメンバーシップを使用してユーザーを取得します。グループを検索し、そのメンバーを取得します。このパラメーターと ???TITLE??? は、相互に排他的であるため、いずれか 1 つだけを指定できます。
オプションの
userGroupMember.searchフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
group.expand単一のリレーションシップ (ナビゲーションプロパティー) によって参照される拡張リソースまたはコレクションを結果に含めるためのオプションのパラメーター。1 回のリクエストで拡張できる関係は 1 つだけです。https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter を参照してください。このパラメーターは、] instead of xref:userFilter[ と組み合わせることができます。
オプションの
group.expandフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
group.filterグループをフィルタリングします。Microsoft Graph API query group syntax を参照してください。
オプションの
group.filterフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
group.searchグループを検索します。Microsoft Graph API query search parameter を参照してください。
オプションの
group.searchフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
group.select取得する Microsoft Graph リソースの種類 を定義します。
オプションの
group.selectフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.frequencyカスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
オプションの
schedule.frequencyフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.timeoutカスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.timeoutフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.initialDelayカスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
オプションの
schedule.initialDelayフィールドを含むapp-config.yamlフラグメントCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
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"}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"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Microsoft Azure アカウントでログインします。