将访问策略与访问条目关联起来
您可以为类型为 STANDARD
的访问条目分配一个或多个访问策略。Amazon EKS 会自动向其他类型的访问条目授予在您的集群中正常运行所需的权限。Amazon EKS 访问策略包含 Kubernetes 权限,但不包含 IAM 权限。在将访问策略关联到访问条目之前,请确保您熟悉每个访问策略中包含的 Kubernetes 权限。有关更多信息,请参阅 访问策略权限。如果所有访问策略都不符合您的要求,则不要将访问策略与访问条目相关联。而是为访问条目指定一个或多个组名称,然后创建和管理 Kubernetes 基于角色的访问控制对象。有关更多信息,请参阅 创建访问条目。
-
现有的访问条目。要创建该文件,请参阅 创建访问条目。
-
具有以下权限的 AWS Identity and Access Management 角色或用户:
ListAccessEntries
、DescribeAccessEntry
、UpdateAccessEntry
、ListAccessPolicies
、AssociateAccessPolicy
和DisassociateAccessPolicy
。有关更多信息,请参阅《服务授权参考》中的 Amazon Elastic Kubernetes Service 定义的操作。
在将访问策略与访问条目关联之前,请考虑以下要求:
-
您可以将多个访问策略关联到每个访问条目,但只能将每个策略与一个访问条目关联一次。如果您关联多个访问策略,则访问条目的 IAM 主体拥有所有关联访问策略中包含的所有权限。
-
您可以将访问策略的范围限定为集群上的所有资源,也可以指定一个或多个 Kubernetes 命名空间的名称。您可以为命名空间名称使用通配符。例如,如果要将访问策略的范围限定为以
dev-
开头的所有命名空间,则可以指定dev-*
为命名空间名称。请确保您的集群上存在命名空间,并且拼写与集群上的实际命名空间名称相匹配。Amazon EKS 不会确认您的集群上命名空间的拼写或是否存在。 -
将访问策略与访问条目关联后,您可以更改访问策略的访问范围。如果您已将访问策略的范围限定为 Kubernetes 命名空间,则可以根据需要为关联添加和移除命名空间。
-
如果您将访问策略关联到同时指定了组名称的访问条目,则 IAM 主体拥有所有关联访问策略中的所有权限。该主体还拥有在指定组名称的任何 Kubernetes
Role
和RoleBinding
对象中指定的任何 KubernetesRole
或ClusterRole
对象中的所有权限。 -
如果您运行
kubectl auth can-i --list
命令,则不会看到访问策略分配的任何 Kubernetes 权限,这些权限与您在运行命令时使用的 IAM 主体的访问条目相关联。只有在您已经在 KubernetesRole
或ClusterRole
对象中授予了 Kubernetes 权限,并且已经将这些权限绑定到为访问条目指定的组名称或用户名时,该命令才会显示这些权限。 -
如果您在与集群上的 Kubernetes 对象交互时伪装成 Kubernetes 用户或组,例如使用带
--as
或username
--as-group
的group-name
kubectl
命令,则表示您强制使用 Kubernetes RBAC 授权。因此,IAM 主体没有与访问条目关联的任何访问策略所分配的权限。IAM 主体伪装的用户或组拥有的唯一 Kubernetes 权限是您在 KubernetesRole
或ClusterRole
对象中授予他们的 Kubernetes 权限,这些权限已绑定到组名称或用户名。要使您的 IAM 主体拥有相关访问策略中的权限,请不要伪装成 Kubernetes 用户或组。IAM 主体仍将拥有您在 KubernetesRole
或ClusterRole
对象中授予他们的任何权限,这些权限已绑定到您为访问条目指定的组名称或用户名。有关更多信息,请参阅 Kubernetes 文档中的用户伪装。
您可以使用 AWS Management Console 或 AWS CLI 将访问策略与访问条目相关联。
AWS Management Console
-
选择具有要与访问策略关联的访问条目的集群的名称。
-
选择访问选项卡。
-
如果访问条目的类型为标准,则可以关联或取消关联 Amazon EKS 访问策略。如果您的访问条目类型不是标准,则此选项不可用。
-
选择关联访问策略。
-
对于策略名称,选择具有您希望 IAM 主体拥有的权限的策略。要查看每个策略包含的权限,请参阅 访问策略权限。
-
对于访问范围,选择一个访问范围。如果选择集群,则访问策略中的权限将授予 IAM 主体访问所有 Kubernetes 命名空间中的资源。如果选择 Kubernetes 命名空间,则可以选择添加新命名空间。在出现的命名空间字段中,您可以输入集群上 Kubernetes 命名空间的名称。如果您希望 IAM 主体拥有跨多个命名空间的权限,则可以输入多个命名空间。
-
选择添加访问策略。
AWS CLI
-
在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面(AWS CLI)的版本
2.12.3
或更高版本,或版本1.27.160
或更高版本。要查看当前版本,请使用aws --version | cut -d / -f2 | cut -d ' ' -f1
。软件包管理器(如yum
、apt-get
或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS 命令行界面用户指南》中的安装和使用 aws configure 快速配置。AWS CloudShell 中安装的 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 || |+---------------------------------------------------------------------+-------------------------------+|
要查看每个策略包含的权限,请参阅 访问策略权限。
-
查看您现有的访问条目。将
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" ] }
-
将访问策略与访问条目关联。以下示例将
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 主体拥有集群上所有命名空间的查看权限,以及对两个 Kubernetes 命名空间的管理员权限。
-
取消访问策略与访问条目的关联。在此示例中,
AmazonEKSAdminPolicy
策略与访问条目取消关联。但是,IAM 主体保留AmazonEKSViewPolicy
访问策略中对my-namespace1
和my-namespace2
命名空间中对象的权限,因为该访问策略并未与访问条目取消关联。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 主体对资源的大部分权限的权限。当与访问条目关联时,其访问范围通常是一个或多个 Kubernetes 命名空间。如果您希望 IAM 主体拥有集群上所有资源的管理员访问权限,请改为将 AmazonEKSClusterAdminPolicyAmazonEKSClusterAdminPolicy 访问策略与您的访问条目相关联。
ARN –
arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminPolicy
Kubernetes API 组 | Kubernetes 资源 | Kubernetes 动词(权限) |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
此访问策略包括授予 IAM 主体对集群的管理员访问权限的权限。当与访问条目关联时,其访问范围通常是集群,而不是 Kubernetes 命名空间。如果您希望 IAM 主体的管理范围更有限,请考虑将 AmazonEKSAdminPolicyAmazonEKSAdminPolicy 访问策略与您的访问条目相关联。
ARN –
arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy
Kubernetes API 组 | Kubernetes 非资源 URL | Kubernetes 资源 | Kubernetes 动词(权限) |
---|---|---|---|
|
|
|
|
|
|
此访问策略包括授予 IAM 主体列出/查看集群中所有资源的权限。请注意,此项包括 Kubernetes 密钥
ARN –
arn:aws:eks::aws:cluster-access-policy/AmazonEKSAdminViewPolicy
Kubernetes API 组 | Kubernetes 资源 | Kubernetes 动词(权限) |
---|---|---|
|
|
|
此访问策略包括允许 IAM 主体编辑大多数 Kubernetes 资源的权限。
ARN –
arn:aws:eks::aws:cluster-access-policy/AmazonEKSEditPolicy
Kubernetes API 组 | Kubernetes 资源 | Kubernetes 动词(权限) |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
此访问策略包括允许 IAM 主体查看大多数 Kubernetes 资源的权限。
ARN –
arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy
Kubernetes API 组 | Kubernetes 资源 | Kubernetes 动词(权限) |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
访问策略更新
查看有关自引入访问策略以来更新的详细信息。要获得有关此页面更改的自动提示,请订阅 文档历史记录 中的 RSS 源。
更改 | 描述 | 日期 |
---|---|---|
添加 |
添加新策略以扩展查看权限,包括 Secrets 等资源。 |
2024 年 4 月 23 日 |
引入访问策略。 |
Amazon EKS 引入访问策略。 |
2023 年 5 月 29 日 |