5.3. Red Hat 版 Karpenter 用の AWS IAM ロールを準備する
Red Hat 版 Karpenter が Amazon Elastic コンピュート Cloud (Amazon EC2) インスタンスをプロビジョニングするために必要な IAM ポリシーとロールを作成します。
このポリシーは、Red Hat ビルドの Karpenter に以下の権限を付与します。
- EC2 インスタンスとフリートの作成および終了
- 起動テンプレートの作成と管理
- リソースに Karpenter 固有のタグを付ける
- インスタンス、インスタンスタイプ、サブネットなどの EC2 リソースについて説明します。
- Amazon Machine Image (AMI) 情報へのアクセスシステムマネージャー (SSM) パラメーター
- EC2 の料金情報を照会する
- スポットインスタンス処理のための Simple Queue Service (SQS) 割り込みキューを管理する
IAM インスタンスプロファイルの作成と管理
注記すべての権限は、Karpenter 固有のタグが付けられたリソースに制限されており、Red Hat 版 Karpenter がプロビジョニングしたノードのみを管理するようにしています。
手順
最新の Red Hat 版 Karpenter IAM ポリシーをダウンロードしてください。
$ curl -o autonode-policy.json https://raw.githubusercontent.com/openshift/managed-cluster-config/refs/heads/master/resources/sts/hypershift/openshift_hcp_karpenter_controller_credentials_policy.jsonクラスター名と ID を環境変数にエクスポートします。
$ export CLUSTER_NAME=<cluster_name> $ export CLUSTER_ID=$(rosa describe cluster -c "$CLUSTER_NAME" -o json | jq -r '.id') $ echo $CLUSTER_NAME $CLUSTER_IDIAM ポリシーを作成します。
$ POLICY_ARN=$(aws iam create-policy \ --policy-name rosa-karpenter-controller-role-${CLUSTER_NAME} \ --policy-document file://autonode-policy.json \ --query 'Policy.Arn' \ --output text)Karpenter サービスアカウントの信頼ポリシーを作成します。
$ cat > trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$(aws sts get-caller-identity --query Account --output text):oidc-provider/$(rosa describe cluster -c $CLUSTER_NAME -o json | jq -r .aws.sts.oidc_endpoint_url | sed 's|https://||')" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "$(rosa describe cluster -c $CLUSTER_NAME -o json | jq -r .aws.sts.oidc_endpoint_url | sed 's|https://||'):sub": "system:serviceaccount:kube-system:karpenter" } } } ] } EOFIAM ロールを作成し、ポリシーをアタッチします。
$ ROLE_ARN=$(aws iam create-role \ --role-name rosa-karpenter-controller-role-${CLUSTER_NAME} \ --assume-role-policy-document file://trust-policy.json \ --query 'Role.Arn' \ --output text) $ aws iam attach-role-policy \ --role-name rosa-karpenter-controller-role-${CLUSTER_NAME} \ --policy-arn $POLICY_ARN検証
以下のコマンドを実行して、ポリシーが存在することを確認します。
$ aws iam list-attached-role-policies --role-name rosa-karpenter-controller-role-${CLUSTER_NAME}