3.4. Red Hat Developer Hub の認証プロバイダーとして Amazon Cognito を使用する
Amazon Cognito は、Developer Hub に認証層を追加するための AWS サービスです。ユーザープールを使用して Developer Hub に直接サインインすることも、サードパーティーのアイデンティティープロバイダーを介してフェデレーションすることもできます。
Amazon Cognito は、Developer Hub のコア認証プロバイダーには含まれませんが、汎用の OpenID Connect (OIDC) プロバイダーを使用して統合できます。
Helm Chart と Operator がサポートするデプロイメントの両方で Developer Hub を設定できます。
前提条件
ユーザープールがあるか、新しいユーザープールを作成した。ユーザープールの詳細は、Amazon Cognito user pools ドキュメントを参照してください。
注記ユーザープールが配置されている AWS リージョンとユーザープール ID を必ず書き留めてください。
ホストされた UI を統合するために、ユーザープール内にアプリケーションクライアントを作成した。詳細は、Setting up the hosted UI with the Amazon Cognito console を参照してください。
Amazon Cognito コンソールを使用してホストされた UI をセットアップするときは、必ず次の調整を行ってください。
-
Allowed callback URL(s) セクションに、URL
https://<rhdh_url>/api/auth/oidc/handler/frameを含めます。<rhdh_url>は Developer Hub アプリケーションの URL (my.rhdh.example.comなど) に置き換えてください。 -
同様に、Allowed sign-out URL(s) セクションに
https://<rhdh_url>を追加します。<rhdh_url>は Developer Hub アプリケーションの URL (my.rhdh.example.comなど) に置き換えます。 - OAuth 2.0 grant types で、Authorization code grant を選択して認証コードを返します。
OpenID Connect scopes で、少なくとも次のスコープを選択してください。
- OpenID
- プロファイル
- メール
- Helm のデプロイメント
手順
次のようにして、カスタム
app-config-rhdhConfigMap を編集または作成します。apiVersion: v1 kind: ConfigMap metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | # --- Truncated --- app: title: Red Hat Developer Hub signInPage: oidc auth: environment: production session: secret: ${AUTH_SESSION_SECRET} providers: oidc: production: clientId: ${AWS_COGNITO_APP_CLIENT_ID} clientSecret: ${AWS_COGNITO_APP_CLIENT_SECRET} metadataUrl: ${AWS_COGNITO_APP_METADATA_URL} callbackUrl: ${AWS_COGNITO_APP_CALLBACK_URL} scope: 'openid profile email' prompt: auto次のテンプレートを使用して、カスタム
secrets-rhdhSecret を編集または作成します。apiVersion: v1 kind: Secret metadata: name: secrets-rhdh stringData: AUTH_SESSION_SECRET: "my super auth session secret - change me!!!" AWS_COGNITO_APP_CLIENT_ID: "my-aws-cognito-app-client-id" AWS_COGNITO_APP_CLIENT_SECRET: "my-aws-cognito-app-client-secret" AWS_COGNITO_APP_METADATA_URL: "https://cognito-idp.[region].amazonaws.com/[userPoolId]/.well-known/openid-configuration" AWS_COGNITO_APP_CALLBACK_URL: "https://[rhdh_dns]/api/auth/oidc/handler/frame"values.yamlファイルに、ConfigMap リソースと Secret リソースの両方の参照を追加します。upstream: backstage: image: pullSecrets: - rhdh-pull-secret podSecurityContext: fsGroup: 2000 extraAppConfig: - filename: app-config-rhdh.yaml configMapRef: app-config-rhdh extraEnvVarsSecrets: - secrets-rhdhHelm デプロイメントをアップグレードします。
helm upgrade rhdh \ openshift-helm-charts/redhat-developer-hub \ [--version 1.1.4] \ --values /path/to/values.yaml
- Operator がサポートするデプロイメント
次のコードを
app-config-rhdhConfigMap に追加します。apiVersion: v1 kind: ConfigMap metadata: name: app-config-rhdh data: "app-config-rhdh.yaml": | # --- Truncated --- signInPage: oidc auth: # Production to disable guest user login environment: production # Providing an auth.session.secret is needed because the oidc provider requires session support. session: secret: ${AUTH_SESSION_SECRET} providers: oidc: production: # See https://github.com/backstage/backstage/blob/master/plugins/auth-backend-module-oidc-provider/config.d.ts clientId: ${AWS_COGNITO_APP_CLIENT_ID} clientSecret: ${AWS_COGNITO_APP_CLIENT_SECRET} metadataUrl: ${AWS_COGNITO_APP_METADATA_URL} callbackUrl: ${AWS_COGNITO_APP_CALLBACK_URL} # Minimal set of scopes needed. Feel free to add more if needed. scope: 'openid profile email' # Note that by default, this provider will use the 'none' prompt which assumes that your are already logged on in the IDP. # You should set prompt to: # - auto: will let the IDP decide if you need to log on or if you can skip login when you have an active SSO session # - login: will force the IDP to always present a login form to the user prompt: autosecrets-rhdhSecret に次のコードを追加します。apiVersion: v1 kind: Secret metadata: name: secrets-rhdh stringData: # --- Truncated --- # TODO: Change auth session secret. AUTH_SESSION_SECRET: "my super auth session secret - change me!!!" # TODO: user pool app client ID AWS_COGNITO_APP_CLIENT_ID: "my-aws-cognito-app-client-id" # TODO: user pool app client Secret AWS_COGNITO_APP_CLIENT_SECRET: "my-aws-cognito-app-client-secret" # TODO: Replace region and user pool ID AWS_COGNITO_APP_METADATA_URL: "https://cognito-idp.[region].amazonaws.com/[userPoolId]/.well-known/openid-configuration" # TODO: Replace <rhdh_dns> AWS_COGNITO_APP_CALLBACK_URL: "https://[rhdh_dns]/api/auth/oidc/handler/frame"カスタムリソースに
app-config-rhdhConfigMap とsecrets-rhdhSecret の両方への参照が含まれていることを確認します。apiVersion: rhdh.redhat.com/v1alpha1 kind: Backstage metadata: # TODO: this the name of your Developer Hub instance name: my-rhdh spec: application: imagePullSecrets: - "rhdh-pull-secret" route: enabled: false appConfig: configMaps: - name: "app-config-rhdh" extraEnvs: secrets: - name: "secrets-rhdh"オプション: カスタムリソースがサポートする既存の Developer Hub インスタンスがあり、それを編集していない場合は、Developer Hub デプロイメントを手動で削除し、Operator を使用して再作成できます。次のコマンドを実行して、Developer Hub デプロイメントを削除します。
kubectl delete deployment -l app.kubernetes.io/instance=<CR_NAME>
-
Allowed callback URL(s) セクションに、URL
検証
- Developer Hub の Web URL に移動し、OIDC 認証を使用してサインインします。これにより、設定した AWS Cognito ユーザープールを介して認証するよう求められます。
- ログインしたら、Settings にアクセスしてユーザーの詳細を確認します。