Amazon EKS ノードの IAM ロール - Amazon EKS

Amazon EKS ノードの IAM ロール

Amazon EKS ノード kubelet デーモンが、ユーザーに代わって AWS API への呼び出しを実行します。ノードは、IAM インスタンスプロファイルおよび関連ポリシーを通じて、これらの API コールのアクセス許可を受け取ります。ノードを起動してクラスターに登録する前に、起動するときに使用するノード用の IAM ロールを作成する必要があります。この要件は、Amazon が提供する Amazon EKS 最適化 AMI で起動されたノード、または使用する予定の他のノード AMI で起動されたノードに適用されます。さらに、この要件はマネージド型ノードグループとセルフマネージド型ノードの両方に適用されます。

注記

クラスターの作成に使用したロールは使用できません。

ノードを使用するには、次の アクセス許可を持つ IAM ロールを作成する必要があります。

  • kubelet が VPC 内の Amazon EC2 リソースを記述するためのアクセス許可 (AmazonEKSWorkerNodePolicy ポリシーで規定されているなど)。このポリシーは、Amazon EKS Pod Identity エージェントのアクセス許可も提供します。

  • kubelet が Amazon Elastic Container Registry (Amazon ECR) のコンテナイメージを使用するためのアクセス許可 (AmazonEC2ContainerRegistryPullOnly ポリシーで規定されているなど)。ネットワーキング用の組み込みアドオンは Amazon ECR のコンテナイメージを使用するポッドを実行するため、Amazon Elastic Container Registry (Amazon ECR) のコンテナイメージを使用する許可が必要です。

  • (オプション) Amazon EKS Pod Identity エージェントが eks-auth:AssumeRoleForPodIdentity アクションを使用してポッドの認証情報を取得するためのアクセス許可。AmazonEKSWorkerNodePolicy を使用しない場合、EKS Pod Identity を使用するには EC2 許可に加えてこの許可も提供する必要があります。* (Optional) If you don’t use IRSA or EKS Pod Identity to give permissions to the VPC CNI pods, then you must provide permissions for the VPC CNI on the instance role. You can use either the ` AmazonEKS_CNI_Policy マネージドポリシー (IPv4 ファミリーを使用してクラスターを作成した場合) または作成した IPv6 ポリシー (IPv6 ファミリーを使用してクラスターを作成した場合) のいずれか。ただし、このロールにポリシーをアタッチするのではなく、Amazon VPC CNI アドオン専用の別のロールにポリシーをアタッチすることをお勧めします。Amazon VPC CNI アドオン用に別のロールを作成する方法の詳細については、「IRSA を使用するように Amazon VPC CNI プラグインを設定する」を参照してください。

注記

Amazon EC2 ノードグループには、Fargate プロファイルとは異なる IAM ロールが必要です。詳細については、「Amazon EKS Pod 実行 IAM ロール」を参照してください。

既存のノードロールの確認

以下の手順を使用して、アカウントに既に Amazon EKS ノードロールがあるかどうかを確認できます。

  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[ロール] を選択します。

  3. ロールのリストで eksNodeRoleAmazonEKSNodeRole、または NodeInstanceRole を検索します。これらの名前のいずれかを持つロールが存在しない場合、「Amazon EKS ノードでの IAM ロールの作成」を参照してロールを作成してください。eksNodeRoleAmazonEKSNodeRole、あるいは NodeInstanceRole を含むロールが存在する場合、そのロールを選択して、アタッチされているポリシーを表示します。

  4. [許可] を選択します。

  5. AmazonEKSWorkerNodePolicy および AmazonEC2ContainerRegistryPullOnly のマネージドポリシーがロールにアタッチされていること、またはカスタムポリシーが最小限の許可でアタッチされていることを確認します。

    注記

    AmazonEKS_CNI_Policy ポリシーがロールに添付されている場合は、それを削除して、代わりに aws-node Kubernetes サービスアカウントにマップされている IAM ロールに添付することをお勧めします。詳細については、「IRSA を使用するように Amazon VPC CNI プラグインを設定する」を参照してください。

  6. [信頼関係] を選択し、[信頼ポリシーの編集] を選択します。

  7. 信頼関係に以下のポリシーが含まれていることを確認します。信頼関係が以下のポリシーと一致する場合、[キャンセル] を選択します。信頼関係が一致しない場合、ポリシーを [信頼ポリシーの編集] ウィンドウにコピーし、[ポリシーの更新] を選択します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Amazon EKS ノードでの IAM ロールの作成

AWS Management Console または AWS CLI を使用して、ノードの IAM ロールを作成できます。

AWS Management Console
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[ロール] を選択します。

  3. [ロール] ページで、[ロールの作成] を選択します。

  4. [信頼されたエンティティを選択] ページで、以下の操作を実行します。

    1. [信頼するエンティティのタイプ][AWS サービス] を選択します。

    2. [ユースケース] で、[EC2] を選択します。

    3. [Next] を選択します。

  5. [アクセス許可を追加] ページで、カスタムポリシーをアタッチするか、以下の操作を行います。

    1. [フィルタポリシー] ボックスに AmazonEKSWorkerNodePolicy と入力します。

    2. 検索結果の [AmazonEKSWorkerNodePolicy] の左にあるチェックボックスを選択します。

    3. [フィルターのクリア] を選択します。

    4. [フィルタポリシー] ボックスに AmazonEC2ContainerRegistryPullOnly と入力します。

    5. 検索結果の [AmazonEC2ContainerRegistryPullOnly] の左にあるチェックボックスを選択します。

      このロールか、aws-node Kubernetes サービスアカウントにマッピングされた別のロールのいずれかに、AmazonEKS_CNI_Policy マネージドポリシーまたは作成した IPv6 ポリシーをアタッチする必要もあります。このロールに対してではなく、Kubernetes サービスアカウントに関連付けられたロールに、ポリシーを割り当てることをお勧めします。詳細については、「IRSA を使用するように Amazon VPC CNI プラグインを設定する」を参照してください。

    6. [Next] を選択します。

  6. [名前を付けて、レビューし、作成する] ページで、以下の操作を実行します。

    1. [ロール名] に、AmazonEKSNodeRole などのロールの一意の名前を入力します。

    2. [説明] では、現在のテキストを「Amazon EKS - Node role」などの説明文に置き換えます。

    3. [タグの追加 (オプション)] で、タグをキーバリューのペアとして添付して、メタデータをロールに追加します。IAM でのタグの使用に関する詳細については、『IAM ユーザーガイド』の「IAM リソースにタグを付ける」を参照してください。

    4. [ロールの作成] を選択します。

AWS CLI
  1. 次のコマンドを実行して、node-role-trust-relationship.json ファイルを作成します。

    cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
  2. IAM ロールを作成します。

    aws iam create-role \ --role-name AmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-relationship.json"
  3. IAM ロールに、2 つの必須なマネージド IAM ポリシーをアタッチします。

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name AmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly \ --role-name AmazonEKSNodeRole
  4. クラスターを作成した IP ファミリーに応じて、次の IAM ポリシーの 1 つを IAM ロールにアタッチします。ポリシーは、このロールまたは Amazon VPC CNI plugin for Kubernetes に使用される Kubernetes aws-node サービスアカウントに関連付けられたロールにアタッチする必要があります。Kubernetes サービスアカウントに関連付けられているロールにポリシーを割り当てることをお勧めします。Kubernetes サービスアカウントに関連付けられたロールにポリシーを割り当てるには、「IRSA を使用するように Amazon VPC CNI プラグインを設定する」を参照しください。

    • IPv4

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSNodeRole
    • IPv6

      1. 次のテキストをコピーし、vpc-cni-ipv6-policy.json という名前のファイルに保存します。

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
      2. IAM ポリシーを作成する

        aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
      3. IAM ロールに IAM ポリシーをアタッチします。111122223333 は、ご自分のアカウント ID に置き換えます。

        aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSNodeRole