10.4.3. 既存クラスターでの AWS Security Token Service (STS) の有効化
インストール時に Amazon Web Services (AWS) OpenShift Container Platform クラスターを Security Token Service (STS) を使用するように設定しなかった場合は、既存のクラスターでこの認証方法を有効にできます。
既存のクラスターで STS を有効にするプロセスは、サービスの停止を伴い、かなりの時間がかかります。続行する前に、次の考慮事項を確認してください。
- 次の手順を読み、必ず時間の要件を理解してご承知おきください。正確な所要時間は個々のクラスターによって異なりますが、少なくとも 1 時間かかる可能性があります。
- このプロセス中に、すべてのサービスアカウントを更新し、クラスター上のすべての Pod を再起動する必要があります。これらのアクションはワークロードの中断を伴います。この影響を軽減するには、これらのサービスを一時的に停止し、クラスターの準備ができたときに再デプロイすることができます。
- このプロセスが完了するまでクラスターを更新しないでください。
前提条件
- AWS に OpenShift Container Platform クラスターをインストールした。
-
cluster-admin権限を持つアカウントを使用してクラスターにアクセスできる。 -
OpenShift CLI (
oc) がインストールされている。 -
Cloud Credential Operator ユーティリティー (
ccoctl) バイナリーを展開して準備した。 - AWS CLI (aws) を使用して AWS アカウントにアクセスできる。
手順
ccoctlによって生成されるマニフェストの出力ディレクトリーを作成します。$ mkdir ./output_dirAWS Identity and Access Management (IAM) OpenID Connect (OIDC) プロバイダーを作成します。
次のコマンドを実行して、クラスターのサービスアカウントの公開署名鍵を抽出します。
$ oc get secret/next-bound-service-account-signing-key \ -n openshift-kube-apiserver-operator \ -ojsonpath='{ .data.service-account\.pub }' | base64 -d \ > output_dir/serviceaccount-signer.public1 - 1
- この手順では、例として
serviceaccount-signer.publicという名前のファイルを使用します。
次のコマンドを実行して、AWS IAM アイデンティティープロバイダーと S3 バケットを作成します。
$ ./ccoctl aws create-identity-provider \ --output-dir output_dir \1 --name <name_you_choose> \2 --region us-east-2 \3 --public-key-file output_dir/serviceaccount-signer.public4 - IAM アイデンティティープロバイダーの Amazon Resource Name (ARN) を保存またはメモします。この情報は、上記コマンドの出力の最終行にあります。
クラスターの認証設定を更新します。
次のコマンドを実行して、OIDC 発行者 URL を抽出し、クラスターの認証設定を更新します。
$ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' output_dir/manifests/cluster-authentication-02-config.yaml` $ oc patch authentication cluster --type=merge -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"次のコマンドを実行して、設定の更新の進行状況を監視します。
$ oc adm wait-for-stable-clusterこのプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
Pod を再起動し、発行者の更新を適用します。
次のコマンドを実行して、クラスター内のすべての 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"}}'CredentialsRequestsオブジェクトを抽出します。次のコマンドを実行して、
CLUSTER_VERSION環境変数を作成します。$ CLUSTER_VERSION=$(oc get clusterversion version -o json | jq -r '.status.desired.version')次のコマンドを実行して、
CLUSTER_IMAGE環境変数を作成します。$ CLUSTER_IMAGE=$(oc get clusterversion version -o json | jq -r ".status.history[] | select(.version == \"${CLUSTER_VERSION}\") | .image")次のコマンドを実行して、リリースイメージから
CredentialsRequestsオブジェクトを抽出します。$ oc adm release extract \ --credentials-requests \ --cloud=aws \ --from ${CLUSTER_IMAGE} \ --to output_dir/cred-reqs
AWS IAM ロールを作成し、シークレットを適用します。
次のコマンドを実行して、各
CredentialsRequestsオブジェクトの IAM ロールを作成します。$ ./ccoctl aws create-iam-roles \ --output-dir ./output_dir/ \1 --name <name_you_choose> \2 --identity-provider-arn <identity_provider_arn> \3 --region us-east-2 \4 --credentials-requests-dir ./output_dir/cred-reqs/5 次のコマンドを実行して、生成されたシークレットを適用します。
$ 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次のコマンドを実行して、再起動と更新のプロセスを監視します。
$ oc adm wait-for-node-reboot nodes --allこのプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All nodes rebooted次のコマンドを実行して、設定の更新の進行状況を監視します。
$ oc adm wait-for-stable-clusterこのプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。
All clusteroperators are stable
オプション: 次のコマンドを実行して、AWS の root 認証情報シークレットを削除します。
$ oc delete secret -n kube-system aws-creds