

 **帮助改进此页面** 

要帮助改进本用户指南，请选择位于每个页面右侧窗格中的**在 GitHub 上编辑此页面**链接。

# 准备用于混合节点的凭证
<a name="hybrid-nodes-creds"></a>

Amazon EKS 混合节点功能使用由 AWS SSM 混合激活或 AWS IAM Roles Anywhere 预置的临时 IAM 凭证，来进行 Amazon EKS 集群身份验证。您必须使用 AWS SSM 混合激活，或将 AWS IAM Roles Anywhere 与 Amazon EKS 混合节点功能 CLI (`nodeadm`) 配合使用。您不应同时使用 AWS SSM 混合激活和 AWS IAM Roles Anywhere。如果您没有具有证书颁发机构（CA）的现有公钥基础设施（PKI）和本地环境的证书，我们建议您使用 AWS SSM 混合激活。如果您在确实具有现有的 PKI 和本地证书，请使用 AWS IAM Roles Anywhere。

## 混合节点 IAM 角色
<a name="hybrid-nodes-role"></a>

您必须首先为您的混合节点凭证创建一个将与 AWS SSM 混合激活或 AWS IAM Roles Anywhere 结合使用的 IAM 角色，然后才能将混合节点连接到 Amazon EKS 集群。创建集群后，您将使用此角色和某个 Amazon EKS 访问条目或 `aws-auth` ConfigMap 条目，来将该 IAM 角色映射到 Kubernetes 基于角色的访问控制（RBAC）。有关将混合节点 IAM 角色与 Kubernetes RBAC 关联的更多信息，请参阅[准备混合节点的集群访问权限](hybrid-nodes-cluster-prep.md)。

混合节点 IAM 角色必须具有以下权限。
+ 需为 `nodeadm` 配置权限，使其能够调用 `eks:DescribeCluster` 操作，以获取待接入混合节点的目标集群相关信息。若未启用 `eks:DescribeCluster` 操作权限，则必须在传入 `nodeadm init` 命令的节点配置中，手动指定 Kubernetes API 端点、集群 CA 证书包以及服务 IPv4 CIDR。
+ 需为 `nodeadm` 配置权限，使其能够调用 `eks:ListAccessEntries` 操作，以列出待接入混合节点的目标集群中的访问条目。若未启用 `eks:ListAccessEntries` 操作权限，则在执行 `nodeadm init` 命令时，必须传入 `--skip cluster-access-validation` 标记。
+ 如 [AmazonEC2ContainerRegistryPullOnly](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonEC2ContainerRegistryPullOnly.html) 策略所定义，kubelet 使用来自 Amazon Elastic Container Registry（Amazon ECR）的容器映像的权限。
+ 如果使用 AWS SSM，则需要 `nodeadm init` 的权限以使用 [https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html) 策略中定义的 AWS SSM 混合激活。
+ 如果使用 AWS SSM，则为使用 `nodeadm uninstall` 的 `ssm:DeregisterManagedInstance` 操作和 `ssm:DescribeInstanceInformation` 操作注销实例的权限。
+ （可选）Amazon EKS 容器组身份代理使用 `eks-auth:AssumeRoleForPodIdentity` 操作检索容器组凭证的权限。

## 设置 AWS SSM 混合激活
<a name="hybrid-nodes-ssm"></a>

必须首先创建并配置一个混合节点 IAM 角色，然后才能设置 AWS SSM 混合激活。有关更多信息，请参阅 [创建混合节点 IAM 角色](#hybrid-nodes-create-role)。按照《AWS Systems Manager 用户指南》中[创建混合激活以将节点注册到 Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/hybrid-activation-managed-nodes.html) 部分的说明，为您的混合节点创建一个 AWS SSM 混合激活。将主机作为混合节点注册到 Amazon EKS 集群时，您收到的激活码和 ID 将与 `nodeadm` 结合使用。在为混合节点创建并准备好了 Amazon EKS 集群后，您可以稍后再回到此步骤。

**重要**  
根据您创建激活的方式，Systems Manager 立即将激活码和 ID 返回到控制台或命令窗口。复制此信息并将其存储在安全位置。如果您离开该控制台或关闭命令窗口，可能会丢失此信息。如果您丢失对应信息，则必须创建一个新激活。

默认情况下，AWS SSM 混合激活会处于活动状态 24 小时。您也可以用时间戳格式（例如 `2024-08-01T00:00:00`）来指定 `--expiration-date` 何时创建混合激活。当凭证提供者为 AWS SSM 时，混合节点的节点名称将不可配置，而是由 AWS SSM 自动生成的。您可以在 AWS Systems Manager 控制台中的 Fleet Manager 下查看和管理 AWS SSM 托管式实例。每个账户在每个 AWS 区域最多可以免费注册 1000 个标准[混合激活节点](https://docs.aws.amazon.com/systems-manager/latest/userguide/activations.html)。但是，注册超过 1000 个混合节点需要激活高级实例套餐。使用高级实例套餐将会产生费用，并且该费用未包含在 [Amazon EKS 混合节点功能](https://aws.amazon.com/eks/pricing/)定价中。有关更多信息，请参阅 [AWS Systems Manager 定价](https://aws.amazon.com/systems-manager/pricing/)。

请参阅以下示例，了解如何使用混合节点 IAM 角色创建 AWS SSM 混合激活。将 AWS SSM 混合激活作为混合节点凭证使用时，混合节点名称的格式将为 `mi-012345678abcdefgh`，AWS SSM 预置的临时凭证有效期为 1 小时。当凭证提供者为 AWS SSM 时，您无法更改节点名称或凭证有效期。临时凭证将由 AWS SSM 自动轮换，但此轮换不会影响节点或应用程序的状态。

我们建议您为每个 EKS 集群使用一个 AWS SSM 混合激活来限制混合节点 IAM 角色的 AWS SSM `ssm:DeregisterManagedInstance` 权限，使其只能注销与您的 AWS SSM 混合激活关联的实例。本页中的示例使用了一个具有 EKS 集群 ARN 的标签，该标签可用于将您的 AWS SSM 混合激活映射到该 EKS 集群。您也可以根据自己的权限边界和要求，使用自己偏好的标签和方法来确定 AWS SSM 权限的范围。以下命令中的 `REGISTRATION_LIMIT` 选项是一个整型，用于限制可以使用 AWS SSM 混合激活的计算机数量（例如 `10`）

```
aws ssm create-activation \
     --region AWS_REGION \
     --default-instance-name eks-hybrid-nodes \
     --description "Activation for EKS hybrid nodes" \
     --iam-role AmazonEKSHybridNodesRole \
     --tags Key=EKSClusterARN,Value=arn:aws:eks:AWS_REGION:AWS_ACCOUNT_ID:cluster/CLUSTER_NAME \
     --registration-limit REGISTRATION_LIMIT
```

请参阅[创建混合激活以将节点注册到 Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/hybrid-activation-managed-nodes.html) 部分的说明，以详细了解有关 AWS SSM 混合激活的可用配置设置。

## 设置 AWS IAM Roles Anywhere
<a name="hybrid-nodes-iam-roles-anywhere"></a>

按照《IAM Roles Anywhere 用户指南》中 [Getting started with IAM Roles Anywhere](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/getting-started.html) 部分的说明，设置将用作混合节点 IAM 角色的临时 IAM 凭证的信任锚和配置文件。创建配置文件时，您可以仅创建配置文件而不添加任何角色。您可以首先创建此配置文件，然后返回这些步骤来创建混合节点 IAM 角色，最后再将创建的角色添加到您的配置文件。您也可以使用本页后面的 AWS CloudFormation 步骤来完成混合节点的 IAM Roles Anywhere 设置。

将混合节点 IAM 角色添加到配置文件时，请在 AWS IAM Roles Anywhere 控制台中**编辑配置文件**页面底部的**自定义角色**会话名称面板中，选择**接受自定义角色会话名称**。这对应于 `CreateProfile` API 的 [acceptRoleSessionName](https://docs.aws.amazon.com/rolesanywhere/latest/APIReference/API_CreateProfile.html#rolesanywhere-CreateProfile-request-acceptRoleSessionName) 字段。选择此选项后，您可以在引导阶段传递到 `nodeadm` 的配置中为混合节点提供自定义节点名称。在 `nodeadm init` 过程中必须传递一个自定义节点名称。创建配置文件后，您可以通过更新配置文件来接受自定义角色会话名称。

您可以通过 AWS IAM Roles Anywhere 配置文件的 [durationSeconds](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/authentication-create-session#credentials-object) 字段，来配置 AWS IAM Roles Anywhere 的凭证有效期。默认有效期为 1 小时，最长可为 12 小时。混合节点 IAM 角色的 `MaxSessionDuration` 设置必须大于 AWS IAM Roles Anywhere 配置文件中的 `durationSeconds` 设置。有关 `MaxSessionDuration` 的更多信息，请参阅 [UpdateRole API 文档](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_UpdateRole.html)。

您通过证书颁发机构（CA）为每台计算机生成的证书和密钥必须放置在每个混合节点的 `/etc/iam/pki` 目录中，并且证书的文件名必须为 `server.pem`，密钥的文件名必须为 `server.key`。

## 创建混合节点 IAM 角色
<a name="hybrid-nodes-create-role"></a>

要运行本节中的步骤，使用 AWS 控制台或 AWS CLI 的 IAM 主体必须具有以下权限。
+  `iam:CreatePolicy` 
+  `iam:CreateRole` 
+  `iam:AttachRolePolicy` 
+ 如果使用的是 AWS IAM Roles Anywhere
  +  `rolesanywhere:CreateTrustAnchor` 
  +  `rolesanywhere:CreateProfile` 
  +  `iam:PassRole` 

### AWS CloudFormation
<a name="hybrid-nodes-creds-cloudformation"></a>

安装并配置 AWS CLI（如果尚未执行此操作）。请参阅[安装或更新到最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

 **AWS SSM 混合激活的步骤** 

CloudFormation 堆栈将创建具有上述权限的混合节点 IAM 角色。CloudFormation 模板不会创建 AWS SSM 混合激活。

1. 下载适用于混合节点的 AWS SSM CloudFormation 模板：

   ```
   curl -OL 'https://raw.githubusercontent.com/aws/eks-hybrid/refs/heads/main/example/hybrid-ssm-cfn.yaml'
   ```

1. 使用以下选项创建 `cfn-ssm-parameters.json`：

   1. 将 `ROLE_NAME` 替换为混合节点 IAM 角色的名称。如果您未指定名称，则默认情况下 CloudFormation 模板将使用 `AmazonEKSHybridNodesRole` 作为其创建的角色的名称。

   1. 请将 `TAG_KEY` 替换为您在创建 AWS SSM 混合激活时使用的 AWS SSM 资源标签键。在条件中使用标签键和标签值组合，从而让 `ssm:DeregisterManagedInstance` 仅允许混合节点 IAM 角色注销与您的 AWS SSM 混合激活关联的 AWS SSM 托管式实例。在 CloudFormation 模板中，`TAG_KEY` 默认为 `EKSClusterARN`。

   1. 请将 `TAG_VALUE` 替换为您在创建 AWS SSM 混合激活时使用的 AWS SSM 资源标签值。在条件中使用标签键和标签值组合，从而让 `ssm:DeregisterManagedInstance` 仅允许混合节点 IAM 角色注销与您的 AWS SSM 混合激活关联的 AWS SSM 托管式实例。如果您使用 `EKSClusterARN` 的默认值 `TAG_KEY`，则请将 EKS 集群 ARN 传递为 `TAG_VALUE`。EKS 集群 ARN 的格式为 ` arn:aws:eks:AWS_REGION:AWS_ACCOUNT_ID:cluster/CLUSTER_NAME`。

      ```
      {
        "Parameters": {
          "RoleName": "ROLE_NAME",
          "SSMDeregisterConditionTagKey": "TAG_KEY",
          "SSMDeregisterConditionTagValue": "TAG_VALUE"
        }
      }
      ```

1. 部署 CloudFormation 堆栈。请将 `STACK_NAME` 替换 CloudFormation 堆栈的名称。

   ```
   aws cloudformation deploy \
       --stack-name STACK_NAME \
       --template-file hybrid-ssm-cfn.yaml \
       --parameter-overrides file://cfn-ssm-parameters.json \
       --capabilities CAPABILITY_NAMED_IAM
   ```

 **AWS IAM Roles Anywhere 的步骤** 

CloudFormation 堆栈会使用您配置的证书颁发机构（CA）来创建 AWS IAM Roles Anywhere 信任锚，创建 AWS IAM Roles Anywhere 配置文件，并创建具有前文所述权限的混合节点 IAM 角色。

1. 设置证书颁发机构（CA）

   1. 要使用 AWS 私有 CA 资源，请打开 [AWS Private Certificate Authority 控制台](https://console.aws.amazon.com/acm-pca/home)。按照 [AWS Private CA 用户指南](https://docs.aws.amazon.com/privateca/latest/userguide/PcaWelcome.html)中的说明进行操作。

   1. 要使用外部 CA，请按照相关 CA 提供的说明进行操作。您需要在后续步骤中提供证书正文。

   1. 公有 CA 颁发的证书不能用作信任锚。

1. 下载适用于混合节点的 AWS IAM Roles Anywhere CloudFormation 模板

   ```
   curl -OL 'https://raw.githubusercontent.com/aws/eks-hybrid/refs/heads/main/example/hybrid-ira-cfn.yaml'
   ```

1. 使用以下选项创建 `cfn-iamra-parameters.json`：

   1. 将 `ROLE_NAME` 替换为混合节点 IAM 角色的名称。如果您未指定名称，则默认情况下 CloudFormation 模板将使用 `AmazonEKSHybridNodesRole` 作为其创建的角色的名称。

   1. 请将 `CERT_ATTRIBUTE` 替换为用于唯一标识主机的每台计算机的证书属性。使用的证书属性必须与您在将混合节点连接到集群时用于 `nodeadm` 配置的 nodeName 一致。有关更多信息，请参阅[混合节点 `nodeadm` 参考](hybrid-nodes-nodeadm.md)。默认情况下，CloudFormation 模板将 `${aws:PrincipalTag/x509Subject/CN}` 作为 `CERT_ATTRIBUTE`，这将对应于每台计算机的证书的 CN 字段。您也可以将 `$(aws:PrincipalTag/x509SAN/Name/CN}` 传递为您的 `CERT_ATTRIBUTE`。

   1. 请将 `CA_CERT_BODY` 替换为 CA 的证书正文，不带换行符。`CA_CERT_BODY` 必须采用隐私增强邮件（PEM）格式。如果您具有 PEM 格式的 CA 证书，请在将 CA 证书正文放入 `cfn-iamra-parameters.json` 文件之前移除换行符和 BEGIN CERTIFICATE 和 END CERTIFICATE 行。

      ```
      {
        "Parameters": {
          "RoleName": "ROLE_NAME",
          "CertAttributeTrustPolicy": "CERT_ATTRIBUTE",
          "CABundleCert": "CA_CERT_BODY"
        }
      }
      ```

1. 部署 CloudFormation 模板。请将 `STACK_NAME` 替换 CloudFormation 堆栈的名称。

   ```
   aws cloudformation deploy \
       --stack-name STACK_NAME \
       --template-file hybrid-ira-cfn.yaml \
       --parameter-overrides file://cfn-iamra-parameters.json
       --capabilities CAPABILITY_NAMED_IAM
   ```

### AWS CLI
<a name="hybrid-nodes-creds-awscli"></a>

安装并配置 AWS CLI（如果尚未执行此操作）。请参阅[安装或更新到最新版本的 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)。

 **创建 EKS 描述集群策略** 

1. 使用以下内容创建名为 `eks-describe-cluster-policy.json` 的文件：

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "eks:DescribeCluster"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

1. 使用以下命令创建此策略：

   ```
   aws iam create-policy \
       --policy-name EKSDescribeClusterPolicy \
       --policy-document file://eks-describe-cluster-policy.json
   ```

 **AWS SSM 混合激活的步骤** 

1. 使用以下内容创建名为 `eks-hybrid-ssm-policy.json` 的文件。此策略将授予对 `ssm:DescribeInstanceInformation` 和 `ssm:DeregisterManagedInstance` 这两个操作的权限。此策略将根据您在信任策略中指定的资源标签，将 `ssm:DeregisterManagedInstance` 权限范围限定为与您的 AWS SSM 混合激活关联的 AWS SSM 托管式实例。

   1. 请将 `AWS_REGION` 替换为您的 AWS SSM 混合激活的 AWS 区域。

   1. 将 `AWS_ACCOUNT_ID` 替换为您的AWS账户 ID。

   1. 请将 `TAG_KEY` 替换为您在创建 AWS SSM 混合激活时使用的 AWS SSM 资源标签键。在条件中使用标签键和标签值组合，从而让 `ssm:DeregisterManagedInstance` 仅允许混合节点 IAM 角色注销与您的 AWS SSM 混合激活关联的 AWS SSM 托管式实例。在 CloudFormation 模板中，`TAG_KEY` 默认为 `EKSClusterARN`。

   1. 请将 `TAG_VALUE` 替换为您在创建 AWS SSM 混合激活时使用的 AWS SSM 资源标签值。在条件中使用标签键和标签值组合，从而让 `ssm:DeregisterManagedInstance` 仅允许混合节点 IAM 角色注销与您的 AWS SSM 混合激活关联的 AWS SSM 托管式实例。如果您使用 `EKSClusterARN` 的默认值 `TAG_KEY`，则请将 EKS 集群 ARN 传递为 `TAG_VALUE`。EKS 集群 ARN 的格式为 ` arn:aws:eks:AWS_REGION:AWS_ACCOUNT_ID:cluster/CLUSTER_NAME`。

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": "ssm:DescribeInstanceInformation",
                  "Resource": "*"
              },
              {
                  "Effect": "Allow",
                  "Action": "ssm:DeregisterManagedInstance",
                  "Resource": "arn:aws:ssm:us-east-1:123456789012:managed-instance/*",
                  "Condition": {
                      "StringEquals": {
                          "ssm:resourceTag/TAG_KEY": "TAG_VALUE"
                      }
                  }
              }
          ]
      }
      ```

1. 使用以下命令创建此策略

   ```
   aws iam create-policy \
       --policy-name EKSHybridSSMPolicy \
       --policy-document file://eks-hybrid-ssm-policy.json
   ```

1. 创建一个名为 `eks-hybrid-ssm-trust.json`的文件。请将 `AWS_REGION` 替换为您的 AWS SSM 混合激活所在的 AWS 区域，将 `AWS_ACCOUNT_ID` 替换为您的 AWS 账户 ID。

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Sid":"",
            "Effect":"Allow",
            "Principal":{
               "Service":"ssm.amazonaws.com"
            },
            "Action":"sts:AssumeRole",
            "Condition":{
               "StringEquals":{
                  "aws:SourceAccount":"123456789012"
               },
               "ArnEquals":{
                  "aws:SourceArn":"arn:aws:ssm:us-east-1:123456789012:*"
               }
            }
         }
      ]
   }
   ```

1. 使用以下命令创建此角色。

   ```
   aws iam create-role \
       --role-name AmazonEKSHybridNodesRole \
       --assume-role-policy-document file://eks-hybrid-ssm-trust.json
   ```

1. 附加您在之前步骤中创建的 `EKSDescribeClusterPolicy` 和 `EKSHybridSSMPolicy`。将 `AWS_ACCOUNT_ID` 替换为您的AWS账户 ID。

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/EKSDescribeClusterPolicy
   ```

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/EKSHybridSSMPolicy
   ```

1. 附加 `AmazonEC2ContainerRegistryPullOnly` 和 `AmazonSSMManagedInstanceCore` AWS 托管式策略。

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
   ```

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
   ```

 **AWS IAM Roles Anywhere 的步骤** 

要使用 AWS IAM Roles Anywhere，您必须在创建混合节点 IAM 角色之前设置 AWS IAM Roles Anywhere信任锚。有关说明，请参阅[设置 AWS IAM Roles Anywhere](#hybrid-nodes-iam-roles-anywhere)：

1. 创建一个名为 `eks-hybrid-iamra-trust.json`的文件。请将 `TRUST_ANCHOR ARN` 替换为您在“[设置 AWS IAM Roles Anywhere](#hybrid-nodes-iam-roles-anywhere)”步骤中创建的信任锚的 ARN。只有当角色会话名称与混合节点上安装的 x509 证书中的 CN 一致时，此信任策略中的条件才会将 AWS IAM Roles Anywhere 代入混合节点 IAM 角色的权限范围限定为仅交换临时 IAM 凭证。您也可以使用其他证书属性来唯一标识节点。您在信任策略中使用的证书属性必须与您在 `nodeadm` 配置中设置的 `nodeName` 对应。有关更多信息，请参阅[混合节点 `nodeadm` 参考](hybrid-nodes-nodeadm.md)。

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "rolesanywhere.amazonaws.com"
               },
               "Action": [
                   "sts:TagSession",
                   "sts:SetSourceIdentity"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:PrincipalTag/x509Subject/CN": "${aws:PrincipalTag/x509Subject/CN}"
                   },
                   "ArnEquals": {
                       "aws:SourceArn": "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TA_ID"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "rolesanywhere.amazonaws.com"
               },
               "Action": "sts:AssumeRole",
               "Condition": {
                   "StringEquals": {
                       "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}",
                       "aws:PrincipalTag/x509Subject/CN": "${aws:PrincipalTag/x509Subject/CN}"
                   },
                   "ArnEquals": {
                       "aws:SourceArn": "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TA_ID"
                   }
               }
           }
       ]
   }
   ```

1. 使用以下命令创建此角色。

   ```
   aws iam create-role \
       --role-name AmazonEKSHybridNodesRole \
       --assume-role-policy-document file://eks-hybrid-iamra-trust.json
   ```

1. 附加您在之前步骤中创建的 `EKSDescribeClusterPolicy`。将 `AWS_ACCOUNT_ID` 替换为您的AWS账户 ID。

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::AWS_ACCOUNT_ID:policy/EKSDescribeClusterPolicy
   ```

1. 附加 `AmazonEC2ContainerRegistryPullOnly` AWS 托管式策略

   ```
   aws iam attach-role-policy \
       --role-name AmazonEKSHybridNodesRole \
       --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly
   ```

### AWS 管理控制台
<a name="hybrid-nodes-creds-console"></a>

 **创建 EKS 描述集群策略** 

1. 打开 [Amazon IAM 控制台](https://console.aws.amazon.com/iam/home) 

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 在**策略**页面上，选择**创建策略**。

1. 在“指定权限”页面的“选择服务”面板中，选择 EKS。

   1. 筛选 **DescribeCluster** 的操作，然后选择 **DescribeCluster** 读取操作。

   1. 选择**下一步**。

1. 在**检查并创建**页面上

   1. 输入策略的**策略名称**，如 `EKSDescribeClusterPolicy`。

   1. 选择**创建策略**。

 **AWS SSM 混合激活的步骤** 

1. 打开 [Amazon IAM 控制台](https://console.aws.amazon.com/iam/home) 

1. 在左侧导航窗格中，选择 **Policies（策略）**。

1. 在**策略**页面上，选择**创建策略**。

1. 在**指定权限**页面右上角的**策略编辑器**导航中，选择 **JSON**。粘贴以下代码段。请将 `AWS_REGION` 替换为您的 AWS SSM 混合激活所在的 AWS 区域，并将 `AWS_ACCOUNT_ID` 替换为您的 AWS 账户 ID。请将 `TAG_KEY` 和 `TAG_VALUE` 替换为您在创建 AWS SSM 混合激活时使用的 AWS SSM 资源标签键。

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "ssm:DescribeInstanceInformation",
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": "ssm:DeregisterManagedInstance",
               "Resource": "arn:aws:ssm:us-east-1:123456789012:managed-instance/*",
               "Condition": {
                   "StringEquals": {
                       "ssm:resourceTag/TAG_KEY": "TAG_VALUE"
                   }
               }
           }
       ]
   }
   ```

   1. 选择**下一步**。

1. 在**检查并创建**页面上，

   1. 输入策略的**策略**名称，如 `EKSHybridSSMPolicy` 

   1. 选择**创建策略**。

1. 在左侧导航窗格中，选择 **Roles**（角色）。

1. 在 **Roles**（角色）页面上，选择 **Create role**（创建角色）。

1. 在 **Select trusted entity**（选择受信任的实体）页面上，请执行以下操作：

   1. 在**可信实体类型**部分中，选择**自定义信任策略**。将以下策略复制粘贴到自定义信任策略编辑器中。请将 `AWS_REGION` 替换为您的 AWS SSM 混合激活所在的 AWS 区域，将 `AWS_ACCOUNT_ID` 替换为您的 AWS 账户 ID。

      ```
      {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
            {
               "Sid":"",
               "Effect":"Allow",
               "Principal":{
                  "Service":"ssm.amazonaws.com"
               },
               "Action":"sts:AssumeRole",
               "Condition":{
                  "StringEquals":{
                     "aws:SourceAccount":"123456789012"
                  },
                  "ArnEquals":{
                     "aws:SourceArn":"arn:aws:ssm:us-east-1:123456789012:*"
                  }
               }
            }
         ]
      }
      ```

   1. 选择下一步。

1. 在**添加权限**页面上，附加自定义策略或执行以下操作：

   1. 在**筛选策略**对话框中，输入 `EKSDescribeClusterPolicy` 或您上面创建的策略的名称。选中搜索结果中您的策略左侧的复选框。

   1. 在**筛选策略**对话框中，输入 `EKSHybridSSMPolicy` 或您上面创建的策略的名称。选中搜索结果中您的策略左侧的复选框。

   1. 在 **Filter policies (筛选器策略)** 框中，输入 `AmazonEC2ContainerRegistryPullOnly`。选中搜索结果中 `AmazonEC2ContainerRegistryPullOnly` 左侧的复选框。

   1. 在 **Filter policies (筛选器策略)** 框中，输入 `AmazonSSMManagedInstanceCore`。选中搜索结果中 `AmazonSSMManagedInstanceCore` 左侧的复选框。

   1. 选择**下一步**。

1. 在 **Name, review, and create**（命名、查看和创建）页面中，请执行以下操作：

   1. 对于 **Role name**（角色名称），请为角色输入唯一名称，例如 `AmazonEKSHybridNodesRole`。

   1. 对于 **Description**（说明），请将当前文本替换为描述性文本，例如 `Amazon EKS - Hybrid Nodes role`。

   1. 选择**创建角色**。

 **AWS IAM Roles Anywhere 的步骤** 

要使用 AWS IAM Roles Anywhere，您必须在创建混合节点 IAM 角色之前设置 AWS IAM Roles Anywhere信任锚。有关说明，请参阅[设置 AWS IAM Roles Anywhere](#hybrid-nodes-iam-roles-anywhere)：

1. 打开 [Amazon IAM 控制台](https://console.aws.amazon.com/iam/home) 

1. 在左侧导航窗格中，选择 **Roles**（角色）。

1. 在 **Roles**（角色）页面上，选择 **Create role**（创建角色）。

1. 在 **Select trusted entity**（选择受信任的实体）页面上，请执行以下操作：

   1. 在**可信实体类型**部分中，选择**自定义信任策略**。将以下策略复制粘贴到自定义信任策略编辑器中。请将 `TRUST_ANCHOR ARN` 替换为您在“[设置 AWS IAM Roles Anywhere](#hybrid-nodes-iam-roles-anywhere)”步骤中创建的信任锚的 ARN。只有当角色会话名称与混合节点上安装的 x509 证书中的 CN 一致时，此信任策略中的条件才会将 AWS IAM Roles Anywhere 代入混合节点 IAM 角色的权限范围限定为仅交换临时 IAM 凭证。您也可以使用其他证书属性来唯一标识节点。您在信任策略中使用的证书属性必须与您在 nodeadm 配置中设置的 nodeName 对应。有关更多信息，请参阅[混合节点 `nodeadm` 参考](hybrid-nodes-nodeadm.md)。

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "rolesanywhere.amazonaws.com"
                  },
                  "Action": [
                      "sts:TagSession",
                      "sts:SetSourceIdentity"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalTag/x509Subject/CN": "${aws:PrincipalTag/x509Subject/CN}"
                      },
                      "ArnEquals": {
                          "aws:SourceArn": "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TA_ID"
                      }
                  }
              },
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "rolesanywhere.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}",
                          "aws:PrincipalTag/x509Subject/CN": "${aws:PrincipalTag/x509Subject/CN}"
                      },
                      "ArnEquals": {
                          "aws:SourceArn": "arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/TA_ID"
                      }
                  }
              }
          ]
      }
      ```

   1. 选择下一步。

1. 在**添加权限**页面上，附加自定义策略或执行以下操作：

   1. 在**筛选策略**对话框中，输入 `EKSDescribeClusterPolicy` 或您上面创建的策略的名称。选中搜索结果中您的策略左侧的复选框。

   1. 在 **Filter policies (筛选器策略)** 框中，输入 `AmazonEC2ContainerRegistryPullOnly`。选中搜索结果中 `AmazonEC2ContainerRegistryPullOnly` 左侧的复选框。

   1. 选择**下一步**。

1. 在 **Name, review, and create**（命名、查看和创建）页面中，请执行以下操作：

   1. 对于 **Role name**（角色名称），请为角色输入唯一名称，例如 `AmazonEKSHybridNodesRole`。

   1. 对于 **Description**（说明），请将当前文本替换为描述性文本，例如 `Amazon EKS - Hybrid Nodes role`。

   1. 选择**创建角色**。