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})以下のコマンドを実行して、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.<rhel_version>" \1 -a ~/.pull-secret- 1
<rhel_version>には、ホストが使用する Red Hat Enterprise Linux (RHEL) のバージョンに対応する値を指定します。値が指定されていない場合は、デフォルトでccoctl.rhel8が使用されます。次の値が有効です。-
rhel8: RHEL 8 を使用するホストの場合はこの値を指定します。 -
rhel9: RHEL 9 を使用するホストの場合はこの値を指定します。
-
注記ccoctlバイナリーは、/usr/bin/ではなく、コマンドを実行したディレクトリーに作成されます。ディレクトリーの名前を変更するか、ccoctl.<rhel_version>バイナリーをccoctlに移動する必要があります。次のコマンドを実行して、権限を変更して
ccoctlを実行可能にします。$ chmod 775 ccoctl
検証
ccoctlが使用できることを確認するには、help ファイルを表示します。コマンドを実行するときは、相対ファイル名を使用します。以下に例を示します。$ ./ccoctl出力例
OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: 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-title} nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
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.public1 - 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.public4 次のコマンドを実行して、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.yaml1 -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/masterPod を再起動すると、
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 --helpを実行してください。$ 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}" \ --network-resource-group-name <azure_resource_group>2 次のコマンドを実行して、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/masterPod を再起動すると、
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
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}次の出力は、CCO が手動モードで動作していることを示しています。
出力例
Manual次のコマンドを実行して、クラスターに
root認証情報がないことを確認します。$ oc get secrets \ -n kube-system <secret_name><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次のコマンドを実行して、コンポーネントが個々のコンポーネントに対して短期セキュリティー認証情報を使用していることを確認します。
$ 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