将访问策略与访问条目关联起来 - Amazon EKS

将访问策略与访问条目关联起来

您可以为类型STANDARD访问条目分配一个或多个访问策略。Amazon EKS 会自动向其他类型的访问条目授予在您的集群中正常运行所需的权限。Amazon EKS 访问策略包含 Kubernetes 权限,但不包含 IAM 权限。在将访问策略关联到访问条目之前,请确保您熟悉每个访问策略中包含的 Kubernetes 权限。有关更多信息,请参阅 访问策略权限。如果所有访问策略都不符合您的要求,则不要将访问策略与访问条目相关联。而是为访问条目指定一个或多个组名称,然后创建和管理 Kubernetes 基于角色的访问控制对象。有关更多信息,请参阅 创建访问条目

  • 现有的访问条目。要创建该文件,请参阅 创建访问条目

  • 具有以下权限的 AWS Identity and Access Management 角色或用户:ListAccessEntriesDescribeAccessEntryUpdateAccessEntryListAccessPoliciesAssociateAccessPolicyDisassociateAccessPolicy。有关更多信息,请参阅《服务授权参考》中的 Amazon Elastic Kubernetes Service 定义的操作

在将访问策略与访问条目关联之前,请考虑以下要求:

  • 您可以将多个访问策略关联到每个访问条目,但只能将每个策略与一个访问条目关联一次。如果您关联多个访问策略,则访问条目的 IAM 主体拥有所有关联访问策略中包含的所有权限。

  • 您可以将访问策略的范围限定为集群上的所有资源,也可以指定一个或多个 Kubernetes 命名空间的名称。您可以为命名空间名称使用通配符。例如,如果要将访问策略的范围限定为以 dev- 开头的所有命名空间,则可以指定 dev-* 为命名空间名称。请确保您的集群上存在命名空间,并且拼写与集群上的实际命名空间名称相匹配。Amazon EKS 不会确认您的集群上命名空间的拼写或是否存在。

  • 将访问策略与访问条目关联后,您可以更改访问策略的访问范围。如果您已将访问策略的范围限定为 Kubernetes 命名空间,则可以根据需要为关联添加和移除命名空间。

  • 如果您将访问策略关联到同时指定了组名称的访问条目,则 IAM 主体拥有所有关联访问策略中的所有权限。该主体还拥有在指定组名称的任何 Kubernetes RoleRoleBinding 对象中指定的任何 Kubernetes RoleClusterRole 对象中的所有权限。

  • 如果您运行 kubectl auth can-i --list 命令,则不会看到访问策略分配的任何 Kubernetes 权限,这些权限与您在运行命令时使用的 IAM 主体的访问条目相关联。只有在您已经在 Kubernetes RoleClusterRole 对象中授予了 Kubernetes 权限,并且已经将这些权限绑定到为访问条目指定的组名称或用户名时,该命令才会显示这些权限。

  • 如果您在与集群上的 Kubernetes 对象交互时伪装成 Kubernetes 用户或组,例如使用带 --as username --as-group group-name kubectl 命令,则表示您强制使用 Kubernetes RBAC 授权。因此,IAM 主体没有与访问条目关联的任何访问策略所分配的权限。IAM 主体伪装的用户或组拥有的唯一 Kubernetes 权限是您在 Kubernetes RoleClusterRole 对象中授予他们的 Kubernetes 权限,这些权限已绑定到组名称或用户名。要使您的 IAM 主体拥有相关访问策略中的权限,请不要伪装成 Kubernetes 用户或组。IAM 主体仍将拥有您在 Kubernetes RoleClusterRole 对象中授予他们的任何权限,这些权限已绑定到您为访问条目指定的组名称或用户名。有关更多信息,请参阅 Kubernetes 文档中的用户伪装

您可以使用 AWS Management Console 或 AWS CLI 将访问策略与访问条目相关联。

AWS Management Console

  1. 打开 Amazon EKS console 控制台

  2. 选择具有要与访问策略关联的访问条目的集群的名称。

  3. 选择访问选项卡。

  4. 如果访问条目的类型为标准,则可以关联或取消关联 Amazon EKS 访问策略。如果您的访问条目类型不是标准,则此选项不可用。

  5. 选择关联访问策略

  6. 对于策略名称,选择具有您希望 IAM 主体拥有的权限的策略。要查看每个策略包含的权限,请参阅 访问策略权限

  7. 对于访问范围,选择一个访问范围。如果选择集群,则访问策略中的权限将授予 IAM 主体访问所有 Kubernetes 命名空间中的资源。如果选择 Kubernetes 命名空间,则可以选择添加新命名空间。在出现的命名空间字段中,您可以输入集群上 Kubernetes 命名空间的名称。如果您希望 IAM 主体拥有跨多个命名空间的权限,则可以输入多个命名空间。

  8. 选择添加访问策略

AWS CLI

  1. 在您的设备或 AWS CloudShell 上安装和配置 AWS 命令行界面(AWS CLI)的版本 2.12.3 或更高版本,或版本 1.27.160 或更高版本。要查看当前版本,请使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。软件包管理器(如 yumapt-get 或适用于 macOS 的 Homebrew)通常比 AWS CLI 的最新版本落后几个版本。要安装最新版本,请参阅《AWS 命令行界面用户指南》中的安装使用 aws configure 快速配置。AWS CloudShell 中安装的 AWS CLI 版本也可能比最新版本落后几个版本。要对其进行更新,请参阅《AWS CloudShell 用户指南》中的将 AWS CLI 安装到您的主目录

  2. 查看可用的访问策略。

    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 || |+---------------------------------------------------------------------+-------------------------------+|

    要查看每个策略包含的权限,请参阅 访问策略权限

  3. 查看您现有的访问条目。将 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" ] }
  4. 将访问策略与访问条目关联。以下示例将 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-namespace2 替换为 type=cluster。如果要将多个访问策略关联到访问条目,请多次运行该命令,每个访问条目都有唯一的访问策略。每个关联的访问策略都有自己的范围。

    注意

    如果以后要更改关联访问策略的范围,请使用新的范围再次运行前面的命令。例如,如果您想移除 my-namespace2,则只能使用 type=namespace,namespaces=my-namespace1 再次运行该命令。如果要将范围从 namespace 更改为 cluster,则可以使用 type=cluster 再次运行该命令并移除 type=namespace,namespaces=my-namespace1,my-namespace2

  5. 确定哪些访问策略与访问条目关联。

    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 命名空间的管理员权限。

  6. 取消访问策略与访问条目的关联。在此示例中,AmazonEKSAdminPolicy 策略与访问条目取消关联。但是,IAM 主体保留 AmazonEKSViewPolicy 访问策略中对 my-namespace1my-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(权限)和 resourcesrules。访问策略不包括 IAM 权限或资源。与 Kubernetes RoleClusterRole 对象类似,访问策略仅包括 allow rules。您无法修改访问策略的内容。您无法创建自己的访问策略。如果访问策略中的权限不符合您的需求,请创建 Kubernetes RBAC 对象并为访问条目指定组名称。有关更多信息,请参阅 创建访问条目。访问策略中包含的权限与 Kubernetes 面向用户的集群角色中的权限类似。有关更多信息,请参阅 Kubernetes 文档中的面向用户的角色

选择任意访问策略以查看其内容。每个访问策略中每个表的每一行都是一个单独的规则。

此访问策略包括授予 IAM 主体对资源的大部分权限的权限。当与访问条目关联时,其访问范围通常是一个或多个 Kubernetes 命名空间。如果您希望 IAM 主体拥有集群上所有资源的管理员访问权限,请改为将 AmazonEKSClusterAdminPolicyAmazonEKSClusterAdminPolicy 访问策略与您的访问条目相关联。

ARN arn: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 主体的管理范围更有限,请考虑将 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 动词(权限)

\*

\*

`get, watch``

此访问策略包括允许 IAM 主体编辑大多数 Kubernetes 资源的权限。

ARN arn: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 资源的权限。

ARN arn: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

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

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/statusreplicationcontrollers/statusresourcequotas、resourcequotas/status

get, list, watch

namespaces

get, list, watch

访问策略更新

查看有关自引入访问策略以来更新的详细信息。要获得有关此页面更改的自动提示,请订阅 文档历史记录 中的 RSS 源。

更改 描述 日期

添加 AmazonEKSAdminViewPolicy

添加新策略以扩展查看权限,包括 Secrets 等资源。

2024 年 4 月 23 日

引入访问策略。

Amazon EKS 引入访问策略。

2023 年 5 月 29 日