認証
Red Hat Developer Hub で外部サービスへの認証を設定する
概要
はじめに リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub 内の認証により、ユーザーのサインイン、識別、外部リソースへのアクセスが容易になります。複数の認証プロバイダーをサポートします。
認証プロバイダーは通常、次のように使用されます。
- サインインと識別のための 1 つのプロバイダー。
- 外部リソースにアクセスするための追加プロバイダー。
Red Hat Developer Hub は、次の認証プロバイダーをサポートしています。
- Microsoft Azure
-
microsoft - GitHub
-
github - Keycloak
-
oidc
使用するプロバイダーごとに、専用の手順に従って次のタスクを完了してください。
- 認証プロバイダーと Red Hat Developer Hub が通信するために必要な共有シークレットを設定します。
- 認証プロバイダーを使用するように Red Hat Developer Hub を設定します。
第1章 Microsoft Azure 認証プロバイダーの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub には、OAuth を使用してユーザーを認証できる Microsoft Azure 認証プロバイダーが組み込まれています。
手順
Developer Hub が Microsoft Azure で認証できるようにするために、Microsoft Azure で OAuth アプリケーションを作成します。
- Azure Portal > App registrations に移動し、Developer Hub 用の App Registration を作成します。
App registration の概要ページで、次の設定を含む新しい Web platform configuration を追加します。
- Redirect URI
-
Developer Hub で設定されているバックエンド認証 URI (
https://<APP_FQDN>/api/auth/microsoft/handler/frame) を入力します。 - Front-channel logout URL
- 空白のままにします。
- Implicit grant and hybrid flows
- すべてのチェックボックスをオフのままにします。
API permissions タブで Add Permission をクリックし、Microsoft Graph API に対して次の Delegated permission を追加します。
-
email -
offline_access -
openid -
profile -
User.Read Microsoft Graph API のオプションのカスタムスコープ。この場所と、Developer Hub 設定 (
app-config-rhdh.yaml) の両方で定義します。注記企業によっては、これらの権限に対して管理者の同意を与えることが必要な場合があります。管理者の同意が必要ない場合でも、管理者の同意を与える場合があります。そうすることで、ユーザーが初めて Backstage にアクセスするときに、個別に同意する必要がなくなるためです。管理者の同意を与えるには、ディレクトリー管理者が admin consent ページに移動し、Grant admin consent for COMPANY NAME をクリックする必要があります。
-
- Certificates & Secrets ページに移動し、Client secrets タブで新しいクライアントシークレットを作成します。次のステップのために Client secret を保存します。
Developer Hub のシークレットに Microsoft Azure 認証情報を追加します。
-
secrets-rhdhなどの Developer Hub シークレットを編集します。 以下のキーと値のペアを追加します。
-
AUTH_AZURE_CLIENT_ID: Microsoft Azure で生成した Application ID を入力します。 -
AUTH_AZURE_CLIENT_SECRET: Microsoft Azure で生成した Client secret を入力します。 -
AUTH_AZURE_TENANT_ID: Microsoft Azure の Tenant ID を入力します。
-
-
Developer Hub のカスタム設定で Microsoft Azure 認証プロバイダーを設定します。
app-config-rhdhなどのカスタム Developer Hub config map を編集します。app-config-rhdh.yamlコンテンツで、ルートのauth設定の下にMicrosoftプロバイダー設定を追加し、サインイン用にMicrosoftプロバイダーを有効にします。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} # domainHint: ${AUTH_AZURE_TENANT_ID}1 # additionalScopes:2 # - Mail.Send signInPage: microsoft3 - 1
- シングルテナントアプリケーションの場合は任意です。他のテナントのアカウントを自動的に除外することで、複数のテナントにアカウントを持つユーザーのログインの手間を軽減できます。このパラメーターをシングルテナントアプリケーションで使用する場合は、コメントを解除してテナント ID を入力します。アプリケーション登録がマルチテナントの場合は、このパラメーターを空白のままにします。詳細は、Home Realm Discovery を参照してください。
- 2
- 追加のスコープの場合は任意です。アプリケーション登録のスコープを追加するには、コメントを解除して、追加するスコープのリストを入力します。デフォルトおよび必須の値は、
['user.read']です。 - 3
- Microsoft Azure プロバイダーをデフォルトのサインインプロバイダーとして有効にします。
ファイアウォールルールなどにより、発信アクセスが制限されている環境では任意です。環境で発信アクセスが制限されている場合は、Backstage バックエンドが次のホストにアクセスできることを確認してください。
-
login.microsoftonline.com: 認可コードとアクセストークンを取得および交換します。 -
graph.microsoft.com: ユーザープロファイル情報を取得します (こちらのソースコードを参照)。このホストにアクセスできない場合、ユーザーがログインしようとすると Authentication failed, failed to fetch user profile というエラーが表示されることがあります。
第2章 GitHub 認証プロバイダーを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub は、ビルトインの GitHub 認証プロバイダーを使用して、GitHub または GitHub Enterprise でユーザーを認証します。
2.1. GitHub アプリケーションの概要 リンクのコピーリンクがクリップボードにコピーされました!
GitHub アプリケーションは一般に、OAuth アプリケーションよりも推奨されます。これは、GitHub アプリケーションは詳細な権限を使用し、アプリケーションがアクセスできるリポジトリーをより詳細に制御し、有効期間の短いトークンを使用するためです。詳細は、GitHub ドキュメントの GitHub Apps overview を参照してください。
2.2. GitHub アプリケーションの登録 リンクのコピーリンクがクリップボードにコピーされました!
GitHub アプリケーションでは、そのアプリケーションの一部として許可されたスコープを設定します。そのため、プラグインが必要とするスコープを検証する必要があります。スコープ情報はプラグインの README ファイルで入手できます。
GitHub 認証を追加するには、GitHub Web サイトの Registering a GitHub App の手順を実行します。
次の例を使用して、実稼働環境に関する情報を Register new GitHub App ページの必須フィールドに入力します。
- アプリケーション名: Red Hat Developer Hub
-
ホームページ URL:
https://developer-hub-<NAMESPACE_NAME>.<KUBERNETES_ROUTE_HOST> -
認証コールバック URL:
https://developer-hub-<NAMESPACE_NAME>.<KUBERNETES_ROUTE_HOST>/api/auth/github/handler/frame
ホームページ URL は Developer Hub のフロントエンドを指し、認可コールバック URL は認証プロバイダーのバックエンドを指します。
2.3. Developer Hub での GitHub アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Developer Hub の GitHub 認証を追加するには、app-config.yaml ファイルで GitHub アプリケーションを設定する必要があります。
GitHub 認証プロバイダーは次の設定キーを使用します。
-
clientId: GitHub で生成したクライアント ID。例: b59241722e3c3b4816e2 -
clientSecret: 生成したクライアント ID に関連付けられたクライアントシークレット。 -
enterpriseInstanceUrl(オプション): GitHub Enterprise インスタンスのベース URL。たとえば、https://ghe.<company>.comです。enterpriseInstanceUrlは GitHub Enterprise にのみ必要です。 -
callbackUrl(オプション): OAuth フローを開始するときに GitHub が使用するコールバック URL。たとえば、https://your-intermediate-service.com/handler です。callbackUrlは、多数の Developer Hub インスタンスに対して 1 つの OAuth アプリケーションを使用する場合など、Developer Hub が直接の受信者ではない場合にのみ必要です。
GitHub アプリケーションを設定するには、ルート認証設定の下にある app-config.yaml ファイルにプロバイダー設定を追加します。以下に例を示します。
auth:
environment: production
providers:
github:
production:
clientId: ${GITHUB_APP_CLIENT_ID}
clientSecret: ${GITHUB_APP_CLIENT_SECRET}
## uncomment if using GitHub Enterprise
# enterpriseInstanceUrl: ${GITHUB_URL}
2.4. GitHub プロバイダーの Developer Hub フロントエンドへの追加 リンクのコピーリンクがクリップボードにコピーされました!
プロバイダーをフロントエンドに追加するには、サインイン設定を app-config.yaml ファイルに追加します。以下に例を示します。
signInPage: github
関連情報
- GitHub を使用した Backstage アクセスの認証は、コミュニティードキュメントの GitHub Authentication Provider を参照してください。
- Backstage フロントエンドにプロバイダーを追加する方法は、コミュニティードキュメントの Enabling authentication in Showcase を参照してください。
第3章 OpenID Connect 認証プロバイダーを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub は、OpenID Connect (OIDC) 認証プロバイダーを使用して、OIDC プロトコルをサポートするサードパーティーのサービスで認証します。
3.1. Developer Hub での OIDC 認証プロバイダーの使用に関する概要 リンクのコピーリンクがクリップボードにコピーされました!
ルート認証設定の下にある app-config.yaml ファイルを更新することにより、Developer Hub で OIDC 認証プロバイダーを設定できます。以下に例を示します。
auth:
environment: production
# Providing an auth.session.secret will enable session support in the auth-backend
session:
secret: ${SESSION_SECRET}
providers:
oidc:
production:
metadataUrl: ${AUTH_OIDC_METADATA_URL}
clientId: ${AUTH_OIDC_CLIENT_ID}
clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
prompt: ${AUTH_OIDC_PROMPT} # Recommended to use auto
## Uncomment for additional configuration options
# callbackUrl: ${AUTH_OIDC_CALLBACK_URL}
# tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}
# tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}
# scope: ${AUTH_OIDC_SCOPE}
## Declarative resolvers to override the default resolver: `emailLocalPartMatchingUserEntityName`
## The authentication provider tries each sign-in resolver until it succeeds, and fails if none succeed. Uncomment the resolvers that you want to use.
# signIn:
# resolvers:
# - resolver: preferredUsernameMatchingUserEntityName
# - resolver: emailMatchingUserEntityProfileEmail
# - resolver: emailLocalPartMatchingUserEntityName
signInPage: oidc
3.2. OIDC 認証プロバイダーを使用した Keycloak の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Developer Hub には、Keycloak を使用してユーザーを認証できる OIDC 認証プロバイダーが含まれています。
Keycloak で作成したユーザーは、Developer Hub カタログでも使用可能である必要があります。
手順
-
Keycloak で、
RHDHなどの新しいレルムを作成します。 新しいユーザーを追加します。
- ユーザー名
-
ユーザーのユーザー名。例:
rhdhuser - メール
- ユーザーのメールアドレス。
- 名
- ユーザーの名。
- 姓
- ユーザーの姓。
- メールの確認
- On に切り替えます。
- Create をクリックします。
- Credentials タブに移動します。
- Set password をクリックします。
- ユーザーアカウントの Password を入力し、Temporary を Off に切り替えます。
新しいクライアント ID (例:
RHDH)を作成します。- クライアント認証
- On に切り替えます。
- 有効なリダイレクト URI
-
OIDC ハンドラー URL に設定します (例:
https://<RHDH_URL>/api/auth/oidc/handler/frame)。
- Credentials タブに移動し、Client secret をコピーします。
- 次のステップのために、クライアント ID とクライアントシークレットを保存します。
Developer Hub で、Developer Hub シークレットに Keycloak 認証情報を追加します。
- secrets-rhdh などの Developer Hub シークレットを編集します。
以下のキーと値のペアを追加します。
AUTH_KEYCLOAK_CLIENT_ID-
Keycloak で生成したクライアント ID (
RHDHなど) を入力します。 AUTH_KEYCLOAK_CLIENT_SECRET- Keycloak で生成したクライアントシークレットを入力します。
Developer Hub のカスタム設定で OIDC 認証プロバイダーを設定します。
-
app-config-rhdhなどのカスタム Developer Hub ConfigMap を編集します。 app-config-rhdh.yamlコンテンツで、ルートauth設定の下にoidcプロバイダー設定を追加し、サインイン用にoidcプロバイダーを有効にします。app-config-rhdh.yamlの一部auth: environment: production providers: oidc: production: clientId: ${AUTH_KEYCLOAK_CLIENT_ID} clientSecret: ${AUTH_KEYCLOAK_CLIENT_SECRET} metadataUrl: ${KEYCLOAK_BASE_URL}/auth/realms/${KEYCLOAK_REALM} prompt: ${KEYCLOAK_PROMPT} # recommended to use auto Uncomment for additional configuration options #callbackUrl: ${KEYCLOAK_CALLBACK_URL} #tokenEndpointAuthMethod: ${KEYCLOAK_TOKEN_ENDPOINT_METHOD} #tokenSignedResponseAlg: ${KEYCLOAK_SIGNED_RESPONSE_ALG} #scope: ${KEYCLOAK_SCOPE} If you are using the keycloak-backend plugin, use the preferredUsernameMatchingUserEntityName resolver to avoid a login error. signIn: resolvers: - resolver: preferredUsernameMatchingUserEntityName signInPage: oidc
-
検証
-
backstage-developer-hubアプリケーションを再起動して変更を適用します。 - Developer Hub のサインインページに、Sign in using OIDC と表示されます。
3.3. Developer Hub の Keycloak を使用した OAuth2 プロキシーから OIDC への移行 リンクのコピーリンクがクリップボードにコピーされました!
Keycloak で認証プロバイダーとして OAuth2 Proxy を使用しており、OIDC に移行する場合は、認証プロバイダーの設定を更新して OIDC を使用できます。
手順
-
Keycloak で、有効なリダイレクト URI を
https://<rhdh_url>/api/auth/oidc/handler/frameに更新します。<rhdh_url>は、my.rhdh.example.comなどの Developer Hub アプリケーションの URL に置き換えてください。 -
app-config.yamlファイルのauthセクションにあるoauth2Proxy設定値をoidc設定値に置き換えます。 signInPage設定値をoauth2Proxyからoidcに更新します。次の例は、認証プロバイダーを
oidcに移行する前のoauth2Proxyのauth.providersおよびsignInPage設定を示しています。auth: environment: production session: secret: ${SESSION_SECRET} providers: oauth2Proxy: {} signInPage: oauth2Proxy次の例は、認証プロバイダーを
oidcに移行した後のauth.providersおよびsignInPage設定を示しています。auth: environment: production session: secret: ${SESSION_SECRET} providers: oidc: production: metadataUrl: ${KEYCLOAK_METADATA_URL} clientId: ${KEYCLOAK_CLIENT_ID} clientSecret: ${KEYCLOAK_CLIENT_SECRET} prompt: ${KEYCLOAK_PROMPT} # recommended to use auto signInPage: oidcOAuth2 プロキシーサイドカーコンテナーを削除し、Helm チャートの
values.yamlファイルのupstream.serviceセクションを次のように更新します。-
service.ports.backend:7007 service.ports.targetPort:backend次の例は、認証プロバイダーを
oidcに移行する前のoauth2Proxyのservice設定を示しています。service: ports: name: http-backend backend: 4180 targetPort: oauth2Proxy次の例は、認証プロバイダーを
oidcに移行した後のservice設定を示しています。service: ports: name: http-backend backend: 7007 targetPort: backend
-
- Developer Hub Helm チャートをアップグレードします。