

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

# 亚马逊 EKS 访问入口身份验证
<a name="eks-access-entries"></a>

Amazon EKS 支持两种机制来授予 IAM 委托人调用集群 Kubernetes API 的权限：传统`aws-auth` ConfigMap 和更新的[访问入口 API ](https://docs.aws.amazon.com/eks/latest/userguide/access-entries.html)。访问条目向 IAM 委托人授予 Kubernetes API 访问权限，无需您编辑 ConfigMap。 AWS Batch 可以通过任何一种机制向您的集群进行身份验证。

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

是否预 AWS Batch 置访问条目取决于您的 AWS Batch 计算环境和您的 Amazon EKS 集群配置。有关详细信息，请参阅[与集群的`身份验证模式的交互`](#eks-access-entries-matrix)。

## `访问权限值 Entry.desiredState`
<a name="eks-access-entries-desired-state"></a>

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

`ENABLED`  
AWS Batch 在集群上为计算环境创建一个 AWS Batch-managed 访问条目。 AWS Batch 仅当集群上的所有计算环境都设置为 `desiredState``ENABLED`（有关详细信息，请参见[操作方法 AWS Batch 协调计算环境中的 D `esiredState`](#eks-access-entries-reconciliation)）时，才会创建 AWS Batch-managed 访问条目。

`DISABLED`  
AWS Batch 删除集群的 AWS Batch-managed 访问权限条目。 AWS Batch 只有当集群上的所有计算环境都设置为 `desiredState``DISABLED`（有关详细信息，请参见[操作方法 AWS Batch 协调计算环境中的 D `esiredState`](#eks-access-entries-reconciliation)）时，才会删除 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](https://docs.aws.amazon.com/batch/latest/APIReference/API_DescribeComputeEnvironments.html)响应中公开了一个只读`accessEntry.status`字段。`ACTIVE`表示集群上存在计算环境的 AWS Batch-managed 访问权限条目，优先于。`aws-auth` ConfigMap`INACTIVE`表示不存在 AWS Batch-managed 访问条目。这可能是因为`desiredState`针对集群的计算环境尚未达成共识`desiredState`，或者因为该条目尚未预置完毕。`DISABLED`如果`accessEntry.status`是`INACTIVE`，则批量使用`aws-auth` ConfigMap 集群访问。

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

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

## 与集群的`身份验证模式的交互`
<a name="eks-access-entries-matrix"></a>

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


<table>
<thead>
  <tr><th>集群 <code>authenticationMode</code></th><th>计算环境 <code>accessEntry.desiredState=ENABLED</code></th><th>计算环境 <code>accessEntry.desiredState=DISABLED</code></th><th>计算环境 <code>accessEntry.desiredState=INHERIT_FROM_CLUSTER</code></th></tr>
</thead>
<tbody>
  <tr><td><code>CONFIG_MAP</code></td><td colspan="3">访问条目在集群上不可用，因此 AWS Batch 无法创建或删除访问条目。 AWS Batch 仍会记录您指定的值。更改集群的身份验证模式后，该记录的值将在您下次指定的<code>CreateComputeEnvironment</code>或<code>UpdateComputeEnvironment</code>调用时生效<code>desiredState</code>。</td></tr>
  <tr><td><code>API_AND_CONFIG_MAP</code></td><td colspan="2">AWS Batch 比较共享群集的计算环境中的记录值——请参阅<a href="#eks-access-entries-reconciliation">操作方法 AWS Batch 协调计算环境中的 D `esiredState`</a>。</td><td>保留现有访问模式。 AWS Batch 不添加或删除访问条目。</td></tr>
  <tr><td><code>API</code></td><td>访问条目是在集群上创建和维护的。</td><td>请求被拒绝。此模式下的集群不支持 <code>aws-auth</code> ConfigMap，并且在创建集群后无法启用该 ConfigMap 方法，因此计算环境<code>DISABLED</code>将无法进行身份验证。</td><td>访问条目是在集群上创建和维护的。当集群为 <code>API</code>-only 时，继承等同于。<code>ENABLED</code></td></tr>
</tbody>
</table>


## 操作方法 AWS Batch 协调计算环境中的 D `esiredState`
<a name="eks-access-entries-reconciliation"></a>

由于单个 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 保留现有的访问模式。既未添加也未删除访问条目。这包括`ENABLED``DISABLED`、和的任意组合`INHERIT_FROM_CLUSTER`，还包括任何未`desiredState`记录的计算环境。

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

## 内容 AWS Batch 在您的集群上创建
<a name="eks-access-entries-what-batch-creates"></a>

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

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

访问条目本身不足以在集群上运行作业。有关必须自己配置的Kubernetes权限和节点访问权限，请参阅[您仍必须提供的集群配置](#eks-access-entries-additional-configuration)。

## 所需的权限
<a name="eks-access-entries-permissions"></a>

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

## 配置访问条目
<a name="eks-access-entries-configure"></a>

您可以通过[CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html)或 [ UpdateComputeEnvironment ](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html) 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`改为设置为。在此之前，请查看[与集群的`身份验证模式的交互`](#eks-access-entries-matrix)：在身份验证模式`DISABLED`为的集群上被拒绝；在身份验证模式为的集群上，只有在`API_AND_CONFIG_MAP`将目标集群的每个 AWS Batch 计算环境设置为之后，访问条目才会被删除`DISABLED`。`API`

------
#### [ API ]

在您的[CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html)或[UpdateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html)请求中使用该`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`](https://docs.aws.amazon.com/batch/latest/APIReference/API_EksAccessEntry.html)，请参阅 *AWS Batch API 参考[UpdateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_UpdateComputeEnvironment.html)中的[CreateComputeEnvironment](https://docs.aws.amazon.com/batch/latest/APIReference/API_CreateComputeEnvironment.html)、和*。

------

## 您仍必须提供的集群配置
<a name="eks-access-entries-additional-configuration"></a>

访问条目仅控制如何对您的集群 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](getting-started-eks.md#getting-started-eks-step-1)您可以为每个集群执行一次此操作。
**注意**  
当 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 用户指南[中的](https://docs.aws.amazon.com/eks/latest/userguide/creating-access-entries.html)创建访问条目**。  
如果节点实例角色没有适当的集群访问权限，EC2 实例将无法加入集群。由于集群中没有容量注册，作业将保持该`RUNNABLE`状态。

## 在 `aws-auth` ConfigMap 和访问条目之间进行选择
<a name="eks-access-entries-choosing"></a>

访问入口身份验证是 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` 配置是否正确](verify-configmap-config.md)。