

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

# 作业的私有注册表身份验证
<a name="private-registry"></a>

使用对作业进行私有注册表身份验证 AWS Secrets Manager 使您能够安全地存储凭证，然后在作业定义中引用这些凭证。这提供了一种引用私有注册表中存在的容器镜像的方法 AWS ，这些镜像需要在任务定义中进行身份验证。此功能仅受 Amazon EC2 实例和 Fargate 上托管的作业支持。

**重要**  
如果您的作业定义引用了存储在 Amazon ECR 中的映像，则此主题不适用。有关更多信息，请参阅 *Amazon Elastic Container Registry 用户指南*中的[使用 Amazon ECR 和 Amazon ECS](https://docs.aws.amazon.com/AmazonECR/latest/userguide/ECR_on_ECS.html)。

对于 Amazon EC2 实例上托管的作业，此功能要求您具有版本 `1.19.0` 或更高版本的容器代理。但是，我们建议使用最新的容器代理版本。有关如何检查您的代理版本和更新到最新版本的信息，请参阅《Amazon Elastic Container Service 开发人员指南》**中的 [更新 Amazon ECS 容器代理](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-update.html)。

对于 Fargate 上托管的作业，此功能需要平台版本 `1.2.0` 或更高版本。有关信息，请参阅《Amazon Elastic Container Service 开发人员指南》**中的 [AWS Fargate Linux 平台版本](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/platform-linux-fargate.html)。

在容器定义中，使用您创建的密钥的详细信息指定 `repositoryCredentials` 对象。你引用的密钥可以来自与使用它的工作不同的账户， AWS 区域 也可以来自不同的账户。

**注意**  
使用 AWS Batch API AWS CLI、或 AWS SDK 时，如果密钥与您启动的任务 AWS 区域 相同，则可以使用密钥的完整 ARN 或名称。如果密钥存在于另一个账户中，则必须指定密钥的完整 ARN。使用时 AWS 管理控制台，必须始终指定密钥的完整 ARN。

下面是显示必需参数的作业定义代码段：

```
"containerProperties": [
  {
    "image": "private-repo/private-image",
    "repositoryCredentials": {
      "credentialsParameter": "arn:aws:secretsmanager:region:123456789012:secret:secret_name"
    }
  }
]
```

# 私有注册表身份验证所需的 IAM 权限
<a name="private-auth-iam"></a>

使用此功能需要执行角色。这允许容器代理拉取容器映像。有关更多信息，请参阅 [AWS Batch IAM 执行角色](execution-IAM-role.md)。

要提供对您创建的密钥的访问权限，请将以下权限作为内联策略添加到执行角色。有关更多信息，请参阅[添加和删除 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。
+ `secretsmanager:GetSecretValue`
+ `kms:Decrypt` - 仅当密钥使用自定义 KMS 密钥而不是原定设置密钥时才需要。您的自定义密钥的 Amazon 资源名称（ARN）必须添加为资源。

下面是添加所需权限的示例内联策略。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "secretsmanager:GetSecretValue"
            ],
            "Resource": [
                "arn:aws:secretsmanager:us-east-1:123456789012:secret:secret_name",
                "arn:aws:kms:us-east-1:123456789012:key/key_id"
            ]
        }
    ]
}
```

------

# 教程：创建私有注册表身份验证的密钥
<a name="private-auth-enable"></a>

完成以下步骤，使用为您的私有注册表凭证创建密钥 AWS Secrets Manager。

**创建基本密钥**

1. 打开 AWS Secrets Manager 控制台，网址为[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 选择**存储新密钥**。

1. 对于**选择密钥类型**，选择**其他密钥类型**。

1. 选择**纯文本文件**并使用以下格式输入您的私有注册表凭证：

   ```
   {
     "username" : "privateRegistryUsername",
     "password" : "privateRegistryPassword"
   }
   ```

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

1. 对于 **Secret name**（密钥名称），请输入可选的路径和名称，如 **production/MyAwesomeAppSecret** 或 **development/TestSecret**，然后选择 **Next**（下一步）。您可以选择添加描述以帮助记住该密钥以后的用途。

   密钥名称应仅包含 ASCII 字母、数字或以下任意字符：`/_+=.@-`。

1. (可选) 此时，您可以为密钥配置轮换。对于此程序，请将其保留为**禁用自动轮换**，然后选择**下一步**。

   有关如何配置新密钥或现有密钥轮换的说明，请参阅[轮换您的 AWS Secrets Manager 密钥](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets.html)。

1. 检查您的设置，然后选择 **Store secret**（存储密钥）以将输入的所有内容作为新密钥保存在 Secrets Manager 中。

注册作业定义，然后在**私有注册表**下打开**私有注册表身份验证**。然后，在 **Secrets Manager ARN 或名称**中，输入密钥的 Amazon 资源名称（ARN）。有关更多信息，请参阅 [私有注册表身份验证所需的 IAM 权限](private-auth-iam.md)。