12.2. トークンベースの認証の有効化
Microsoft Azure OpenShift Container Platform クラスターをインストールした後、Microsoft Entra Workload ID を有効にして短期認証情報を使用できます。
12.2.1. Cloud Credential Operator ユーティリティーの設定
Cloud Credential Operator (CCO) が手動モードで動作しているときにクラスターの外部からクラウドクレデンシャルを作成および管理するには、CCO ユーティリティー (ccoctl
) バイナリーを抽出して準備します。
ccoctl
ユーティリティーは、Linux 環境で実行する必要がある Linux バイナリーです。
前提条件
- クラスター管理者のアクセスを持つ OpenShift Container Platform アカウントを使用できる。
-
OpenShift CLI (
oc
) がインストールされている。
手順
次のコマンドを実行して、OpenShift Container Platform リリースイメージの変数を設定します。
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
以下のコマンドを実行して、OpenShift Container Platform リリースイメージから CCO コンテナーイメージを取得します。
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
注記$RELEASE_IMAGE
のアーキテクチャーが、ccoctl
ツールを使用する環境のアーキテクチャーと一致していることを確認してください。以下のコマンドを実行して、OpenShift Container Platform リリースイメージ内の CCO コンテナーイメージから
ccoctl
バイナリーを抽出します。$ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
次のコマンドを実行して、権限を変更して
ccoctl
を実行可能にします。$ chmod 775 ccoctl
検証
ccoctl
が使用できることを確認するには、help ファイルを表示します。コマンドを実行するときは、相対ファイル名を使用します。以下に例を示します。$ ./ccoctl.rhel9
出力例
OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: alibabacloud Manage credentials objects for alibaba cloud aws Manage credentials objects for AWS cloud azure Manage credentials objects for Azure gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for IBM Cloud nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
12.2.2. 既存のクラスターで Microsoft Entra Workload ID を有効にする
インストール中に Microsoft Azure OpenShift Container Platform クラスターを Microsoft Entra Workload ID を使用するように設定しなかった場合は、既存のクラスターでこの認証方法を有効にすることができます。
既存のクラスターで Workload ID を有効にするプロセスは、サービスの停止を伴い、かなりの時間がかかります。続行する前に、次の考慮事項を確認してください。
- 次の手順を読み、必ず時間の要件を理解してご承知おきください。正確な所要時間は個々のクラスターによって異なりますが、少なくとも 1 時間かかる可能性があります。
- このプロセス中に、すべてのサービスアカウントを更新し、クラスター上のすべての Pod を再起動する必要があります。これらのアクションはワークロードの停止を伴います。この影響を軽減するには、これらのサービスを一時的に停止し、クラスターの準備ができたときに再デプロイすることができます。
- このプロセスを開始した後は、完了するまでクラスターの更新を試みないでください。更新がトリガーされると、既存のクラスターで Workload ID を有効にするプロセスが失敗します。
前提条件
- Microsoft Azure に OpenShift Container Platform クラスターをインストールした。
-
cluster-admin
権限を持つアカウントを使用してクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 -
Cloud Credential Operator ユーティリティー (
ccoctl
) バイナリーを展開して準備した。 -
Azure CLI (
az
) を使用して Azure アカウントにアクセスできる。
手順
-
ccoctl
ユーティリティーが生成するマニフェストの出力ディレクトリーを作成します。この手順では、./output_dir
を例として使用します。 次のコマンドを実行して、クラスターのサービスアカウントの公開署名鍵を出力ディレクトリーに抽出します。
$ oc get configmap \ --namespace openshift-kube-apiserver bound-sa-token-signing-certs \ --output 'go-template={{index .data "service-account-001.pub"}}' > ./output_dir/serviceaccount-signer.public 1
- 1
- この手順では、例として
serviceaccount-signer.public
という名前のファイルを使用します。
抽出したサービスアカウント公開署名鍵を使用して、次のコマンドを実行し、OpenID Connect (OIDC) 発行者と、OIDC 設定ファイルを含む Azure Blob ストレージコンテナーを作成します。
$ ./ccoctl azure create-oidc-issuer \ --name <azure_infra_name> \1 --output-dir ./output_dir \ --region <azure_region> \2 --subscription-id <azure_subscription_id> \3 --tenant-id <azure_tenant_id> \ --public-key-file ./output_dir/serviceaccount-signer.public 4
次のコマンドを実行して、Azure pod identity webhook の設定ファイルが作成されたことを確認します。
$ ll ./output_dir/manifests
出力例
total 8 -rw-------. 1 cloud-user cloud-user 193 May 22 02:29 azure-ad-pod-identity-webhook-config.yaml 1 -rw-------. 1 cloud-user cloud-user 165 May 22 02:29 cluster-authentication-02-config.yaml
- 1
- ファイル
azure-ad-pod-identity-webhook-config.yaml
には、Azure pod identity webhook 設定が含まれています。
次のコマンドを実行して、出力ディレクトリーに生成されたマニフェストの OIDC 発行者 URL を使用して
OIDC_ISSUER_URL
変数を設定します。$ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' ./output_dir/manifests/cluster-authentication-02-config.yaml`
次のコマンドを実行して、クラスターの
authentication
設定のspec.serviceAccountIssuer
パラメーターを更新します。$ oc patch authentication cluster \ --type=merge \ -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"
次のコマンドを実行して、設定の更新の進行状況を監視します。
$ oc adm wait-for-stable-cluster
このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
次のコマンドを実行して、クラスター内のすべての Pod を再起動します。
$ oc adm reboot-machine-config-pool mcp/worker mcp/master
Pod を再起動すると、
serviceAccountIssuer
フィールドが更新され、サービスアカウントの公開署名鍵が更新されます。次のコマンドを実行して、再起動と更新のプロセスを監視します。
$ oc adm wait-for-node-reboot nodes --all
このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All nodes rebooted
次のコマンドを実行して、Cloud Credential Operator の
spec.credentialsMode
パラメーターをManual
に更新します。$ oc patch cloudcredential cluster \ --type=merge \ --patch '{"spec":{"credentialsMode":"Manual"}}'
以下のコマンドを実行して、OpenShift Container Platform リリースイメージから
CredentialsRequest
オブジェクトのリストを抽出します。$ oc adm release extract \ --credentials-requests \ --included \ --to <path_to_directory_for_credentials_requests> \ --registry-config ~/.pull-secret
注記このコマンドの実行には少し時間がかかる場合があります。
次のコマンドを実行して、Azure リソースグループ名を使用して
AZURE_INSTALL_RG
変数を設定します。$ AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`
次のコマンドを実行して、
ccoctl
ユーティリティーを使用してすべてのCredentialsRequest
オブジェクトのマネージド ID を作成します。$ ccoctl azure create-managed-identities \ --name <azure_infra_name> \ --output-dir ./output_dir \ --region <azure_region> \ --subscription-id <azure_subscription_id> \ --credentials-requests-dir <path_to_directory_for_credentials_requests> \ --issuer-url "${OIDC_ISSUER_URL}" \ --dnszone-resource-group-name <azure_dns_zone_resourcegroup_name> \1 --installation-resource-group-name "${AZURE_INSTALL_RG}"
- 1
- DNS ゾーンを含むリソースグループの名前を指定します。
次のコマンドを実行して、Workload ID の Azure pod identity webhook 設定を適用します。
$ oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yaml
次のコマンドを実行して、
ccoctl
ユーティリティーによって生成されたシークレットを適用します。$ find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}
このプロセスには数分の時間がかかる可能性があります。
次のコマンドを実行して、クラスター内のすべての Pod を再起動します。
$ oc adm reboot-machine-config-pool mcp/worker mcp/master
Pod を再起動すると、
serviceAccountIssuer
フィールドが更新され、サービスアカウントの公開署名鍵が更新されます。次のコマンドを実行して、再起動と更新のプロセスを監視します。
$ oc adm wait-for-node-reboot nodes --all
このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All nodes rebooted
次のコマンドを実行して、設定の更新の進行状況を監視します。
$ oc adm wait-for-stable-cluster
このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
オプション: 次のコマンドを実行して、Azure の root 認証情報シークレットを削除します。
$ oc delete secret -n kube-system azure-credentials
/validating-an-installation.adoc
12.2.3. クラスターが短期認証情報を使用していることを確認する
クラスター内の Cloud Credential Operator (CCO) 設定やその他の値を確認することで、クラスターが個々のコンポーネントに対して短期的なセキュリティー認証情報を使用していることを確認できます。
前提条件
-
Cloud Credential Operator ユーティリティー (
ccoctl
) を使用して OpenShift Container Platform クラスターをデプロイし、短期認証情報を実装しました。 -
OpenShift CLI (
oc
) がインストールされている。 -
cluster-admin
権限を持つユーザーとしてログインしている。
手順
次のコマンドを実行して、CCO が手動モードで動作するように設定されていることを確認します。
$ oc get cloudcredentials cluster \ -o=jsonpath={.spec.credentialsMode}
次の出力は、CCO が手動モードで動作していることを示しています。
出力例
Manual
次のコマンドを実行して、クラスターに
root
認証情報がないことを確認します。$ oc get secrets \ -n kube-system <secret_name>
<secret_name>
は、クラウドプロバイダーのルートシークレットの名前です。プラットフォーム シークレット名 Amazon Web Services (AWS)
aws-creds
Microsoft Azure
azure-credentials
Google Cloud Platform (GCP)
gcp-credentials
エラーは、ルートシークレットがクラスター上に存在しないことを確認します。
AWS クラスターの出力例
Error from server (NotFound): secrets "aws-creds" not found
次のコマンドを実行して、コンポーネントが個々のコンポーネントに対して短期セキュリティー認証情報を使用していることを確認します。
$ oc get authentication cluster \ -o jsonpath \ --template='{ .spec.serviceAccountIssuer }'
このコマンドは、クラスター
Authentication
オブジェクトの.spec.serviceAccountIssuer
パラメーターの値を表示します。クラウドプロバイダーに関連付けられた URL の出力は、クラスターがクラスターの外部から作成および管理される短期認証情報を使用して手動モードを使用していることを示します。Azure クラスター: 次のコマンドを実行して、コンポーネントがシークレットマニフェストで指定された Azure クライアント ID を想定していることを確認します。
$ oc get secrets \ -n openshift-image-registry installer-cloud-credentials \ -o jsonpath='{.data}'
出力に
azure_client_id
フィールドとazure_federated_token_file
フィールドが含まれていれば、コンポーネントが Azure クライアント ID を想定しています。Azure クラスター: 次のコマンドを実行して、pod identity webhook が実行されていることを確認します。
$ oc get pods \ -n openshift-cloud-credential-operator
出力例
NAME READY STATUS RESTARTS AGE cloud-credential-operator-59cf744f78-r8pbq 2/2 Running 2 71m pod-identity-webhook-548f977b4c-859lz 1/1 Running 1 70m