10.2. トークンベースの認証の有効化
Microsoft Azure OpenShift Container Platform クラスターをインストールした後、Microsoft Entra Workload ID を有効にして短期認証情報を使用できます。
10.2.1. Cloud Credential Operator ユーティリティーの設定 リンクのコピーリンクがクリップボードにコピーされました!
クラスターの外部からクラウド認証情報を作成および管理するように既存のクラスターを設定するには、Cloud Credential Operator ユーティリティー (ccoctl) バイナリーを抽出して準備します。
ccoctl ユーティリティーは、Linux 環境で実行する必要がある Linux バイナリーです。
前提条件
- クラスター管理者のアクセスを持つ OpenShift Container Platform アカウントを使用できる。
-
OpenShift CLI (
oc) がインストールされている。
手順
次のコマンドを実行して、OpenShift Container Platform リリースイメージの変数を設定します。
RELEASE_IMAGE=$(oc get clusterversion -o jsonpath={..desired.image})$ RELEASE_IMAGE=$(oc get clusterversion -o jsonpath={..desired.image})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、OpenShift Container Platform リリースイメージから CCO コンテナーイメージを取得します。
CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記$RELEASE_IMAGEのアーキテクチャーが、ccoctlツールを使用する環境のアーキテクチャーと一致していることを確認してください。以下のコマンドを実行して、OpenShift Container Platform リリースイメージ内の CCO コンテナーイメージから
ccoctlバイナリーを抽出します。oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \ -a ~/.pull-secret
$ oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \1 -a ~/.pull-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<rhel_version>には、ホストが使用する Red Hat Enterprise Linux (RHEL) のバージョンに対応する値を指定します。値が指定されていない場合は、デフォルトでccoctl.rhel8が使用されます。次の値が有効です。-
rhel8: RHEL 8 を使用するホストの場合はこの値を指定します。 -
rhel9: RHEL 9 を使用するホストの場合はこの値を指定します。
-
次のコマンドを実行して、権限を変更して
ccoctlを実行可能にします。chmod 775 ccoctl.<rhel_version>
$ chmod 775 ccoctl.<rhel_version>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ccoctlが使用できることを確認するには、help ファイルを表示します。コマンドを実行するときは、相対ファイル名を使用します。以下に例を示します。./ccoctl.rhel9
$ ./ccoctl.rhel9Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.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$ 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.public1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- この手順では、例として
serviceaccount-signer.publicという名前のファイルを使用します。
抽出したサービスアカウント公開署名鍵を使用して、次のコマンドを実行し、OpenID Connect (OIDC) 発行者と、OIDC 設定ファイルを含む Azure Blob ストレージコンテナーを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Azure pod identity webhook の設定ファイルが作成されたことを確認します。
ll ./output_dir/manifests
$ ll ./output_dir/manifestsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
total 8 -rw-------. 1 cloud-user cloud-user 193 May 22 02:29 azure-ad-pod-identity-webhook-config.yaml -rw-------. 1 cloud-user cloud-user 165 May 22 02:29 cluster-authentication-02-config.yaml
total 8 -rw-------. 1 cloud-user cloud-user 193 May 22 02:29 azure-ad-pod-identity-webhook-config.yaml1 -rw-------. 1 cloud-user cloud-user 165 May 22 02:29 cluster-authentication-02-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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`$ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' ./output_dir/manifests/cluster-authentication-02-config.yaml`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターの
authentication設定のspec.serviceAccountIssuerパラメーターを更新します。oc patch authentication cluster \ --type=merge \ -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"$ oc patch authentication cluster \ --type=merge \ -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、設定の更新の進行状況を監視します。
oc adm wait-for-stable-cluster
$ oc adm wait-for-stable-clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
All clusteroperators are stableCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスター内のすべての Pod を再起動します。
oc adm reboot-machine-config-pool mcp/worker mcp/master
$ oc adm reboot-machine-config-pool mcp/worker mcp/masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を再起動すると、
serviceAccountIssuerフィールドが更新され、サービスアカウントの公開署名鍵が更新されます。次のコマンドを実行して、再起動と更新のプロセスを監視します。
oc adm wait-for-node-reboot nodes --all
$ oc adm wait-for-node-reboot nodes --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All nodes rebooted
All nodes rebootedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Cloud Credential Operator の
spec.credentialsModeパラメーターをManualに更新します。oc patch cloudcredential cluster \ --type=merge \ --patch '{"spec":{"credentialsMode":"Manual"}}'$ oc patch cloudcredential cluster \ --type=merge \ --patch '{"spec":{"credentialsMode":"Manual"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、OpenShift Container Platform リリースイメージから
CredentialsRequestオブジェクトのリストを抽出します。oc adm release extract \ --credentials-requests \ --included \ --to <path_to_directory_for_credentials_requests> \ --registry-config ~/.pull-secret
$ oc adm release extract \ --credentials-requests \ --included \ --to <path_to_directory_for_credentials_requests> \ --registry-config ~/.pull-secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このコマンドの実行には少し時間がかかる場合があります。
次のコマンドを実行して、Azure リソースグループ名を使用して
AZURE_INSTALL_RG変数を設定します。AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`$ AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ccoctlユーティリティーを使用してすべてのCredentialsRequestオブジェクトのマネージド ID を作成します。注記次のコマンドでは、使用可能なすべてのオプションは表示されません。特定のユースケースで必要となる可能性のあるものを含め、すべてのオプションのリストを表示するには、
$ ccoctl azure create-managed-identities --helpを実行してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、Workload ID の Azure pod identity webhook 設定を適用します。
oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yaml
$ oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
ccoctlユーティリティーによって生成されたシークレットを適用します。find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}$ find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}Copy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスには数分の時間がかかる可能性があります。
次のコマンドを実行して、クラスター内のすべての Pod を再起動します。
oc adm reboot-machine-config-pool mcp/worker mcp/master
$ oc adm reboot-machine-config-pool mcp/worker mcp/masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod を再起動すると、
serviceAccountIssuerフィールドが更新され、サービスアカウントの公開署名鍵が更新されます。次のコマンドを実行して、再起動と更新のプロセスを監視します。
oc adm wait-for-node-reboot nodes --all
$ oc adm wait-for-node-reboot nodes --allCopy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All nodes rebooted
All nodes rebootedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、設定の更新の進行状況を監視します。
oc adm wait-for-stable-cluster
$ oc adm wait-for-stable-clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
All clusteroperators are stableCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 次のコマンドを実行して、Azure の root 認証情報シークレットを削除します。
oc delete secret -n kube-system azure-credentials
$ oc delete secret -n kube-system azure-credentialsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.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}$ oc get cloudcredentials cluster \ -o=jsonpath={.spec.credentialsMode}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の出力は、CCO が手動モードで動作していることを示しています。
出力例
Manual
ManualCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、クラスターに
root認証情報がないことを確認します。oc get secrets \ -n kube-system <secret_name>
$ oc get secrets \ -n kube-system <secret_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <secret_name>は、クラウドプロバイダーのルートシークレットの名前です。Expand プラットフォーム シークレット名 Amazon Web Services (AWS)
aws-credsMicrosoft Azure
azure-credentialsGoogle Cloud
gcp-credentialsエラーは、ルートシークレットがクラスター上に存在しないことを確認します。
AWS クラスターの出力例
Error from server (NotFound): secrets "aws-creds" not found
Error from server (NotFound): secrets "aws-creds" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、コンポーネントが個々のコンポーネントに対して短期セキュリティー認証情報を使用していることを確認します。
oc get authentication cluster \ -o jsonpath \ --template='{ .spec.serviceAccountIssuer }'$ oc get authentication cluster \ -o jsonpath \ --template='{ .spec.serviceAccountIssuer }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、クラスター
Authenticationオブジェクトの.spec.serviceAccountIssuerパラメーターの値を表示します。クラウドプロバイダーに関連付けられた URL の出力は、クラスターがクラスターの外部から作成および管理される短期認証情報を使用して手動モードを使用していることを示します。Azure クラスター: 次のコマンドを実行して、コンポーネントがシークレットマニフェストで指定された Azure クライアント ID を想定していることを確認します。
oc get secrets \ -n openshift-image-registry installer-cloud-credentials \ -o jsonpath='{.data}'$ oc get secrets \ -n openshift-image-registry installer-cloud-credentials \ -o jsonpath='{.data}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力に
azure_client_idフィールドとazure_federated_token_fileフィールドが含まれている場合は、コンポーネントが Azure クライアント ID を想定しています。Azure クラスター: 次のコマンドを実行して、pod identity webhook を実行していることを確認します。
oc get pods \ -n openshift-cloud-credential-operator
$ oc get pods \ -n openshift-cloud-credential-operatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
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
NAME READY STATUS RESTARTS AGE cloud-credential-operator-59cf744f78-r8pbq 2/2 Running 2 71m pod-identity-webhook-548f977b4c-859lz 1/1 Running 1 70mCopy to Clipboard Copied! Toggle word wrap Toggle overflow