EKS 访问条目 - Eksctl 用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

EKS 访问条目

您可以使用 eksctl 来管理 EKS 访问条目。使用访问条目向 Kubernetes 授予 AWS IAM 身份的权限。例如,你可以向开发者角色授予读取集群中 Kubernetes 资源的权限。

本主题介绍如何使用 eksctl 管理访问条目。有关访问条目的一般信息,请参阅使用 EK S 访问条目向 IAM 用户授予访问 Kubernetes 的访问权限。

您可以附加 AWS 定义的 Kubernetes 访问策略,也可以将 IAM 身份与 Kubernetes 群组相关联。

有关可用预定义策略的更多信息,请参阅将访问策略与访问条目关联

如果您需要定义客户 Kubernetes 策略,请将 IAM 身份与 Kubernetes 群组关联,然后向该群组授予权限。

集群身份验证模式

只有在集群的身份验证模式允许的情况下,您才能使用访问条目。

有关更多信息,请参阅设置集群身份验证模式

使用 YAML 文件设置身份验证模式

eksctl在下方添加了一个新accessConfig.authenticationMode字段 ClusterConfig,可以将其设置为以下三个值之一:

  • CONFIG_MAP-在 EKS API 中为默认值-只aws-auth ConfigMap 会使用

  • API-将仅使用访问入口 API

  • API_AND_CONFIG_MAP-默认为 eksctl-可以aws-auth ConfigMap 同时使用访问条目 API

在 ClusterConfig YAML 中设置身份验证模式:

accessConfig: authenticationMode: <>

使用命令更新身份验证模式

如果要在已存在的、非 eksctl 创建的集群上使用访问条目(其中使用了CONFIG_MAP选项),则用户需要先将其设置为。authenticationMode API_AND_CONFIG_MAP为此,引入eksctl了一个用于更新集群身份验证模式的新命令,该命令均适用于 CLI 标志,例如

eksctl utils update-authentication-mode --cluster my-cluster --authentication-mode API_AND_CONFIG_MAP

访问参赛资源

访问条目的类型为,例如STANDARDEC2_LINUX。类型取决于您使用访问权限条目的方式。

  • standard类型用于向 IAM 用户和 IAM 角色授予 Kubernetes 权限。

    • 例如,您可以通过将访问策略附加到用于访问控制台的角色或用户来查看 AWS 控制台中的 Kubernetes 资源。

  • EC2_LINUXEC2_WINDOWS类型用于向实例授予 Kubernetes 权限。 EC2 实例使用这些权限加入集群。

有关访问条目类型的更多信息,请参阅创建访问条目

IAM 实体

您可以使用访问权限条目向 IAM 用户和 IAM 角色等 IAM 身份授予 Kubernetes 权限。

使用该accessConfig.accessEntries字段将 IAM 资源的 ARN 与访问条目 EKS API 关联。例如:

accessConfig: authenticationMode: API_AND_CONFIG_MAP accessEntries: - principalARN: arn:aws:iam::111122223333:user/my-user-name type: STANDARD kubernetesGroups: # optional Kubernetes groups - group1 # groups can used to give permissions via RBAC - group2 - principalARN: arn:aws:iam::111122223333:role/role-name-1 accessPolicies: # optional access polices - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSViewPolicy accessScope: type: namespace namespaces: - default - my-namespace - dev-* - principalARN: arn:aws:iam::111122223333:role/admin-role accessPolicies: # optional access polices - policyARN: arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy accessScope: type: cluster - principalARN: arn:aws:iam::111122223333:role/role-name-2 type: EC2_LINUX

除了关联 EKS 策略外,还可以指定 IAM 实体所属的 Kubernetes 组,从而通过 RBAC 授予权限。

托管节点组和 Fargate

将通过 EKS API 在幕后实现与这些资源的访问条目的集成。新创建的托管节点组和 Fargate 容器将创建 API 访问条目,而不是使用预加载的 RBAC 资源。现有的节点组和 Fargate 容器将不会更改,并且会继续依赖于 aws-auth 配置映射中的条目。

自我管理的节点组

每个访问条目都有一种类型。为了授权自我管理的节点组,eksctl将为每个节点组创建一个唯一的访问条目,并将主体 ARN 设置为节点角色 ARN,类型设置为任一或取决于节点组 amiFamily。EC2_LINUX EC2_WINDOWS

在创建自己的访问条目时,您还可以指定EC2_LINUX(用于与 Linux 或 Bottlerocket 自管理节点一起使用的 IAM 角色)、EC2_WINDOWS(用于与 Windows 自管理节点一起使用的 IAM 角色)、FARGATE_LINUX(用于与 AWS Fargate(Fargate)一起使用的 IAM 角色)或指定为类型。STANDARD如果未指定类型,则默认类型将设置为STANDARD

注意

删除使用预先存在的节点组创建的节点组时instanceRoleARN,当不再有与之关联的节点组时,用户有责任删除相应的访问条目。这是因为 eksctl 不会尝试找出非 eksctl 创建的自管理节点组是否仍在使用访问条目,因为这是一个复杂的过程。

创建访问条目

这可以通过两种不同的方式完成,一种是在创建集群期间,在配置文件中指定所需的访问条目并运行:

eksctl create cluster -f config.yaml

或者在创建集群后,运行以下命令:

eksctl create accessentry -f config.yaml

有关创建访问条目的配置文件示例,请参阅 eksctl 存储库中的 40-access-entries.yaml。 GitHub

获取访问权限

用户可以通过运行以下命令之一来检索与某个集群关联的所有访问条目:

eksctl get accessentry -f config.yaml

eksctl get accessentry --cluster my-cluster

或者,要仅检索与某个 IAM 实体相对应的访问条目,则应使用--principal-arn标志。例如

eksctl get accessentry --cluster my-cluster --principal-arn arn:aws:iam::111122223333:user/admin

删除访问条目

要一次删除单个访问条目,请使用:

eksctl delete accessentry --cluster my-cluster --principal-arn arn:aws:iam::111122223333:user/admin

要删除多个访问条目,请使用--config-file标志并在顶级accessEntry字段下指定所有与访问条目principalARN’s对应的条目,例如

... accessEntry: - principalARN: arn:aws:iam::111122223333:user/my-user-name - principalARN: arn:aws:iam::111122223333:role/role-name-1 - principalARN: arn:aws:iam::111122223333:role/admin-role
eksctl delete accessentry -f config.yaml

从 aws-auth 迁移 ConfigMap

用户可以通过运行以下命令将其现有的 IAM 身份从 aws-auth configmap 迁移到访问条目:

eksctl utils migrate-to-access-entry --cluster my-cluster --target-authentication-mode <API or API_AND_CONFIG_MAP>

--target-authentication-mode标志设置为时API,身份验证模式将切换到API模式(如果已处于API模式则跳过),IAM 身份映射将迁移到访问条目,并从集群中删除 aws-auth configmap。

--target-authentication-mode标志设置为时API_AND_CONFIG_MAP,身份验证模式将切换到模式(如果已API_AND_CONFIG_MAP处于API_AND_CONFIG_MAP模式则跳过),IAM 身份映射将迁移到访问条目,但会保留 aws-auth configmap。

注意

当 f --target-authentication-mode lag 设置为时API,如果 aws-auth configmap 具有以下限制之一,则此命令不会将身份验证API模式更新为模式。

  • 有一个账户级别的身份映射。

  • 一个或多个 Roles/Users 被映射到以前缀开头的 kubernetes 组system:(EKS 特定的群组除外 system:masterssystem:bootstrapperssystem:nodes例如等)。

  • 一个或多个 IAM 身份映射用于 [服务关联角色](链接:IAM/latest/UserGuide/using-service-linked-roles .html)。

禁用集群创建者管理员权限

eksctl添加了一个新字段,当设置为 false 时,accessConfig.bootstrapClusterCreatorAdminPermissions: boolean该字段将禁止向创建集群的 IAM 身份授予集群管理员权限。即

在配置文件中添加选项:

accessConfig:
  bootstrapClusterCreatorAdminPermissions: false

然后运行:

eksctl create cluster -f config.yaml