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

Amazon EKS ノードの IAM ロール

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

注記

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

ノードを使用するには、次の IAM ポリシーを持つ IAM ロールを作成する必要があります。

注記

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

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

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

IAM コンソールで eksNodeRole を確認するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

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

  5. [AmazonEKSWorkerNodePolicy] および [AmazonEC2ContainerRegistryReadOnly] のマネージド型ポリシーがロールにアタッチされていることを確認します。

    注記

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

  6. [Trust relationships] (信頼関係) を選択し、[Edit trust policy] (信頼ポリシーの編集) を選択します。

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

    { "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
IAM コンソールで Amazon EKS ノードロールを作成するには
  1. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

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

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

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

    1. [Trusted entity type] (信頼するエンティティのタイプ) で [AWS service] (サービス) を選択します。

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

    3. [Next] (次へ) をクリックします。

  5. [Add permissions] (アクセス許可を追加する) ページで、以下を実行します。

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

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

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

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

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

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

    6. [Next] (次へ) を選択します。

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

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

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

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

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

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

    • 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