Red Hat Developer Hub での認証
Red Hat Developer Hub で外部サービスへの認証を設定する
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
組織のセキュリティーポリシーによっては、Red Hat Developer Hub などのリソースへのアクセスを許可する前に、ユーザーを識別して認可することを推奨します。
Developer Hub では、認証と認可は 2 つの別々のプロセスになります。
- 認証はユーザーアイデンティティーを定義し、この情報を Developer Hub に渡します。Developer Hub で認証を設定するには、次の章を参照してください。
- 認可は、認証されたアイデンティティーが Developer Hub でアクセスできる内容や実行できる内容を定義します。Red Hat 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.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 チャートを使用して 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 build of Keycloak (RHBK) による認証 リンクのコピーリンクがクリップボードにコピーされました!
RHSSO 7.6 は認証プロバイダーとしては非推奨です。RHSSO はメンテナンスサポートが終了するまで引き続き使用できます。詳細は、RHSSO ライフサイクルの日付 を参照してください。代わりに、Red Hat build of Keycloak (RHBK) への移行を検討してください。
Red Hat build of Keycloak (RHBK) を使用してユーザーを認証するには、以下を行います。
2.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 タブに移動し、Client secret をコピーします。
次のステップのために値を保存します。
- クライアント 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フラグメントauth: environment: production providers: oidc: production: metadataUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET} prompt: auto signInPage: oidcenvironment: 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}tokenEndpointAuthMethodトークンエンドポイント認証方法。
オプションの
tokenEndpointAuthMethodフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}tokenSignedResponseAlgトークン署名応答アルゴリズム。
オプションの
tokenSignedResponseAlgフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}scopeRHBK スコープ。
オプションの
scopeフィールドを含むapp-config.yamlフラグメントauth: providers: oidc: production: scope: ${AUTH_OIDC_SCOPE}signInresolvers認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
emailLocalPartMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。使用可能な値は次のとおりです。
-
emailLocalPartMatchingUserEntityName -
emailMatchingUserEntityProfileEmail -
preferredUsernameMatchingUserEntityName
-
オプションの resolvers リストを含む app-config.yaml フラグメント
auth:
providers:
oidc:
production:
signIn:
resolvers:
- resolver: preferredUsernameMatchingUserEntityName
- resolver: emailMatchingUserEntityProfileEmail
- resolver: emailLocalPartMatchingUserEntityName
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper 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} signIn: resolvers: - resolver: emailLocalPartMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true signInPage: oidcsessionDurationユーザーセッションの有効期間。期間は、
msライブラリー形式 ('24h'、'2 days' など)、ISO の期間、またはコード内で使用される "人間が判読可能な期間" で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: github: production: sessionDuration: { hours: 24 }authbackstageTokenExpiration- Developer Hub トークンの有効期限をデフォルト値の 1 時間から変更する場合、これはセッション期間ではなく、短期暗号化トークンの有効期間を指すことに注意してください。有効期限の値は 10 分から 24 時間の間で設定する必要があります。
オプションの
auth.backstageTokenExpirationフィールドを含むapp-config.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 build of Keycloak (RHBK) からソフトウェアカタログへのユーザーのプロビジョニング リンクのコピーリンクがクリップボードにコピーされました!
前提条件
手順
backstage-plugin-catalog-backend-module-keycloak-dynamicプラグインを有効 にします。dynamic-plugins.yamlファイルフラグメントplugins: - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-keycloak-dynamic' disabled: falseRHBK メンバー検出を有効にするには、カスタムの Developer Hub 設定ファイルである
app-config.yamlを編集します。必須の
keycloakOrgフィールドを含むapp-config.yamlフラグメントcatalog: providers: keycloakOrg: default: baseUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET}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: 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"}- RHBK アカウントでログインします。
2.3. Red Hat build of Keycloak (RHBK) からソフトウェアカタログにユーザーをプロビジョニングするためのカスタムトランスフォーマーの作成 リンクのコピーリンクがクリップボードにコピーされました!
RHBK ユーザーとグループを Red Hat Developer Hub エンティティーにマッピングする方法をカスタマイズするには、keycloakTransformerExtensionPoint を使用して Keycloak バックエンドにカスタムのユーザーおよびグループトランスフォーマーを提供するバックエンドモジュールを作成します。
手順
-
yarn newコマンドで新しいバックエンドモジュールを作成します。 カスタムのユーザーおよびグループトランスフォーマーを
keycloakTransformerExtensionPointに追加します。以下は、バックエンドモジュールを定義する方法の例です。
plugins/<module-name>/src/module.tsimport { GroupTransformer, keycloakTransformerExtensionPoint, UserTransformer, } from '@backstage-community/plugin-catalog-backend-module-keycloak'; 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 を選択してユーザーのリストを表示します。
- ユーザーを選択すると、RHBK からインポートされた情報が表示されます。
- グループを選択してリストを表示し、RHBK からインポートされた情報にアクセスしたり確認したりできます。
- RHBK アカウントでログインできます。
第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 アラート
- デプロイメント
- プルリクエスト
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_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 とのインテグレーションを有効にするには、Developer Hub のカスタム config map (
my-rhdh-app-configなど) を編集し、app-config.yamlファイルの内容に次の行を追加します。GitHub での認証を有効にするための必須フィールドを含む
app-config.yamlファイルのフラグメントauth: environment: production1 providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID}2 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: github3 - 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>enterpriseInstanceUrlGitHub Enterprise の URL。前のステップで
GITHUB_HOST_DOMAINシークレットを定義しておく必要があります。オプションの
enterpriseInstanceUrlフィールドを含むapp-config.yamlファイルのフラグメントauth: providers: github: production: enterpriseInstanceUrl: ${GITHUB_HOST_DOMAIN}signInresolvers-
認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
usernameMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。
認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。利用可能なリゾルバーは次のとおりです。
-
usernameMatchingUserEntityName -
preferredUsernameMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
dangerouslyAllowSignInWithoutUserInCatalog: trueDeveloper Hub ソフトウェアカタログのユーザープロビジョニング要件を回避するようにサインインリゾルバーを設定します。
警告Developer Hub の機能を調べるには
dangerouslyAllowSignInWithoutUserInCatalogを使用しますが、実稼働環境では使用しないでください。ソフトウェアカタログに存在しないユーザーのサインインを許可するオプションのフィールドを含む
app-config.yamlファイルのフラグメントauth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} signIn: resolvers: - resolver: usernameMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true 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
別の認証プロバイダーとの GitHub インテグレーションを有効にするには、次の設定を完了します。
-
GitHub プロバイダーを既存の
authセクションに追加します。 -
認証プロバイダーの設定から
signInPageセクションを保持します。
GitHub インテグレーションを有効にし、別の認証プロバイダーを使用するための必須フィールドを含む app-config.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
-
手順
backstage-plugin-catalog-backend-module-github-dynamicプラグインを有効 にします。dynamic-plugins.yamlファイルフラグメントplugins: - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-github-dynamic' disabled: falseGitHub メンバー検出を有効にするには、カスタムの Developer Hub 設定ファイルである
app-config.yamlを編集します。必須の
githubフィールドを含むapp-config.yamlフラグメント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: 15organization、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.All -
GroupMember.Read.All -
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ファイルのフラグメントauth: environment: production1 providers: microsoft: production: clientId: ${AUTH_AZURE_CLIENT_ID}2 clientSecret: ${AUTH_AZURE_CLIENT_SECRET} tenantId: ${AUTH_AZURE_TENANT_ID} signInPage: microsoft3
オプション: 次のオプションフィールドを追加することを検討してください。
domainHintシングルテナントアプリケーションの場合は任意です。他のテナントのアカウントを自動的に除外することで、複数のテナントにアカウントを持つユーザーのログインの手間を軽減できます。このパラメーターをシングルテナントアプリケーションで使用する場合は、コメントを解除してテナント ID を入力します。アプリケーション登録がマルチテナントの場合は、このパラメーターを空白のままにします。詳細は、Home Realm Discovery を参照してください。
オプションの
domainHintフィールドを含むapp-config.yamlファイルのフラグメントauth: environment: production providers: microsoft: production: domainHint: ${AUTH_AZURE_TENANT_ID}additionalScopes追加のスコープの場合は任意です。アプリケーション登録のスコープを追加するには、コメントを解除して、追加するスコープのリストを入力します。デフォルトおよび必須の値のリストは
'openid', 'offline_access', 'profile', 'email', 'User.Read'です。オプションの
additionalScopesフィールドを含むapp-config.yamlファイルのフラグメントauth: environment: production providers: microsoft: production: additionalScopes: - Mail.SendsessionDurationユーザーセッションの有効期間。期間は、
msライブラリー形式 ('24h'、'2 days' など)、ISO の期間、またはコード内で使用される "人間が判読可能な期間" で入力します。オプションの
sessionDurationフィールドを含むapp-config-rhdh.yamlフラグメントauth: providers: microsoft: production: sessionDuration: { hours: 24 }signInresolvers-
認証が成功したら、サインインするユーザーを、Developer Hub カタログ内の既存のユーザーに解決する必要があります。ユースケースに合わせて最適な形でユーザーを確実にマッチさせるために、特定のリゾルバーを設定することを検討してください。デフォルトのリゾルバー
emailLocalPartMatchingUserEntityNameをオーバーライドするには、リゾルバーのリストを入力します。
認証プロバイダーは、成功するまで各サインインリゾルバーを順番に試行します。どれも成功しない場合は失敗します。
警告実稼働モードでは、ユーザーが確実にマッチするように、リゾルバーを 1 つだけ設定してください。
resolverサインインリゾルバー名を入力します。利用可能なリゾルバーは次のとおりです。
-
userIdMatchingUserEntityAnnotation -
emailLocalPartMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
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} signIn: resolvers: - resolver: usernameMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true signInPage: microsoft
ファイアウォールルールなどの送信アクセス制限がある環境では、このステップはオプションになります。環境にこのような制限がある場合は、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 ソフトウェアカタログにユーザーをプロビジョニングします。
手順
backstage-plugin-catalog-backend-module-msgraph-dynamicプラグインを有効 にします。dynamic-plugins.yamlファイルフラグメントplugins: - package: './dynamic-plugins/dist/backstage-plugin-catalog-backend-module-msgraph-dynamic' disabled: falseMicrosoft Azure メンバー検出を有効にするには、カスタム Developer Hub 設定ファイルである
app-config.yamlを編集します。必須の
microsoftGraphOrgフィールドを含むapp-config.yamlフラグメント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} schedule: frequency: { hours: 1 } timeout: { minutes: 50 } initialDelay: { minutes: 50 }target: https://graph.microsoft.com/v1.0- プロバイダーが接続する MSGraph API エンドポイントを定義します。ベータエンドポイント などの別のバージョンを使用するには、このパラメーターを変更することを推奨します。
tenandId、clientId、clientSecret- Microsoft Azure で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
schedulefrequency- コードで使用されている cron、ISO 期間、または人間の期間としてスケジュール頻度を入力します。
timeout- スケジュールタイムアウトをコードで使用される ISO 期間またはヒューマンタイムとして入力します。
initialDelayコードで使用されている ISO 期間またはヒューマンタイムとして、スケジュールの初期遅延を入力します。
ヒント大規模な組織では、このプラグインには時間がかかる場合があります。したがって、多数のユーザーとグループを初めてインポートするときに、低い頻度またはタイムアウトを設定しないでください。
オプション: 次のオプションの 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']
検証
コンソールログをチェックして、同期が完了したことを確認します。
同期が成功した例:
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 アカウントでログインします。