

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# アクセスポリシーをアクセスエントリに関連付ける
<a name="access-policies"></a>

1 つ以上のアクセスポリシーを *タイプ* `STANDARD` の *アクセスエントリ* に割り当てることができます。Amazon EKS は、クラスターで正しく機能するために必要なアクセス許可を他のタイプのアクセスエントリに自動的に付与します。Amazon EKS アクセスポリシーには、IAM アクセス許可ではなく Kubernetes アクセス許可が含まれます。アクセスポリシーをアクセスエントリに関連付ける前に、各アクセスポリシーに含まれる Kubernetes アクセス許可を既に理解できていることを確かめてください。詳細については、[アクセスポリシーアクセス許可を確認する](access-policy-permissions.md) を参照してください。どのアクセスポリシーも要件を満たさない場合は、アクセスポリシーをアクセスエントリに関連付けないでください。代わりに、アクセスエントリに 1 つ以上の *グループ名* を指定し、Kubernetes ロールベースのアクセス制御オブジェクトを作成して管理します。詳細については、[アクセスエントリを作成する](creating-access-entries.md) を参照してください。
+ 既存のアクセスエントリ。作成する場合は、[アクセスエントリを作成する](creating-access-entries.md) を参照してください。
+ `ListAccessEntries`、`DescribeAccessEntry`、`UpdateAccessEntry`、`ListAccessPolicies`、`AssociateAccessPolicy`、および `DisassociateAccessPolicy` のアクセス許可を持つ AWS Identity and Access Management ロールまたはユーザー。詳細については、「*サービス認証リファレンス*」の「[Actions defined by Amazon Elastic Kubernetes Service](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonelastickubernetesservice.html#amazonelastickubernetesservice-actions-as-permissions)」を参照してください。

アクセスポリシーをアクセスエントリに関連付ける前に、以下の要件を考慮してください。
+ 各アクセスエントリには複数のアクセスポリシーを関連付けることができますが、各ポリシーを 1 つのアクセスエントリに関連付けることができるのは 1 回だけです。複数のアクセスポリシーを関連付ける場合、アクセスエントリの IAM プリンシパルには、関連するすべてのアクセスポリシーに含まれるすべてのアクセス許可が付与されます。
+ アクセスポリシーをクラスター上のすべてのリソースに範囲指定することも、1 つ以上の Kubernetes 名前空間の名前を指定して範囲指定することもできます。名前空間の名前にはワイルドカード文字を使用できます。例えば、`dev-` で始まるすべての名前空間にアクセスポリシーを適用する場合は、名前空間の名前として `dev-*` を指定できます。名前空間がクラスターに存在し、スペルがクラスター上の実際の名前空間の名前と一致していることを確認してください。Amazon EKS は、クラスター上の名前空間のスペルや存在を確認しません。
+ アクセスポリシーをアクセスエントリに関連付けた後、アクセスポリシーの *アクセス範囲* を変更できます。アクセスポリシーの範囲を Kubernetes 名前空間に設定した場合は、必要に応じて関連付けの名前空間を追加および削除できます。
+ *グループ名* も指定されているアクセスエントリにアクセスポリシーを関連付けると、IAM プリンシパルには、関連するすべてのアクセスポリシーのすべてのアクセス許可が付与されます。また、グループ名を指定する Kubernetes `Role` および `RoleBinding` オブジェクトで指定されている Kubernetes `Role` または `ClusterRole` オブジェクトのすべてのアクセス許可も保持されます。
+ `kubectl auth can-i --list` コマンドを実行しても、コマンドを実行したときに使用している IAM プリンシパルのアクセスエントリに関連付けられているアクセスポリシーによって割り当てられた Kubernetes アクセス許可は表示されません。このコマンドは、アクセスエントリに指定したグループ名またはユーザー名にバインドした Kubernetes `Role` または `ClusterRole` オブジェクトでアクセス許可を付与した場合にのみ、Kubernetes アクセス許可を表示します。
+ `--as {{username}} ` または `--as-group {{group-name}} ` で `kubectl` コマンドを使用するなど、クラスター上の Kubernetes オブジェクトを操作する際に Kubernetes ユーザーまたはグループになりすますと、Kubernetes RBAC 認可の使用を強制することになります。その結果、IAM プリンシパルには、アクセスエントリに関連付けられたアクセスポリシーによって割り当てられるアクセス許可はありません。IAM プリンシパルを偽装するユーザーまたはグループが持つ Kubernetes アクセス許可は、グループ名またはユーザー名にバインドした Kubernetes `Role` または `ClusterRole` オブジェクトで付与した Kubernetes アクセス許可だけです。IAM プリンシパルが関連するアクセスポリシー内のアクセス許可を持つようにするには、Kubernetes ユーザーまたはグループを偽装しないでください。IAM プリンシパルには、アクセスエントリに指定したグループ名またはユーザー名にバインドした Kubernetes `Role` または `ClusterRole` オブジェクトで付与したアクセス許可も引き続き保持されます。詳細については、Kubernetes ドキュメントの「[ユーザーの偽装](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation)」を参照してください。

AWS マネジメントコンソール または AWS CLI を使用してアクセスポリシーをアクセスエントリに関連付けることができます。

## AWS マネジメントコンソール
<a name="access-associate-console"></a>

1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters) を開きます。

1. アクセスポリシーを関連付けるアクセスエントリがあるクラスターの名前を選択します。

1. **[リモートアクセス]** タブを選択してください。

1. アクセスエントリのタイプが **標準** の場合は、Amazon EKS **アクセスポリシー** を関連付けたり関連付けを解除したりできます。アクセスエントリのタイプが **標準** 以外の場合、このオプションは使用できません。

1. **[アクセスポリシーを関連付ける]** を選択します。

1. **[ポリシー名]** には、IAM プリンシパルに付与したいアクセス許可を持つポリシーを選択します。各ポリシーに含まれるアクセス許可を表示するには、[アクセスポリシーアクセス許可を確認する](access-policy-permissions.md) を参照してください。

1. **[アクセススコープ]** では、アクセス範囲を選択します。**[クラスター]** を選択すると、すべての Kubernetes 名前空間のリソースについて、アクセスポリシー内のアクセス許可が IAM プリンシパルに付与されます。**[Kubernetes 名前空間]** を選択した場合は、**[新しい名前空間の追加]** を選択できます。表示される **[名前空間]** フィールドには、クラスター上の Kubernetes 名前空間の名前を入力できます。IAM プリンシパルに複数の名前空間のアクセス許可を持たせたい場合は、複数の名前空間を入力できます。

1. **[アクセスポリシーを追加]** を選択します。

## AWS CLI
<a name="access-associate-cli"></a>

1. ご使用のデバイスまたは AWS CloudShell で、バージョン `2.12.3` 以降、または AWS コマンドラインインターフェイス (AWS CLI) のバージョン `1.27.160` 以降がインストールおよび設定されていること。現在のバージョンを確認するには、`aws --version | cut -d / -f2 | cut -d ' ' -f1` を参照してください。`yum`、`apt-get`、macOS 用の Homebrew などのパッケージマネージャーは、多くの場合 AWS CLI の最新バージョンより数バージョン古くなっています。最新バージョンをインストールするには、「* AWS コマンドラインインターフェイスユーザーガイド*」の「[インストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」および「[aws configure を使用したクイック設定](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「* AWS CloudShell ユーザーガイド*」の「[ホームディレクトリへの AWS CLI のインストール](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)」を参照してください。

1. 利用可能なアクセスポリシーを表示します。

   ```
   aws eks list-access-policies --output table
   ```

   出力例は次のとおりです。

   ```
   ---------------------------------------------------------------------------------------------------------
   |                                          ListAccessPolicies                                           |
   +-------------------------------------------------------------------------------------------------------+
   ||                                           accessPolicies                                            ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||                                 arn                                 |             name              ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSAdminPolicy        |  AmazonEKSAdminPolicy         ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy |  AmazonEKSClusterAdminPolicy  ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSEditPolicy         |  AmazonEKSEditPolicy          ||
   ||  {arn-aws}eks::aws:cluster-access-policy/AmazonEKSViewPolicy         |  AmazonEKSViewPolicy          ||
   |+---------------------------------------------------------------------+-------------------------------+|
   ```

   各ポリシーに含まれるアクセス許可を表示するには、[アクセスポリシーアクセス許可を確認する](access-policy-permissions.md) を参照してください。

1. 既存のアクセスエントリを表示します。{{マイクラスター}} の部分は自分のクラスター名に置き換えます。

   ```
   aws eks list-access-entries --cluster-name my-cluster
   ```

   出力例は次のとおりです。

   ```
   {
       "accessEntries": [
           "arn:aws:iam::111122223333:role/my-role",
           "arn:aws:iam::111122223333:user/my-user"
       ]
   }
   ```

1. アクセスポリシーをアクセスエントリに関連付けます。次の例では、`AmazonEKSViewPolicy` アクセスポリシーをアクセスエントリに関連付けます。{{my-role}} IAM ロールがクラスター上の Kubernetes オブジェクトにアクセスしようとするたびに、Amazon EKS は、ポリシー内のアクセス許可を使用して {{my-namespace1}} と {{my-namespace2}} の Kubernetes 名前空間のみの Kubernetes オブジェクトにアクセスするアクセス許可をロールに付与します。{{my-cluster}} をクラスターの名前、{{111122223333}} を AWS アカウント ID に、{{my-role}} を Amazon EKS に Kubernetes クラスターオブジェクトへのアクセスを許可してほしい IAM ロールの名前に置き換えます。

   ```
   aws eks associate-access-policy --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role \
       --access-scope type=namespace,namespaces=my-namespace1,my-namespace2 --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy
   ```

   IAM プリンシパルにクラスター全体のアクセス許可を持たせたい場合は、`type=namespace,namespaces={{my-namespace1}},{{my-namespace2}} ` を `type=cluster` に置き換えてください。複数のアクセスポリシーをアクセスエントリに関連付ける場合は、それぞれに固有のアクセスポリシーを指定してコマンドを複数回実行します。関連するアクセスポリシーにはそれぞれ独自の範囲があります。
**注記**  
関連するアクセスポリシーの範囲を後で変更する場合は、新しい範囲で前のコマンドをもう一度実行してください。例えば、{{my-namespace2}} を削除したい場合は、`type=namespace,namespaces={{my-namespace1}} ` のみを使用してコマンドを再実行します。範囲を `namespace` から `cluster` に変更する場合は、`type=cluster` を使用して `type=namespace,namespaces={{my-namespace1}},{{my-namespace2}} ` を削除してコマンドを再実行します。

1. どのアクセスポリシーをアクセスエントリに関連付けるかを決定します。

   ```
   aws eks list-associated-access-policies --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role
   ```

   出力例は次のとおりです。

   ```
   {
       "clusterName": "my-cluster",
       "principalArn": "arn:aws:iam::111122223333",
       "associatedAccessPolicies": [
           {
               "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy",
               "accessScope": {
                   "type": "cluster",
                   "namespaces": []
               },
               "associatedAt": "2023-04-17T15:25:21.675000-04:00",
               "modifiedAt": "2023-04-17T15:25:21.675000-04:00"
           },
           {
               "policyArn": "arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy",
               "accessScope": {
                   "type": "namespace",
                   "namespaces": [
                       "my-namespace1",
                       "my-namespace2"
                   ]
               },
               "associatedAt": "2023-04-17T15:02:06.511000-04:00",
               "modifiedAt": "2023-04-17T15:02:06.511000-04:00"
           }
       ]
   }
   ```

   前の例では、このアクセスエントリの IAM プリンシパルには、クラスター上のすべての名前空間に対する表示アクセス許可と、2 つの Kubernetes 名前空間に対する管理者アクセス許可があります。

1. アクセスポリシーとアクセスエントリの関連付けを解除します。この例では、`AmazonEKSAdminPolicy` ポリシーとアクセスエントリの関連付けが解除されます。ただし、IAM プリンシパルは {{my-namespace1}} と {{my-namespace2}} 名前空間のオブジェクトに対する `AmazonEKSViewPolicy` アクセスポリシー内のアクセス許可を保持します。これは、そのアクセスポリシーがアクセスエントリとの関連付けを解除されていないためです。

   ```
   aws eks disassociate-access-policy --cluster-name my-cluster --principal-arn arn:aws:iam::111122223333:role/my-role \
       --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy
   ```

利用可能なアクセスポリシーを一覧表示するには、[アクセスポリシーアクセス許可を確認する](access-policy-permissions.md) を参照してください。