アクセスポリシーをアクセスエントリに関連付ける - Amazon EKS

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

本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。

アクセスポリシーをアクセスエントリに関連付ける

1 つ以上のアクセスポリシーを タイプ STANDARD のアクセスエントリに割り当てることができます。Amazon EKS は、クラスターで正しく機能するために必要なアクセス許可を他のタイプのアクセスエントリに自動的に付与します。Amazon EKS アクセスポリシーには、IAM アクセス許可ではなく Kubernetes アクセス許可が含まれます。アクセスポリシーをアクセスエントリに関連付ける前に、各アクセスポリシーに含まれる Kubernetes アクセス許可をすでに理解できていることを確かめてください。詳細については、「アクセスポリシーでの許可」を参照してください。どのアクセスポリシーも要件を満たさない場合は、アクセスポリシーをアクセスエントリに関連付けないでください。代わりに、アクセスエントリに 1 つ以上のグループ名を指定し、Kubernetes ロールベースのアクセス制御オブジェクトを作成して管理します。詳細については、「アクセスエントリを作成する」を参照してください。

前提条件
  • 既存のアクセスエントリ。作成する場合は「アクセスエントリを作成する」を参照してください。

  • ListAccessEntriesDescribeAccessEntryUpdateAccessEntryListAccessPoliciesAssociateAccessPolicy、および DisassociateAccessPolicy のアクセス許可を持つ AWS Identity and Access Management ロールまたはユーザー。詳細については、サービス認可リファレンスの「Amazon Elastic Kubernetes Service で定義されるアクション」を参照してください。

アクセスポリシーをアクセスエントリに関連付ける前に、以下の要件を考慮してください。

  • 各アクセスエントリには複数のアクセスポリシーを関連付けることができますが、各ポリシーを 1 つのアクセスエントリに関連付けることができるのは 1 回だけです。複数のアクセスポリシーを関連付ける場合、アクセスエントリの IAM プリンシパルには、関連するすべてのアクセスポリシーに含まれるすべてのアクセス許可が付与されます。

  • アクセスポリシーをクラスター上のすべてのリソースに範囲指定することも、1 つ以上の Kubernetes 名前空間の名前を指定して範囲指定することもできます。名前空間の名前にはワイルドカード文字を使用できます。例えば、dev- で始まるすべての名前空間にアクセスポリシーを適用する場合は、名前空間の名前として dev-* を指定できます。名前空間がクラスターに存在し、スペルがクラスター上の実際の名前空間の名前と一致していることを確認してください。Amazon EKS は、クラスター上の名前空間のスペルや存在を確認しません。

  • アクセスポリシーをアクセスエントリに関連付けた後、アクセスポリシーのアクセス範囲を変更できます。アクセスポリシーの範囲を Kubernetes 名前空間に設定した場合は、必要に応じて関連付けの名前空間を追加および削除できます。

  • グループ名も指定されているアクセスエントリにアクセスポリシーを関連付けると、IAM プリンシパルには、関連するすべてのアクセスポリシーのすべてのアクセス許可が付与されます。また、Kubernetes Role で指定されている Kubernetes Role または ClusterRole オブジェクト、およびグループ名を指定する RoleBinding オブジェクトのすべてのアクセス許可も保持されます。

  • kubectl auth can-i --list コマンドを実行しても、コマンドを実行したときに使用している IAM プリンシパルのアクセスエントリに関連付けられているアクセスポリシーによって割り当てられた Kubernetes アクセス許可は表示されません。このコマンドは、アクセスエントリに指定したグループ名またはユーザー名にバインドした Kubernetes Role または ClusterRole オブジェクトでアクセス許可を付与した場合にのみ、Kubernetes アクセス許可を表示します。

  • --as username または --as-group group-namekubectl コマンドを使用するなど、クラスター上の Kubernetes オブジェクトを操作する際に Kubernetes ユーザーまたはグループになりすますと、Kubernetes RBAC 認可の使用を強制することになります。その結果、IAM プリンシパルには、アクセスエントリに関連付けられたアクセスポリシーによって割り当てられるアクセス許可はありません。IAM プリンシパルを偽装するユーザーまたはグループが持つ Kubernetes アクセス許可は、グループ名またはユーザー名にバインドした Kubernetes Role または ClusterRole オブジェクトで付与した Kubernetes アクセス許可だけです。IAM プリンシパルが関連するアクセスポリシー内のアクセス許可を持つようにするには、Kubernetes ユーザーまたはグループを偽装しないでください。IAM プリンシパルには、Kubernetes Role で付与したアクセス許可や、アクセスエントリに指定したグループ名またはユーザー名にバインドした ClusterRole オブジェクトも引き続き保持されます。詳細については、Kubernetes ドキュメントの「ユーザー偽装」を参照してください。

AWS Management Console または AWS CLI を使用してアクセスポリシーをアクセスエントリに関連付けることができます。

AWS Management Console
AWS Management Console を使用してアクセスポリシーをアクセスエントリに関連付けるには
  1. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

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

  3. [リモートアクセス] タブを選択します。

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

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

  6. [ポリシー名] には、IAM プリンシパルに付与したいアクセス許可を持つポリシーを選択します。各ポリシーに含まれるアクセス許可を表示するには、「アクセスポリシーでの許可」を参照してください。

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

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

AWS CLI
前提条件

ご使用のデバイスまたは AWS CloudShell で、バージョン 2.12.3 以降、または AWS Command Line Interface (AWS CLI) のバージョン 1.27.160 以降がインストールおよび設定されていること。現在のバージョンを確認するには、「aws --version | cut -d / -f2 | cut -d ' ' -f1」を参照してください。macOS の yumapt-get、または Homebrew などのパッケージマネージャは、AWS CLI の最新バージョンより数バージョン遅れることがあります。最新バージョンをインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI のインストール、更新、およびアンインストール」と「aws configure でのクイック設定」を参照してください。AWS CloudShell にインストールされている AWS CLI バージョンは、最新バージョンより数バージョン遅れている可能性もあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。

アクセスポリシーをアクセスエントリに関連付けるには
  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 || |+---------------------------------------------------------------------+-------------------------------+|

    各ポリシーに含まれるアクセス許可を表示するには、「アクセスポリシーでの許可」を参照してください。

  2. 既存のアクセスエントリを表示します。my-cluster の部分は、自分のクラスター名に置き換えます。

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

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

    { "accessEntries": [ "arn:aws:iam::111122223333:role/my-role", "arn:aws:iam::111122223333:user/my-user" ] }
  3. アクセスポリシーをアクセスエントリに関連付けます。次の例では、AmazonEKSViewPolicy アクセスポリシーをアクセスエントリに関連付けます。my-role IAM ロールがクラスター上の Kubernetes オブジェクトにアクセスしようとするたびに、Amazon EKS は、ポリシー内のアクセス許可を使用して my-namespace1my-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-namespace2type=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 名前空間に対する管理者アクセス許可があります。

  2. アクセスポリシーとアクセスエントリの関連付けを解除します。この例では、AmazonEKSAdminPolicy ポリシーとアクセスエントリの関連付けが解除されます。ただし、IAM プリンシパルは my-namespace1my-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

アクセスポリシーでの許可

アクセスポリシーには、Kubernetes verbs (アクセス許可) と resources を含む rules が含まれます。アクセスポリシーには IAM のアクセス許可やリソースは含まれません。Kubernetes Role および ClusterRole オブジェクトと同様に、アクセスポリシーには allow rules が含まれます。アクセスポリシーの内容は変更できません。独自のアクセスポリシーを作成することはできません。アクセスポリシーのアクセス許可がニーズに合わない場合は、Kubernetes RBAC オブジェクトを作成し、アクセスエントリのグループ名を指定します。詳細については、「アクセスエントリを作成する」を参照してください。アクセスポリシーに含まれるアクセス許可は、Kubernetes ユーザー向けのクラスターロールのアクセス許可と似ています。詳細については、Kubernetes ドキュメントの「ユーザー向けロール」を参照してください。

アクセスポリシーを選択し、その内容を確認します。各アクセスポリシーの各テーブルの各行は個別のルールです。

このアクセスポリシーには、リソースに対するほとんどのアクセス許可を IAM プリンシパルに付与するアクセス許可が含まれています。アクセスエントリに関連付けられている場合、そのアクセス範囲は通常 1 つ以上の Kubernetes 名前空間です。IAM プリンシパルにクラスター上のすべてのリソースへの管理者アクセスを許可する場合は、代わりに AmazonEKSClusterAdminPolicy アクセスポリシーをアクセスエントリに関連付けてください。

ARNarn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy

Kubernetes API グループ Kubernetes のリソース Kubernetes 動詞 (アクセス許可)
apps daemonsets, deployments, deployments/rollback, deployments/scale, replicasets, replicasets/scale, statefulsets, statefulsets/scale create, delete, deletecollection, patch, update
apps controllerrevisions, daemonsets, daemonsets/status, deployments, deployments/scale, deployments/status, replicasets, replicasets/scale, replicasets/status, statefulsets, statefulsets/scale, statefulsets/status get, list, watch
authorization.k8s.io localsubjectaccessreviews create
autoscaling horizontalpodautoscalers create, delete, deletecollection, patch, update
autoscaling horizontalpodautoscalers, horizontalpodautoscalers/status get, list, watch
batch cronjobs, jobs create, delete, deletecollection, patch, update
batch cronjobs, cronjobs/status, jobs, jobs/status get, list, watch
discovery.k8s.io endpointslices get, list, watch
extensions daemonsets, deployments, deployments/rollback, deployments/scale, ingresses, networkpolicies, replicasets, replicasets/scale, replicationcontrollers/scale create, delete, deletecollection, patch, update
extensions daemonsets, daemonsets/status, deployments, deployments/scale, deployments/status, ingresses, ingresses/status, networkpolicies, replicasets, replicasets/scale, replicasets/status, replicationcontrollers/scale get, list, watch
networking.k8s.io ingresses, ingresses/status, networkpolicies get, list, watch
networking.k8s.io ingresses, networkpolicies create, delete, deletecollection, patch, update
policy poddisruptionbudgets create, delete, deletecollection, patch, update
policy poddisruptionbudgets, poddisruptionbudgets/status get, list, watch
rbac.authorization.k8s.io rolebindings, roles create, delete, deletecollection, get, list, patch, update, watch
configmaps, endpoints, persistentvolumeclaims, persistentvolumeclaims/status, pods, replicationcontrollers, replicationcontrollers/scale, serviceaccounts, services, services/status get,list, watch
pods/attach, pods/exec, pods/portforward, pods/proxy, secrets, services/proxy get, list, watch
configmaps, events, persistentvolumeclaims, replicationcontrollers, replicationcontrollers/scale, secrets, serviceaccounts, services, services/proxy create, delete, deletecollection, patch, update
pods, pods/attach, pods/exec, pods/portforward, pods/proxy create, delete, deletecollection, patch, update
serviceaccounts impersonate
bindings, events, limitranges, namespaces/status, pods/log, pods/status, replicationcontrollers/status, resourcequotas, resourcequotas/status get, list, watch
namespaces get,list, watch

このアクセスポリシーには、IAM プリンシパル管理者にクラスターへのアクセス権を付与するアクセス許可が含まれています。アクセスエントリに関連付けられている場合、そのアクセス範囲は通常、Kubernetes 名前空間ではなくクラスターになります。IAM プリンシパルの管理範囲をより限定したい場合は、代わりに AmazonEKSAdminPolicy アクセスポリシーをアクセスエントリに関連付けることを検討してください。

ARNarn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy

Kubernetes API グループ Kubernetes nonResourceURLs Kubernetes のリソース Kubernetes 動詞 (アクセス許可)
* * *
* *

このアクセスポリシーには、IAM プリンシパルにクラスターの全リソースをリスト/表示するアクセス権を付与するアクセス許可が含まれています。これには Kubernetes Secrets が含まれることに注意してください。

ARNarn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminViewPolicy

Kubernetes API グループ Kubernetes のリソース Kubernetes 動詞 (アクセス許可)
* * get, list, watch

このアクセスポリシーには、IAM プリンシパルが Kubernetes リソースを編集できるようにするアクセス許可が含まれています。

ARNarn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy

Kubernetes API グループ Kubernetes のリソース Kubernetes 動詞 (アクセス許可)
apps daemonsets, deployments, deployments/rollback, deployments/scale, replicasets, replicasets/scale, statefulsets, statefulsets/scale create, delete, deletecollection, patch, update
apps controllerrevisions, daemonsets, daemonsets/status, deployments, deployments/scale, deployments/status, replicasets, replicasets/scale, replicasets/status, statefulsets, statefulsets/scale, statefulsets/status get, list, watch
autoscaling horizontalpodautoscalers, horizontalpodautoscalers/status get, list, watch
autoscaling horizontalpodautoscalers create, delete, deletecollection, patch, update
batch cronjobs, jobs create, delete, deletecollection, patch, update
batch cronjobs, cronjobs/status, jobs, jobs/status get, list, watch
discovery.k8s.io endpointslices get, list, watch
extensions daemonsets, deployments, deployments/rollback, deployments/scale, ingresses, networkpolicies, replicasets, replicasets/scale, replicationcontrollers/scale create, delete, deletecollection, patch, update
extensions daemonsets, daemonsets/status, deployments, deployments/scale, deployments/status, ingresses, ingresses/status, networkpolicies, replicasets, replicasets/scale, replicasets/status, replicationcontrollers/scale get, list, watch
networking.k8s.io ingresses, networkpolicies create, delete, deletecollection, patch, update
networking.k8s.io ingresses, ingresses/status, networkpolicies get, list, watch
policy poddisruptionbudgets create, delete, deletecollection, patch, update
policy poddisruptionbudgets, poddisruptionbudgets/status get, list, watch
namespaces get, list, watch
pods/attach, pods/exec, pods/portforward, pods/proxy, secrets, services/proxy get, list, watch
serviceaccounts impersonate
pods, pods/attach, pods/exec, pods/portforward, pods/proxy create, delete, deletecollection, patch, update
configmaps, events, persistentvolumeclaims, replicationcontrollers, replicationcontrollers/scale, secrets, serviceaccounts, services, services/proxy create, delete, deletecollection, patch, update
configmaps, endpoints, persistentvolumeclaims, persistentvolumeclaims/status, pods, replicationcontrollers, replicationcontrollers/scale, serviceaccounts, services, services/status get, list, watch
bindings, events, limitranges, namespaces/status, pods/log, pods/status, replicationcontrollers/status, resourcequotas, resourcequotas/status get, list, watch

このアクセスポリシーには、IAM プリンシパルがほとんどの Kubernetes リソースを表示できるようにするアクセス許可が含まれています。

ARNarn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy

Kubernetes API グループ Kubernetes のリソース Kubernetes 動詞 (アクセス許可)
apps controllerrevisions, daemonsets, daemonsets/status, deployments, deployments/scale, deployments/status, replicasets, replicasets/scale, replicasets/status, statefulsets, statefulsets/scale, statefulsets/status get, list, watch
autoscaling horizontalpodautoscalers, horizontalpodautoscalers/status get, list, watch
batch cronjobs, cronjobs/status, jobs, jobs/status get, list, watch
discovery.k8s.io endpointslices get, list, watch
extensions daemonsetsdaemonsets/statusdeploymentsdeployments/scaledeployments/statusingressesingresses/statusnetworkpoliciesreplicasets、replicasets/scalereplicasets/statusreplicationcontrollers/scale get, list, watch
networking.k8s.io ingresses, ingresses/status, networkpolicies get, list, watch
policy poddisruptionbudgets, poddisruptionbudgets/status get, list, watch
configmaps, endpoints, persistentvolumeclaims, persistentvolumeclaims/status, pods, replicationcontrollers, replicationcontrollers/scale, serviceaccounts, services, services/status get, list, watch
bindingseventslimitrangesnamespaces/statuspods/logpods/status、replicationcontrollers/statusresourcequotas、resourcequotas/status get, list, watch
namespaces get, list, watch

アクセスポリシーの更新

アクセスポリシーが導入されてからのアクセスポリシーへの更新に関する詳細を表示します。このページの変更に関する自動通知を入手するには、Amazon EKS ドキュメントの履歴ページから、RSS フィードにサブスクライブしてください。

変更 説明 日付
AmazonEKSAdminViewPolicy を追加します。 Secrets などのリソースを含む、拡張ビューアクセス用の新しいポリシーを追加します。 2024 年 4 月 23 日

アクセスポリシーが導入されました。

Amazon EKS はアクセスポリシーを導入しました。

2023 年 5 月 29 日