1.11.4. マネージドクラスターで AWS 認証情報から IAM ロールに切り替える
Cluster API を使用してマネージドクラスターをデプロイするときに、Identity and Access Management (IAM) ロールの使用に切り替えることができます。Amazon Web Services (AWS) 認証情報を使用してマネージドクラスターを作成した場合は、AWS 認証情報から IAM ロールに切り替えて、マネージドクラスターに AWS 認証情報を保存せずに、cluster-api-provider-aws を使用して Red Hat OpenShift Service on AWS with Hosted Control Plane クラスターを作成できます。
必要なアクセス権: クラスター管理者
前提条件
- AWS 認証情報を使用して作成した Red Hat OpenShift Container Platform または Red Hat OpenShift Service on AWS with Hosted Control Plane ブートストラップクラスターが必要である。一時的な認証情報を使用できます。詳細は、AWS ドキュメントの Request temporary security credentials を参照してください。
- ブートストラップクラスターに Red Hat Advanced Cluster Management for Kubernetes がインストールされている必要がある。
- Cluster API と Cluster API Provider AWS を有効にする前に、HyperShift コンポーネントを無効にする必要がある。
手順
以下の手順を実行して、AWS 認証情報から IAM ロールに切り替えます。
MultiClusterEngineリソースを編集します。以下のコマンドを実行します。oc edit multiclusterengine enginehypershiftおよびhypershift-local-hostingコンポーネントを無効にし、cluster-apiおよびcluster-api-provider-awsコンポーネントを有効にします。以下の例を参照してください。- configOverrides: {} enabled: false name: hypershift - configOverrides: {} enabled: false name: hypershift-local-hosting - configOverrides: {} enabled: true name: cluster-api - configOverrides: {} enabled: true name: cluster-api-provider-awsCluster API と Cluster API Provider AWS デプロイメントが実行されていることを確認します。以下のコマンドを実行します。
oc get deploy -n multicluster-engine出力は次の例のような内容になります。
NAME READY UP-TO-DATE AVAILABLE AGE capa-controller-manager 1/1 1 1 12d capi-controller-manager 1/1 1 1 12dCluster API Provider AWS コントローラーのサービスアカウントを更新できるように、
MultiClusterEngineカスタムリソースを一時停止します。以下のコマンドを実行します。oc annotate mce multiclusterengine installer.multicluster.openshift.io/pause=trueOpenID Connect (OIDC) プロバイダーの詳細を取得します。以下のコマンドを実行します。
export OIDC_PROVIDER=$(oc get authentication.config.openshift.io cluster -ojson | jq -r .spec.serviceAccountIssuer | sed 's/https:\/\///')AWS アカウント ID を設定します。以下のコマンドを実行します。アカウント ID の値を変更します。
export AWS_ACCOUNT_ID={YOUR_AWS_ACCOUNT_ID}capa-controller-managerIAM ロールの信頼ポリシーファイルを作成します。以下のコマンドを実行します。cat ./trust.json以下の内容をファイルに追加することで、関連付けられた IAM ロールを引き受けることができるユーザーを定義します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${AWS_ACCOUNT_ID}:oidc-provider/${OIDC_PROVIDER}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "${OIDC_PROVIDER}:sub": "system:serviceaccount:multicluster-engine:capa-controller-manager" } } } ] }IAM ロールを作成し、必要な AWS ポリシーをアタッチします。以下のコマンドを実行します。
aws iam create-role --role-name "capa-manager-role" --assume-role-policy-document file://trust.json --description "IAM role for CAPA to assume" aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AWSCloudFormationFullAccess aws iam attach-role-policy --role-name capa-manager-role --policy-arn arn:aws:iam::aws:policy/AmazonVPCFullAccessIAM ロールの Amazon Resource Name (ARN) を取得します。以下のコマンドを実行します。
export APP_IAM_ROLE_ARN=$(aws iam get-role --role-name=capa-manager-role --query Role.Arn --output text) export IRSA_ROLE_ARN=eks.amazonaws.com/role-arn=$APP_IAM_ROLE_ARNサービスアカウントに IAM ロールの ARN をアノテーションとして付与します。以下のコマンドを実行します。
oc annotate serviceaccount -n multicluster-engine capa-controller-manager $IRSA_ROLE_ARNCluster API Provider AWS デプロイメントを再起動します。以下のコマンドを実行します。
oc rollout restart deployment capa-controller-manager -n multicluster-engine