認証


Red Hat Developer Hub 1.3

Red Hat Developer Hub で外部サービスへの認証を設定する

Red Hat Customer Content Services

概要

Red Hat Developer Hub プラットフォームエンジニアは、組織の特定のニーズを満たすために他のユーザーの認証を管理できます。

はじめに

組織のセキュリティーポリシーによっては、Red Hat Developer Hub などのリソースへのアクセスを許可する前に、ユーザーを識別して認可することを推奨します。

Developer Hub では、認証と認可は 2 つの別々のプロセスになります。

  1. 認証はユーザーアイデンティティーを定義し、この情報を Developer Hub に渡します。Developer Hub で認証を設定するには、次の章を参照してください。
  2. 認可は、認証されたアイデンティティーが 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 の機能にアクセスできます。

前提条件

手順

  • Developer Hub のカスタム設定でゲストユーザーを有効にするには、次の内容で Developer Hub アプリケーション設定を編集 します。

    app-config-rhdh.yaml の一部

    auth:
      environment: development
      providers:
        guest:
          dangerouslyAllowOutsideDevelopment: true

検証

  1. Developer Hub のログインページに移動します。
  2. ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
  3. Developer Hub の Settings ページでは、プロファイル名は Guest です。
  4. 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

検証

  1. Developer Hub のログインページに移動します。
  2. ゲストユーザーアカウントでログインするには、Guest タイルの Enter をクリックします。
  3. Developer Hub の Settings ページでは、プロファイル名は Guest です。
  4. 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) 認証プロバイダーを有効にします。

前提条件

手順

  1. Developer Hub が RHSSO で認証できるようにするには、RHSSO の手順を完了し、レルムとユーザーを作成 し、Developer Hub アプリケーションを登録 します。

    1. 既存のレルムを使用するか、<my_realm> などの固有の 名前 を持つ レルムを作成 します。次のステップのために値を保存します。

      • RHSSO レルムのベース URL (例: <your_rhsso_URL>/auth/realms/<your_realm>)。
    2. RHSSO に Developer Hub を登録するには、作成されたレルムで、次の内容を使用して クライアント ID を作成 します。

      1. クライアント ID: <RHDH> などの固有のクライアント ID。
      2. 有効なリダイレクト URI: OIDC ハンドラー URL https://<RHDH_URL>/api/auth/oidc/handler/frame に設定します。
      3. Credentials タブに移動し、Client secret をコピーします。
      4. 次のステップのために値を保存します。

        • Client ID
        • Client Secret
    3. 検証手順を準備するには、同じレルムで、既存のユーザーの認証情報を取得するか、ユーザーを作成 します。検証手順用にユーザー認証情報を保存します。
  2. RHSSO 認証情報を Developer Hub シークレットに追加するには、secrets-rhdh などの Developer Hub シークレットを編集し、次のキー/値のペアを追加します。

    AUTH_OIDC_CLIENT_ID
    保存した クライアント ID を入力します。
    AUTH_OIDC_CLIENT_SECRET
    保存した クライアントシークレット を入力します。
    AUTH_OIDC_METADATA_URL
    保存した RHSSO レルムのベース URL を入力します。
  3. 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: oidc

    environment: production
    環境を production としてマークすると、Developer Hub のホームページでゲストログインが非表示になります。
    metadataUrlclientIdclientSecret
    シークレットを使用して 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 レルムでリフレッシュトークンのローテーションストラテジーを有効にします。

  1. ナビゲーションメニューの Configure セクションで、Realm Settings をクリックします。
  2. Realm Settings ページで、Tokens タブをクリックします。
  3. Tokens タブの Refresh tokens セクションで、Revoke Refresh TokenEnabled に切り替えます。

検証

  1. Developer Hub のログインページに移動します。
  2. Developer Hub のサインインページには OIDC を使用してサインイン と表示され、ゲストユーザーのサインインは無効になっています。
  3. 保存した ユーザー名パスワード の値を使用して、OIDC でログインします。

2.2. Red Hat Single-Sign On (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: master

    loginRealm

    認証に使用するレルムデフォルト値は master です。

    オプションの loginRealm フィールドを含む app-config.yaml フラグメント

    catalog:
      providers:
        keycloakOrg:
          default:
            loginRealm: master

    userQuerySize

    同時にクエリーするユーザー数。デフォルト値は 100 です。

    オプションの userQuerySize フィールドを含む app-config.yaml フラグメント

    catalog:
      providers:
        keycloakOrg:
          default:
            userQuerySize: 100

    groupQuerySize

    同時にクエリーするグループの数。デフォルト値は 100 です。

    オプションの groupQuerySize フィールドを含む app-config.yaml フラグメント

    catalog:
      providers:
        keycloakOrg:
          default:
            groupQuerySize: 100

    schedule.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}

検証

  1. コンソールログをチェックして、同期が完了したことを確認します。

    同期が成功した例:

    {"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"}

  2. RHSSO アカウントでログインします。

RHSSO ユーザーとグループを Red Hat Developer Hub エンティティーにマッピングする方法をカスタマイズするには、keycloakTransformerExtensionPoint を使用して Keycloak バックエンドにカスタムのユーザーおよびグループトランスフォーマーを提供するバックエンドモジュールを作成します。

手順

  1. yarn new コマンドで新しいバックエンドモジュールを作成します。
  2. カスタムのユーザーおよびグループトランスフォーマーを keycloakTransformerExtensionPoint に追加します。

    以下は、バックエンドモジュールを定義する方法の例です。

    plugins/<module-name>/src/module.ts

    import {
      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-backendpluginId と一致するように catalog に設定する必要があります。そうしないと、モジュールは初期化に失敗します。

  3. この新しいバックエンドモジュールを 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 認証プロバイダーを有効にします。

前提条件

手順

  1. Developer Hub が GitHub で認証できるようにするには、GitHub アプリケーションを作成します。きめ細かな権限を使用し、アプリケーションがアクセスできるリポジトリーをより細かく制御して、有効期間の短いトークンを使用するには、OAuth アプリケーションではなく GitHub アプリケーションを選択します。

    1. 次の設定で 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 を選択します。
    2. GeneralClients secrets セクションで、Generate a new client secret をクリックします。
    3. GeneralPrivate keys セクションで、Generate a private key をクリックします。
    4. Install App タブで、GitHub アプリケーションをインストールするアカウントを選択します。
    5. 次のステップのために以下の値を保存します。

      • アプリケーション ID
      • クライアント ID
      • クライアントシークレット
      • 秘密鍵
      • Webhook シークレット
  2. 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 シークレット を入力します。
  3. 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: github

    environment: production
    環境を production としてマークすると、Developer Hub のホームページでゲストログインが非表示になります。
    clientId, clientSecret, host, appId, webhookUrl, webhookSecret, privateKey
    GitHub で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
    sigInPage: github
    GitHub プロバイダーをデフォルトのサインインプロバイダーとして有効にします。

    オプション: 次のオプションフィールドを追加することを検討してください。

    dangerouslyAllowSignInWithoutUserInCatalog: true

    Developer 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: true

    callbackUrl

    OAuth フローを開始するときに 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>

    enterpriseInstanceUrl

    GitHub 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>

検証

  1. Developer Hub のログインページに移動します。
  2. Developer Hub のサインインページには Sign in using GitHub と表示され、ゲストユーザーのサインインは無効になっています。
  3. GitHub でログインします。

3.2. GitHub からソフトウェアカタログへのユーザーのプロビジョニング

ユーザーを認証する場合、Red Hat Developer Hub ではソフトウェアカタログにユーザーが登録されていることが必要です。ユーザーを手動でプロビジョニングするのではなく、スケジュールに従って GitHub からソフトウェアカタログにユーザーをプロビジョニングするように Developer Hub を設定することを検討してください。

前提条件

手順

  • 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: 15

    dangerouslyAllowSignInWithoutUserInCatalog: false
    Developer Hub ソフトウェアカタログに存在するユーザーのみに認証を許可します。
    organizationgithubUrlorgs
    GitHub で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
    schedule.frequency
    カスタムスケジュールの頻度を指定します。コード内で使用される cron、ISO 期間、および "人間が判読可能な期間" をサポートします。
    schedule.timeout
    カスタムタイムアウトを指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。
    schedule.initialDelay
    カスタム初期遅延を指定します。コード内で使用される ISO 期間と "人間が判読可能な期間" をサポートします。

検証

  1. コンソールログをチェックして、同期が完了したことを確認します。

    同期が成功した例:

    {"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"}

  2. GitHub アカウントでログインします。

第4章 Microsoft Azure での認証

Microsoft Azure でユーザーを認証する場合:

4.1. Microsoft Azure での認証の有効化

Red Hat Developer Hub には、OAuth を使用してユーザーを認証できる Microsoft Azure 認証プロバイダーが組み込まれています。

前提条件

  1. Microsoft Azure にアプリケーションを登録する権限がある。
  2. カスタム Developer Hub アプリケーション設定を追加している

手順

  1. Developer Hub が Microsoft Azure で認証できるようにするために、Microsoft Azure で OAuth アプリケーションを作成 します。

    1. Azure ポータルで App registrations に移動し、次の設定で New registration を作成します。

      名前
      Azure 内のアプリケーション名 (例: <My Developer Hub>)
    2. 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
      すべてのチェックボックスをオフのままにします。
    3. 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 をクリックする必要があります。

    4. Home > App registrations > <My Developer Hub> > Manage > Certificates & Secrets ページの Client secrets タブで、新しいクライアントシークレット を作成します。
    5. 次のステップのために保存します。

      • ディレクトリー (テナント) ID
      • アプリケーション (クライアント) ID
      • アプリケーション (クライアント) シークレット
  2. Microsoft Azure 認証情報を Developer Hub に追加するには、secrets-rhdh などの次のキー/値ペアを Developer Hub シークレットに追加します。

    AUTH_AZURE_TENANT_ID
    保存した ディレクトリー (テナント) ID を入力します。
    AUTH_AZURE_CLIENT_ID
    保存した アプリケーション (クライアント) ID を入力します。
    AUTH_AZURE_CLIENT_SECRET
    保存した アプリケーション (クライアント) シークレット を入力します。
  3. 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: microsoft

    environment: production
    環境を production とマークすると、Developer Hub のホームページで ゲスト ログインが非表示になります。
    clientIdclientSecrettenantId
    Microsoft Azure で作成し、OpenShift でシークレットとして設定した Developer Hub アプリケーション情報を使用します。
    signInPage: microsoft
    Microsoft Azure プロバイダーをデフォルトのサインインプロバイダーとして有効にします。

    オプション: 次のオプションフィールドを追加することを検討してください。

    dangerouslyAllowSignInWithoutUserInCatalog: true

    Developer 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: true

    domainHint

    シングルテナントアプリケーションの場合は任意です。他のテナントのアカウントを自動的に除外することで、複数のテナントにアカウントを持つユーザーのログインの手間を軽減できます。このパラメーターをシングルテナントアプリケーションで使用する場合は、コメントを解除してテナント 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 エンドポイントを定義します。ベータエンドポイント などの別のバージョンを使用するには、このパラメーターを変更することを推奨します。
    tenandIdclientIdclientSecret
    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}

検証

  1. コンソールログをチェックして、同期が完了したことを確認します。

    同期が成功した例:

    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"}

  2. Microsoft Azure アカウントでログインします。

法律上の通知

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る