View a markdown version of this page

亚马逊 EKS 访问入口身份验证 - AWS Batch

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

亚马逊 EKS 访问入口身份验证

Amazon EKS 支持两种机制来授予 IAM 委托人调用集群 Kubernetes API 的权限:传统aws-auth ConfigMap 和更新的访问入口 API 。访问条目向 IAM 委托人授予 Kubernetes API 访问权限,无需您编辑 ConfigMap。 AWS Batch 可以通过任何一种机制向您的集群进行身份验证。

当您在计算环境ENABLED上设置eksConfiguration.accessEntry.desiredState为时, AWS Batch 可以在集群上管理该计算环境的访问入口。您不再需要手动编辑aws-auth ConfigMap。

是否预 AWS Batch 置访问条目取决于您的 AWS Batch 计算环境和您的 Amazon EKS 集群配置。有关详细信息,请参阅与集群的身份验证模式的交互。

访问权限值 Entry.desiredState

上的desiredState字段EksAccessEntry声明了计算环境所需的访问入口状态。有效值为:

ENABLED

AWS Batch 在集群上为计算环境创建一个 AWS Batch-managed 访问条目。 AWS Batch 仅当集群上的所有计算环境都设置为 desiredStateENABLED(有关详细信息,请参见操作方法 AWS Batch 协调计算环境中的 D esiredState)时,才会创建 AWS Batch-managed 访问条目。

DISABLED

AWS Batch 删除集群的 AWS Batch-managed 访问权限条目。 AWS Batch 只有当集群上的所有计算环境都设置为 desiredStateDISABLED(有关详细信息,请参见操作方法 AWS Batch 协调计算环境中的 D esiredState)时,才会删除 AWS Batch-managed 访问条目。必须通过配置对群集的访问权限aws-auth ConfigMap。

INHERIT_FROM_CLUSTER

AWS Batch 延迟到集群的当前访问条目status。在身份验证模式为的 Amazon EKS 集群上API, AWS Batch 创建和管理访问条目,因为该集群没有可aws-auth ConfigMap 回退的权限。在身份验证模式为CONFIG_MAP或的集群上API_AND_CONFIG_MAP, AWS Batch 既不添加也不删除访问条目。

计算环境还在DescribeComputeEnvironments响应中公开了一个只读accessEntry.status字段。ACTIVE表示集群上存在计算环境的 AWS Batch-managed 访问权限条目,优先于。aws-auth ConfigMapINACTIVE表示不存在 AWS Batch-managed 访问条目。这可能是因为desiredState针对集群的计算环境尚未达成共识desiredState,或者因为该条目尚未预置完毕。DISABLED如果accessEntry.status是INACTIVE,则批量使用aws-auth ConfigMap 集群访问。

注意

访问条目ACTIVE一旦存在于集群上就会立即报告,即使 AWS Batch 尚未完成使其可用的访问策略的关联也是如此。如果计算环境状态更改为 wh INVALID ile accessEntry.status isACTIVE,请参阅亚马逊 EKS 访问条目设置不完整。

注意

如果您省略该accessEntry字段,则 AWS Batch 不会desiredState为计算环境记录 a,也DescribeComputeEnvironments不会返回一个。出于配置访问条目的的目的, AWS Batch 其行为与其相同。INHERIT_FROM_CLUSTER

与集群的身份验证模式的交互

给定 AWS Batch 对象的行为方式desiredState取决于集群的身份验证模式。下表适用于CreateComputeEnvironment和UpdateComputeEnvironment。

集群 authenticationMode

计算环境 accessEntry.desiredState=ENABLED

计算环境 accessEntry.desiredState=DISABLED

计算环境 accessEntry.desiredState=INHERIT_FROM_CLUSTER

CONFIG_MAP

访问条目在集群上不可用,因此 AWS Batch 无法创建或删除访问条目。 AWS Batch 仍会记录您指定的值。更改集群的身份验证模式后,该记录的值将在您下次指定的CreateComputeEnvironment或UpdateComputeEnvironment调用时生效desiredState。

API_AND_CONFIG_MAP

AWS Batch 比较共享群集的计算环境中的记录值——请参阅操作方法 AWS Batch 协调计算环境中的 D esiredState。

保留现有访问模式。 AWS Batch 不添加或删除访问条目。

API

访问条目是在集群上创建和维护的。

请求被拒绝。此模式下的集群不支持 aws-auth ConfigMap,并且在创建集群后无法启用该 ConfigMap 方法,因此计算环境DISABLED将无法进行身份验证。

访问条目是在集群上创建和维护的。当集群为 API-only 时,继承等同于。ENABLED

操作方法 AWS Batch 协调计算环境中的 D esiredState

由于单个 Amazon EKS 集群可以支持多个 AWS Batch 计算环境,因此集群的访问配置是一种共享资源。 AWS Batch 因此,协调或比较和解析在这些计算环境中记录的desiredState值。

当集群为时API_AND_CONFIG_MAP, AWS Batch 比较目标群集的同一 AWS 账户和 AWS 区域中每个计算环境的desiredState记录。authenticationMode AWS Batch 使用此比较来确定是添加还是删除每个指定的CreateComputeEnvironment或UpdateComputeEnvironment操作的访问条目desiredState。

每个计算环境都有 desiredState=ENABLED

AWS Batch 在集群上创建访问条目。

每个计算环境都有 desiredState=DISABLED

AWS Batch 如果存在访问条目,则从集群中删除访问条目。

记录的desiredState值并非全部匹配

AWS Batch 保留现有的访问模式。既未添加也未删除访问条目。这包括ENABLEDDISABLED、和的任意组合INHERIT_FROM_CLUSTER,还包括任何未desiredState记录的计算环境。

注意

要将身份验证模式为API_AND_CONFIG_MAP的集群aws-auth ConfigMap 转换为访问入口身份验证,请在每个以该集群为目标的 AWS Batch 计算环境desiredState=ENABLED上进行设置。要向后过渡,请将其中的每一个都设置desiredState=DISABLED为开启。

内容 AWS Batch 在您的集群上创建

AWS Batch 为满足上述条件的每个集群创建一个访问条目,然后将 AWSBatchClusterPolicy Amazon EKS 访问策略与该访问条目相关联。访问条目是针对每个集群而不是每个计算环境的,因此所有以同一集群为目标的 AWS Batch 计算环境共享该条目。

注意

删除计算环境不会删除访问条目,即使它是集群上的最后一个 AWS Batch 计算环境也是如此。要移除 AWS Batch-managed 访问条目,请在删除目标群集的每个 AWS Batch 计算环境之前对其进行调用UpdateComputeEnvironment。desiredState=DISABLED

访问条目本身不足以在集群上运行作业。有关必须自己配置的Kubernetes权限和节点访问权限,请参阅您仍必须提供的集群配置。

所需的权限

AWS Batch 使用调用CreateComputeEnvironment或UpdateComputeEnvironment操作的 IAM 身份的证书管理访问条目。必须允许该身份执行以下亚马逊 EKS 操作:

  • eks:DescribeCluster

  • eks:DescribeAccessEntry

  • eks:CreateAccessEntry

  • eks:AssociateAccessPolicy

  • eks:DeleteAccessEntry

配置访问条目

您可以通过CreateComputeEnvironment或 UpdateComputeEnvironment API 的eksConfiguration.accessEntry字段在计算环境中配置访问条目。

AWS CLI

创建计算环境时启用 AWS Batch-managed 访问权限条目

$ aws batch create-compute-environment \ --compute-environment-name my-eks-ce \ --type MANAGED \ --eks-configuration 'eksClusterArn=arn:aws:eks:us-east-1:123456789012:cluster/my-cluster,kubernetesNamespace=my-aws-batch-namespace,accessEntry={desiredState=ENABLED}' \ --compute-resources 'type=EC2,maxvCpus=128,subnets=subnet-a123456b,securityGroupIds=sg-a12b3456,instanceRole=arn:aws:iam::123456789012:instance-profile/my-node-instance-profile'

在现有计算环境上启用 AWS Batch-managed 访问条目

$ aws batch update-compute-environment \ --compute-environment my-eks-ce \ --eks-configuration 'accessEntry={desiredState=ENABLED}'

检查状态

$ aws batch describe-compute-environments \ --compute-environments my-eks-ce \ --query "computeEnvironments[0].eksConfiguration.accessEntry"

响应包括您指定的和观察到的status:desiredState

{ "desiredState": "ENABLED", "status": "ACTIVE" }
注意

AWS Batch 返回所有 accessEntry.status Amazon EKS 计算环境,并且desiredState仅在您已设置后返回。一个你从未status单独指定accessEntry回报的计算环境。

要停止 AWS Batch 管理访问条目,desiredState请DISABLED改为设置为。在此之前,请查看与集群的身份验证模式的交互:在身份验证模式DISABLED为的集群上被拒绝;在身份验证模式为的集群上,只有在API_AND_CONFIG_MAP将目标集群的每个 AWS Batch 计算环境设置为之后,访问条目才会被删除DISABLED。API

API

在您的CreateComputeEnvironment或UpdateComputeEnvironment请求中使用该eksConfiguration.accessEntry对象。

使用 AWS Batch-managed 访问条目创建计算环境

accessEntry在请求正文中包括:

{ "computeEnvironmentName": "my-eks-ce", "type": "MANAGED", "state": "ENABLED", "eksConfiguration": { "eksClusterArn": "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster", "kubernetesNamespace": "my-aws-batch-namespace", "accessEntry": { "desiredState": "ENABLED" } }, "computeResources": { "type": "EC2", "maxvCpus": 128, "subnets": ["subnet-a123456b"], "securityGroupIds": ["sg-a12b3456"], "instanceRole": "arn:aws:iam::123456789012:instance-profile/my-node-instance-profile" } }

更新现有计算环境的访问条目

{ "computeEnvironment": "my-eks-ce", "eksConfiguration": { "accessEntry": { "desiredState": "ENABLED" } } }

有关更多信息 EksAccessEntry,请参阅 AWS Batch API 参考UpdateComputeEnvironment中的CreateComputeEnvironment、和。

您仍必须提供的集群配置

访问条目仅控制如何对您的集群 AWS Batch 进行身份验证。它不授 AWS Batch 予运行任务所需的Kubernetes权限,也不允许 AWS Batch 启动的实例加入集群。无论使用哪种身份验证机制,仍必须配置以下两项。

重要

在群集上为 AWS Batch 服务相关角色创建 AWS Batch-managed 访问权限条目后 (accessEntry.status=ACTIVE),其优先级将高于该角色的aws-auth ConfigMap 配置。 AWS Batch 服务相关角色的 ConfigMap 条目未使用,而是使用访问条目 AWS Batch 进行身份验证。要返回 ConfigMap 身份验证,请在所有以群集为目标的计算环境desiredState=DISABLED上进行设置。这将删除 AWS Batch-managed 访问条目。

Kubernetes AWS Batch 命名空间的权限

AWS Batch 需要Kubernetes权限才能在你指定的命名空间中创建和管理 pod eksConfiguration.kubernetesNamespace。创建命名空间,然后根据您的身份验证方法使用以下方法之一配置这些权限:

  • 访问策略关联(访问权限输入时为必填项status=ACTIVE)-当您在所有以集群为目标的计算环境desiredState=ENABLED上设置时,将 AWS Batch 创建集群AWSBatchClusterPolicy级别的访问条目。然后,你必须关联命名空间范围AWSBatchNamespacePolicy以授予创建和管理 pod 的 AWS Batch 权限。

    访问条目到达后status=ACTIVE,使用以下方法关联命名空间策略 AWS CLI:

    $ aws eks associate-access-policy \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AWSBatchNamespacePolicy \ --access-scope type=namespace,namespaces=my-aws-batch-namespace

    my-aws-batch-namespace用您在中指定的值替换eksConfiguration.kubernetesNamespace。

    重要

    如果没有命名空间范围的策略关联,作业将保持状态。RUNNABLE单独的集群级策略并不能授予 Pod 管理权限。

  • Kubernetes角色和角色绑定(访问权限进入时status=INACTIVE)-如果 AWS Batch-managed 访问条目处于非活动状态,请创建授予这些权限的Kubernetes角色和角色绑定,如中所述。第 2 步:为 Amazon EKS 集群做好准备 AWS Batch您可以为每个集群执行一次此操作。

    注意

    当 AWS Batch-managed 访问条目处于活动状态 (status=ACTIVE) 时,将绕Kubernetes过 RBAC 角色。您必须改用访问策略关联方法。

AWS Batch 不会为您创建这些资源, AWS Batch-managed 访问权限条目也不能替代它们。如果缺少它们,在任务无法启动VALID时,计算环境仍然会变成。

节点实例角色的集群访问权限

AWS Batch 启动的实例使用您在中指定的实例配置文件加入集群computeResources.instanceRole。该角色需要自己的集群访问权限,该访问权限与 AWS Batch-managed 访问权限条目分开且 AWS Batch 不进行配置。

配置方法取决于您的集群的authenticationMode:

  • 在位authenticationMode于 CONFIG_MAP — 的集群上,必须使用aws-auth ConfigMap。这些集群不支持访问条目。

  • 在其 authenticationMode is 的集群上 API_AND_CONFIG_MAP — 节点实例角色可以使用aws-auth ConfigMap 或访问条目进行身份验证。如果实例角色已映射到中 ConfigMap,则节点将成功加入,而无需为该角色创建访问条目。

  • 在其 authenticationMode is 的集群上 API — 必须为节点实例角色创建访问条目。不aws-auth ConfigMap 用于在这些集群上进行身份验证。

要为节点实例角色创建访问条目,请使用 AWS CLI:

$ aws eks create-access-entry \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/my-node-instance-role \ --type EC2_LINUX
$ aws eks associate-access-policy \ --cluster-name my-cluster \ --principal-arn arn:aws:iam::123456789012:role/my-node-instance-role \ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSWorkerNodePolicy \ --access-scope type=cluster

有关更多信息,请参阅 Amazon EKS 用户指南中的创建访问条目。

重要

如果节点实例角色没有适当的集群访问权限,EC2 实例将无法加入集群。由于集群中没有容量注册,作业将保持该RUNNABLE状态。

在 aws-auth ConfigMap 和访问条目之间进行选择

访问入口身份验证是 Amaz AWS Batch on EKS 计算环境新手的推荐路径,它具有以下优点:

  • 无需手动编辑即可授予aws-auth ConfigMap 对集群的 AWS Batch 访问权限。

  • 提供可审计的有权访问集群的主体 API-driven 记录。

  • 对于不支持 authenticationMode is API 的集群来说是必需的aws-auth ConfigMap。

如果您的集群authenticationMode是CONFIG_MAP,则访问条目不可用,需要通过 AWS Batch 进行身份验证。aws-auth ConfigMap有关说明,请参阅验证 aws-auth ConfigMap 配置是否正确。