このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
1 つ以上のアクセスポリシーを タイプ STANDARD
のアクセスエントリに割り当てることができます。Amazon EKS は、クラスターで正しく機能するために必要なアクセス許可を他のタイプのアクセスエントリに自動的に付与します。Amazon EKS アクセスポリシーには、IAM アクセス許可ではなく Kubernetes アクセス許可が含まれます。アクセスポリシーをアクセスエントリに関連付ける前に、各アクセスポリシーに含まれる Kubernetes アクセス許可を既に理解できていることを確かめてください。詳細については「アクセスポリシーアクセス許可を確認する」を参照してください。どのアクセスポリシーも要件を満たさない場合は、アクセスポリシーをアクセスエントリに関連付けないでください。代わりに、アクセスエントリに 1 つ以上のグループ名を指定し、Kubernetes ロールベースのアクセス制御オブジェクトを作成して管理します。詳細については「アクセスエントリを作成する」を参照してください。
-
既存のアクセスエントリ。作成する場合は「アクセスエントリを作成する」を参照してください。
-
ListAccessEntries
、DescribeAccessEntry
、UpdateAccessEntry
、ListAccessPolicies
、AssociateAccessPolicy
、およびDisassociateAccessPolicy
のアクセス許可を持つ AWS Identity and Access Management ロールまたはユーザー。詳細については、「サービス認証リファレンス」の「Actions defined by Amazon Elastic Kubernetes Service」を参照してください。
アクセスポリシーをアクセスエントリに関連付ける前に、以下の要件を考慮してください。
-
各アクセスエントリには複数のアクセスポリシーを関連付けることができますが、各ポリシーを 1 つのアクセスエントリに関連付けることができるのは 1 回だけです。複数のアクセスポリシーを関連付ける場合、アクセスエントリの IAM プリンシパルには、関連するすべてのアクセスポリシーに含まれるすべてのアクセス許可が付与されます。
-
アクセスポリシーをクラスター上のすべてのリソースに範囲指定することも、1 つ以上の Kubernetes 名前空間の名前を指定して範囲指定することもできます。名前空間の名前にはワイルドカード文字を使用できます。例えば、
dev-
で始まるすべての名前空間にアクセスポリシーを適用する場合は、名前空間の名前としてdev-*
を指定できます。名前空間がクラスターに存在し、スペルがクラスター上の実際の名前空間の名前と一致していることを確認してください。Amazon EKS は、クラスター上の名前空間のスペルや存在を確認しません。 -
アクセスポリシーをアクセスエントリに関連付けた後、アクセスポリシーのアクセス範囲を変更できます。アクセスポリシーの範囲を Kubernetes 名前空間に設定した場合は、必要に応じて関連付けの名前空間を追加および削除できます。
-
グループ名も指定されているアクセスエントリにアクセスポリシーを関連付けると、IAM プリンシパルには、関連するすべてのアクセスポリシーのすべてのアクセス許可が付与されます。また、グループ名を指定する Kubernetes
Role
およびRoleBinding
オブジェクトで指定されている KubernetesRole
またはClusterRole
オブジェクトのすべてのアクセス許可も保持されます。 -
kubectl auth can-i --list
コマンドを実行しても、コマンドを実行したときに使用している IAM プリンシパルのアクセスエントリに関連付けられているアクセスポリシーによって割り当てられた Kubernetes アクセス許可は表示されません。このコマンドは、アクセスエントリに指定したグループ名またはユーザー名にバインドした KubernetesRole
またはClusterRole
オブジェクトでアクセス許可を付与した場合にのみ、Kubernetes アクセス許可を表示します。 -
--as
またはusername
--as-group
でgroup-name
kubectl
コマンドを使用するなど、クラスター上の Kubernetes オブジェクトを操作する際に Kubernetes ユーザーまたはグループになりすますと、Kubernetes RBAC 認可の使用を強制することになります。その結果、IAM プリンシパルには、アクセスエントリに関連付けられたアクセスポリシーによって割り当てられるアクセス許可はありません。IAM プリンシパルを偽装するユーザーまたはグループが持つ Kubernetes アクセス許可は、グループ名またはユーザー名にバインドした KubernetesRole
またはClusterRole
オブジェクトで付与した Kubernetes アクセス許可だけです。IAM プリンシパルが関連するアクセスポリシー内のアクセス許可を持つようにするには、Kubernetes ユーザーまたはグループを偽装しないでください。IAM プリンシパルには、アクセスエントリに指定したグループ名またはユーザー名にバインドした KubernetesRole
またはClusterRole
オブジェクトで付与したアクセス許可も引き続き保持されます。詳細については、Kubernetes ドキュメントの「ユーザーの偽装」を参照してください。
AWS Management Console または AWS CLI を使用してアクセスポリシーをアクセスエントリに関連付けることができます。
AWS Management Console
-
Amazon EKS コンソール
を開きます。 -
アクセスポリシーを関連付けるアクセスエントリがあるクラスターの名前を選択します。
-
[アクセス] タブを選択します。
-
アクセスエントリのタイプが標準の場合は、Amazon EKS アクセスポリシーを関連付けたり関連付けを解除したりできます。アクセスエントリのタイプが標準以外の場合、このオプションは使用できません。
-
[アクセスポリシーを関連付ける] を選択します。
-
[ポリシー名] には、IAM プリンシパルに付与したいアクセス許可を持つポリシーを選択します。各ポリシーに含まれるアクセス許可を表示するには、「アクセスポリシーアクセス許可を確認する」を参照してください。
-
[アクセススコープ] では、アクセス範囲を選択します。[クラスター] を選択すると、すべての Kubernetes 名前空間のリソースについて、アクセスポリシー内のアクセス許可が IAM プリンシパルに付与されます。[Kubernetes 名前空間] を選択した場合は、[新しい名前空間の追加] を選択できます。表示される [名前空間] フィールドには、クラスター上の Kubernetes 名前空間の名前を入力できます。IAM プリンシパルに複数の名前空間のアクセス許可を持たせたい場合は、複数の名前空間を入力できます。
-
[アクセスポリシーを追加] を選択します。
AWS CLI
-
ご使用のデバイスまたは 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 コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。AWS クラウドシェル にインストールされている AWS CLI バージョンも最新バージョンより数バージョン遅れることがあります。更新するには、「AWS CloudShell ユーザーガイド」の「ホームディレクトリへの AWS CLI のインストール」を参照してください。 -
利用可能なアクセスポリシーを表示します。
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 || |+---------------------------------------------------------------------+-------------------------------+|
各ポリシーに含まれるアクセス許可を表示するには、「アクセスポリシーアクセス許可を確認する」を参照してください。
-
既存のアクセスエントリを表示します。
マイクラスター
の部分は自分のクラスター名に置き換えます。aws eks list-access-entries --cluster-name my-cluster
出力例は次のとおりです。
{ "accessEntries": [ "arn:aws:iam::111122223333:role/my-role", "arn:aws:iam::111122223333:user/my-user" ] }
-
アクセスポリシーをアクセスエントリに関連付けます。次の例では、
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
-
どのアクセスポリシーをアクセスエントリに関連付けるかを決定します。
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 名前空間に対する管理者アクセス許可があります。
-
アクセスポリシーとアクセスエントリの関連付けを解除します。この例では、
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
利用可能なアクセスポリシーを一覧表示するには、「アクセスポリシーアクセス許可を確認する」を参照してください。