このページはプラットフォーム管理者を対象としています。
Keycloak や Google のシングル サインオン(SSO)による認証は、デモやテスト目的でのみ試すことができます。
Keycloak で認証する
Keycloak は、オープンソースの Identity and Access Management ソフトウェア プロダクトで、クイックデモで OIDC プロバイダとして設定できます。
始める前に
Keycloak をインストールして有効にするには、Anthos プライベート モード デプロイからアクセス可能な Ingress アドレスを持つ Kubernetes クラスタが必要です。このページの例では、Anthos プライベート モードの管理クラスタを使用します。
また、Anthos プライベート モード Management Center 用のカスタム ドメイン名を作成しておく必要があります。ドメイン名を構成して Management Center にアクセスするをご覧ください。
Management Center のドメイン名を変数としてエクスポートします。次に例を示します。
export ANTHOS_MANAGEMENT_CENTER=anthos.example.com
次のように、限定公開レジストリを変数としてエクスポートします。
export PRIVATE_REGISTRY=10.200.0.2/library
Keycloak イメージをダウンロードして限定公開レジストリに push する
dockerhub から Keycloak イメージをダウンロードします。
actl images save \ --output keycloak-image \ jboss/keycloak:12.0.2
Keycloak イメージをプライベート レジストリに push します。
actl images push \ --images keycloak-image \ --private-registry=${PRIVATE_REGISTRY}
Keycloak をデプロイする
DNS 構成を更新して証明書を生成し、Keycloak をデプロイします。
Keycloak の IP を公開する Keycloak サービスを作成します。
kubectl create -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: keycloak --- apiVersion: v1 kind: Service metadata: name: keycloak-svc namespace: keycloak labels: app: keycloak spec: ports: - name: http port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 selector: app: keycloak type: LoadBalancer EOF
LoadBalancer で IP を割り当てた後、次のように IP を変数にエクスポートします。
export KEYCLOAK_SVC_IP=$(kubectl get services -n keycloak \ -o jsonpath='{.items[0].status.loadBalancer.ingress[0].ip}')
DNS ドメイン構成に「A record」を追加し、
${KEYCLOAK_SVC_IP}
に設定します。export KEYCLOAK_SVC=keycloak.example.com
TLS に使用する Keycloak の自己署名証明書を生成します。
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -subj \ "/CN=${KEYCLOAK_SVC}" \ -addext "subjectAltName = DNS:localhost,DNS:${KEYCLOAK_SVC},IP:${KEYCLOAK_SVC_IP}" \ -out "tls.crt" -keyout "tls.key"
証明書と秘密鍵をクラスタにアップロードします。
kubectl create secret tls tls-config -n keycloak --cert=tls.crt \ --key=tls.key
次のコマンドを実行して Keycloak をデプロイします。
kubectl create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: keycloak namespace: keycloak labels: app: keycloak spec: replicas: 1 selector: matchLabels: app: keycloak template: metadata: labels: app: keycloak spec: volumes: - name: tls-config-volume secret: secretName: tls-config items: - key: tls.crt path: tls.crt - key: tls.key path: tls.key containers: - name: keycloak # Set the image as original path but the actual image will be pulled from the registry mirror, # which was configured by 'actl push' command. image: jboss/keycloak:12.0.2 # Keycloak uses certificates stored in /etc/x509/https to set up TLS. # https://github.com/keycloak/keycloak-containers/blob/master/server/README.md#setting-up-tlsssl volumeMounts: - name: tls-config-volume mountPath: "/etc/x509/https" env: - name: KEYCLOAK_USER value: "admin" - name: KEYCLOAK_PASSWORD value: "admin" - name: PROXY_ADDRESS_FORWARDING value: "true" ports: - name: http containerPort: 8080 - name: https containerPort: 8443 readinessProbe: httpGet: path: /auth/realms/master port: 8080 EOF
Keycloak のユーザーとクライアントを設定する
管理ワークステーションで Keycloak コンソールを開き、keycloak.yaml
ファイルで KEYCLOAK_USER
と KEYCLOAK_PASSWORD
を使用してログインします。デフォルトでは、これらの値は KEYCLOAK_USER=admin
と KEYCLOAK_PASSWORD=admin
です。必要に応じて、ブラウザで自己署名証明書を受け入れます。Chrome で信頼できない証明書に関する警告が表示された場合は、そのダイアログで「thisisunsafe
」と入力します。
echo "Keycloak console: https://${KEYCLOAK_SVC}"
レルムを作成する
- 左上の [マスター] にカーソルを合わせ、[レルムを追加] をクリックします。
- 新しいレルムの名前として「
anthos
」を入力し、[作成] をクリックします。 - [レルムの設定] > [トークン] で、[アクセス トークンの有効期間] を
1 Hour
に変更し、トークンが早く期限切れにならないようにします。その後 [保存] をクリックします。
ユーザーを作成する
- 左側のナビゲーション バーで [ユーザー]、[ユーザーを追加] の順にクリックします。
- ユーザーの次の設定を行い、[保存] をクリックします。
- ユーザー名:
anthos-platform-admin
- メールアドレス:
anthos-platform-admin@example.com
- ユーザーの有効化: ON
- メールアドレス確認済み: ON
- ユーザー名:
- [Credentials] タブで、[Password] フィールドと [Password Confirmation] フィールドに入力します。[Set Password] をクリックし、プロンプトが表示されたら検証します。
クライアントの作成
- 左側のナビゲーション バーで [クライアント] をクリックし、[作成] をクリックします。
- クライアントの次の設定を行い、[保存] をクリックします。
ANTHOS_MANAGEMENT_CENTER
は、Management Center で使用するカスタム ドメイン名です。- クライアント ID: anthos
- クライアント プロトコル: openid-connect
- ルート URL: https://
ANTHOS_MANAGEMENT_CENTER
- 新しく作成したクライアントの管理ページに移動します。
- クライアント管理ページの [設定] タブで、次の手順を行います。
- [Access Type] を
confidential
に設定します。 - 次の URI を [有効なリダイレクト URI] に追加します。
- http://localhost:9879/callback
- https://
ANTHOS_MANAGEMENT_CENTER
/_gcp_anthos_oidc_callback
- [保存] をクリックします。
- [Access Type] を
- クライアント管理ページの [認証情報] タブで、クライアント認証システムとして [クライアント ID とシークレット] を選択します。
- シークレットをどこかに記録します。
(推奨)Keycloak でグループ メンバーシップを設定する
- 左側のナビゲーション バーで [グループ] をクリックし、つづいて [新規] をクリックします。
- グループの名前を入力します:
anthos-platform-admin-group
。 - 左側の [ユーザー] タブに戻り、[すべてのユーザーを表示] をクリックします。
- 作成したユーザー(anthos-platform-admin)をクリックし、[グループ] タブをクリックします。
- [使用可能なグループ] で、作成したグループ
anthos-platform-admin-group
を選択し、[参加] をクリックします。 - anthos クライアント管理ページに戻ります。
- [マッパー] タブをクリックし、[作成] をクリックします。
- このマッパーの名前を入力します:
anthos-platform-admin-group-mapper
。 - [マッパータイプ] プルダウン リストから [グループ メンバーシップ] を選択します。
Token Claim Name
は、認証トークンに表示される属性値です。Anthos プライベート モードの場合はデフォルトで「groups」であるため、このフィールドでgroups
を使用できます。Token Claim Name
名がgroups
でない場合、OIDC 構成のGroupsClaim
フィールドは、この値で変更する必要があります。- [Full group path] が無効になっていることを確認します。
- [Add to ID Token]、[Add to access token]、[Add to userinfo] がすべて有効になっていることを確認します。
- [保存] をクリックします。
- このマッパーの名前を入力します:
OIDC 認証を有効にする
次のステップで使用する OIDC プロバイダの URL を取得します。
次のコマンドを実行します。
export ISSUER_URL=https://${KEYCLOAK_SVC}/auth/realms/anthos echo "Issuer URL: ${ISSUER_URL}"
前の
tls.crt
を使用して、Base64 でエンコードされた証明書を生成します。export BASE64_CERT=$(openssl base64 -A -in tls.crt) echo "Use the following string as the base64-encoded certificate for the OIDC provider: ${BASE64_CERT}"
Management Center Console を使用した推奨される方法
- Management Center Console で、[ID とアクセス] メニューを開きます。
- [ID] タブで、[Anthos Identity Service(OIDC)を設定] をクリックします。
次のフィールドに入力して Keycloak のプロファイルを作成し、[Submit] をクリックします。
- プロファイルの名前:
keycloak
- OIDC プロバイダ URL: OIDC 認証を有効にするセクションの発行者 URL。
- OIDC クライアント ID:
anthos
- OIDC クライアント シークレット: クライアントの作成セクションのクライアント シークレット
- ユーザー名のクレーム:
email
- ユーザー名の接頭辞:
keycloak-
- グループのクレーム: グループ メンバーシップの設定セクションのグループのクレーム。このフィールドを空のままにすると、値は
groups
になります。 - グループの接頭辞:
keycloak-
- スコープ:
email openid
- 追加パラメータ:
access_type=offline
- 認証局データ: OIDC 認証を有効にするのセクションで取得した、Base64 でエンコードされた証明書を使用します。
- プロファイルの名前:
[クラスタにプロファイルを適用] をクリックし、[管理クラスタ] タブをクリックします。
[プロファイル] に、先ほど作成した「keycloak」プロファイルを選択します。
[Domain name] に「
ANTHOS_MANAGEMENT_CENTER
」と入力します。[Initial Platform Admin] では、ユーザー名の前にユーザー接頭辞を必ず追加してください。たとえば、
anthos-platform-admin@example.com
を追加する場合は、「keycloak-anthos-platform-admin@example.com
」と入力します。[送信] をクリックし、さまざまなシステム コンポーネントが再構成されるまで少しの間待機します。
シークレット ウィンドウで https://
ANTHOS_MANAGEMENT_CENTER
に移動します。Keycloak のログインページにリダイレクトされます。(永続的なパスワードを設定した後)anthos-platform-admin
としてログインできるようになります。
別の方法(YAML ファイルを適用する)
ドメインの IDP プロバイダを設定します。ドメインに
DomainConfig
がすでに作成されている場合は、オブジェクトにパッチを適用して、次のコマンドを使用してドメインに使用する認証方法名を設定します。kubectl patch domainconfig anthos.example.com --type=json -p='[{"op": "replace", "path": "/spec/authMethodName", "value":"keycloak"}]'
ドメインに
DomainConfig
が作成されていない場合は、次のコマンドを使用して作成します。kubectl create -f - <<EOF apiVersion: managementcenter.anthos.cloud.google.com/v1 kind: DomainConfig metadata: name: anthos.example.com spec: authMethodName: keycloak EOF
次の内容で
clientconfig-patch.yaml
を作成します。# Use this to set the OIDC configuration of Keycloak: # kubectl patch ClientConfig default -n kube-public --type=merge --patch $(cat clientconfig-patch.yaml) spec: authentication: # The name of the OIDC configuration to create. - name: keycloak oidc: # ID for the client application that makes authentication requests to the OpenID provider. clientID: anthos # ID for the client application that makes authentication requests to the OpenID provider. clientSecret: YOUR_CLIENT_SECRET # The URI to redirect users going through the OAuth flow using cloud console. # This is not supported by Anthos private mode. cloudConsoleRedirectURI: http://cloud.console.not.enabled # Additional key-value parameters (comma-separated) to send to the OpenID provider. extraParams: access_type=offline # URL where authorization requests are sent to your OpenID. issuerURI: YOUR_ISSUER_URI # The redirect URL that kubectl uses for authorization. kubectlRedirectURI: http://localhost:9879/callback # Additional scopes to send to the OpenID provider. scopes: openid email # JWT claim to use as the username. You can choose other claims, such as email or name, # depending on the OpenID provider. However, claims other than email are prefixed # with the issuer URL to prevent naming clashes. userClaim: email # A base64-encoded PEM-encoded certificate for the OIDC provider. To create the string, # encode the certificate, including headers, into base64. Include the resulting string # in certificateAuthorityData as a single line. certificateAuthorityData: YOUR_CERTIFICATE
Keycloak の設定を使用して
clientconfig-patch.yaml
を編集します。sed -i "s|YOUR_ISSUER_URI|${ISSUER_URL}|g" clientconfig-patch.yaml sed -i "s|YOUR_CERTIFICATE|${BASE64_CERT}|g" clientconfig-patch.yaml
YOUR_CLIENT_SECRET
は、Keycloak の [Credentials] タブから取得したクライアント シークレットに置き換えます。OIDC を構成するには、次のコマンドを実行します。
kubectl patch ClientConfig default -n kube-public --type=merge \ --patch "$(cat clientconfig-patch.yaml)"
さまざまなシステム コンポーネントが再構成されるまで少しの間待機します。
承認のロールの構成の手順に沿って、初期のプラットフォーム管理者アカウントを設定します。
シークレット ウィンドウで https://
ANTHOS_MANAGEMENT_CENTER
に移動します。Keycloak のログインページにリダイレクトされます。(永続的なパスワードを設定した後)anthos-platform-admin
としてログインできるようになります。
Keycloak の削除
Keycloak デモの使用が終了したら、Keycloak のインストールを削除します。
kubectl delete ns keycloak
Google SSO で認証する
Google SSO は、Anthos プライベート モードでは利用できません。Google SSO を使用する場合は、クラスタとブラウザの両方が Google の SSO サーバーにアクセスできる必要があります。Google の SSO サーバーでは、ユーザー クラスタへの接続は必要ありません。
- Google Cloud Console にログインし、有効なプロジェクトを選択します。
- [API とサービス] > [OAuth 同意画面] のセクションにアクセスします。
- 新しい OAuth 同意画面を作成します。この情報は、ユーザーに表示されます。
- [アプリケーションのホームページ] を管理 URL に設定します。
- [API とサービス] > [認証情報] で、次の操作を行います。
- [認証情報を作成] をクリックします。
- 新しい OAuth クライアント ID を作成します。
- [アプリケーションの種類] を [ウェブ アプリケーション] に設定します。
- 関連する名前を選択します。
- JavaScript 生成元に
https://anthos.example.com
を設定します(https://anthos.example.com
は Management Center のドメイン名であることを前提としています)。 - [承認済みのリダイレクト URI] には、次のように設定します。
https://anthos.example.com/_gcp_anthos_oidc_callback
http://localhost:9879/callback
- ClientID とクライアント Secret を AdminUI 構成にコピーします。
- OIDC プロバイダの URL を
https://accounts.google.com
に設定します。 Username Claim
をemail
に、Scopes
をopenid email
に設定します。- 追加パラメータを
prompt=consent,access_type=offline
に設定します。設定しないと、Kubernetes API サーバーでログインできません。 - プラットフォーム管理者権限を付与する、最初のメールアドレスのリスト(複数の場合はカンマで区切ります)を追加します。
- [保存] をクリックします。