Amazon Elastic Container Service
开发人员指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

任务的私有注册表身份验证

通过使用 AWS Secrets Manager 对任务进行私有注册表身份验证,您可以在容器定义中安全地存储并随后引用您的凭证。这样,您的任务就可以使用私有存储库中的映像。只有使用 EC2 启动类型的任务才支持此功能。

此功能需要版本 1.19.0 或更高版本的容器代理;但我们建议您使用最新的容器代理版本。有关检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

在您的容器定义中,通过您创建的密钥的完整 ARN 或 ID 指定 repositoryCredentials。您引用的密钥可以来自与使用此密钥的任务不同的区域,但必须来自同一个账户。下面是显示必需参数的任务定义代码段:

"containerDefinitions": [ { "image": "private-repo/private-image", "repositoryCredentials": { "credentialsParameter": "aws:ssm:region:aws_account_id:secret:secret_name" } } ]

注意

启用私有注册表身份验证的另一种方法使用 Amazon ECS 容器代理环境变量向私有注册表进行身份验证。有关更多信息,请参阅 容器实例的私有注册表身份验证

私有注册表身份验证必需的 IAM 权限

使用此功能需要 Amazon ECS 任务执行角色。这允许容器代理拉取容器映像。有关更多信息,请参阅 Amazon ECS 任务执行 IAM 角色

此外,需要手动将以下权限作为内联策略添加到任务执行角色,以便提供对您创建的密钥的访问。有关更多信息,请参阅添加和删除 IAM 策略

  • secretsmanager:GetSecretValue

  • kms:Decrypt,仅当您的密钥使用自定义 KMS 密钥而不是默认 KMS 密钥时才需要

添加权限的示例内联策略如下所示。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "secretsmanager:GetSecretValue" ], "Resource": [ "aws:ssm:region:aws_account_id:secret:secret_name" ] } ] }

启用私有注册表身份验证

创建基本密钥

使用 AWS Secrets Manager 为您的私有注册表凭证创建密钥。

  1. 通过 https://console.amazonaws.cn/secretsmanager/ 打开 AWS Secrets Manager 控制台。

  2. 选择存储新密钥

  3. 对于 Select secret type (选择密钥类型),选择 Other type of secrets (其他密钥类型)

  4. 选择 Plaintext (明文) 并使用以下格式输入您的私有注册表凭证:

    { "username" : "privateRegistryUsername", "password" : "privateRegistryPassword" }
  5. 选择 Next

  6. 对于 Secret name (密钥名称),请键入可选的路径和名称,如 production/MyAwesomeAppSecretdevelopment/TestSecret,然后选择 Next (下一步)。您可以选择添加描述以帮助您以后记住该密钥的用途。

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

  7. (可选) 此时,您可以为密钥配置轮换。由于我们使用不进行轮换的“基本”密钥,请保留 Disable automatic rotation (禁用自动轮换),然后选择 Next (下一步)

    有关如何为新的或现有的密钥配置轮换的信息,请参阅轮换 AWS Secrets Manager 密钥

  8. 检查您的设置,然后选择 Store secret (存储密钥) 以将输入的所有内容作为新密钥保存在 Secrets Manager 中。

创建使用私有注册表身份验证的任务定义

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,选择 Task Definitions

  3. Task Definitions 页面上,选择 Create new Task Definition

  4. Select launch type compatibility 页面上,选择 EC2Next step

  5. Task Definition Name 中,为您的任务定义键入名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

  6. 对于 Task execution role (任务执行角色),选择您的现有任务执行角色,或者选择 Create new role (创建新角色) 为您创建一个此类角色。此角色授权 Amazon ECS 提取任务的私有映像。有关更多信息,请参阅 私有注册表身份验证必需的 IAM 权限

  7. 对于您的任务定义中要创建的每个容器,请完成以下步骤:

    1. Container Definitions (容器定义) 部分,选择 Add container (添加容器)

    2. 对于 Container name (容器名称),键入容器的名称。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

    3. 对于 Image (映像),键入映像名称或到您私有映像的路径。最多能包含 255 个字母 (大写和小写字母)、数字、连字符和下划线。

    4. 选择 Private repository authentication (私有存储库身份验证) 选项。

    5. 对于 Secrets manager ARN (密钥管理器 ARN),输入您之前创建的密钥的完整 Amazon 资源名称 (ARN)。值的长度必须介于 20 到 2048 个字符之间。

    6. 填写剩余的必填字段和要在您的容器定义中使用的任何可选字段。更多容器定义参数将可用于 Advanced container configuration (高级容器配置) 菜单中。有关更多信息,请参阅 任务定义参数

    7. 选择 Add

  8. 当添加您的容器时,请选择 Create (创建)