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

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

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

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

对于使用 Fargate 启动类型的任务,此功能需要平台版本 1.2.0 或更高版本。有关信息,请参阅 AWS Fargate 平台版本

在容器定义中,使用您创建的密钥的完整 ARN 指定 repositoryCredentials。您引用的密钥可以来自与使用此密钥的任务不同的区域,但必须来自同一个账户。

注意

使用 Amazon ECS API、AWS CLI 或 AWS 开发工具包时,如果密钥存在于要启动的任务所在的区域,可以使用密钥的完整 ARN 或名称。使用 AWS 管理控制台时,必须指定密钥的完整 ARN。

下面是显示必需参数的任务定义代码段:

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

注意

启用私有注册表身份验证的另一种方法使用 Amazon ECS 容器代理环境变量向私有注册表进行身份验证。只有使用 EC2 启动类型的任务才支持此方法。有关更多信息,请参阅容器实例的私有注册表身份验证

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

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

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

  • secretsmanager:GetSecretValue

  • kms:Decrypt - 仅当密钥使用自定义 KMS 密钥而不是默认密钥时才需要。您的自定义密钥的 ARN 应添加为资源。

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

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

启用私有注册表身份验证

创建基本密钥

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

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

  2. 选择存储新密钥

  3. 对于选择密钥类型,选择其他密钥类型

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

    { "username" : "privateRegistryUsername", "password" : "privateRegistryPassword" }
  5. 选择下一步

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

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

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

    有关如何为新的或现有的密钥配置轮换的信息,请参阅轮换 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 (选择启动类型兼容性) 页面上,选择任务的启动类型,然后选择 Next step (下一步)

    注意

    此步骤仅适用于当前支持使用 AWS Fargate 的 Amazon ECS 的区域。有关更多信息,请参阅Amazon ECS 上的 AWS Fargate

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

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

    重要

    如果 Task execution role (任务执行角色) 字段未显示,请选择 Configure via JSON (通过 JSON 配置) 并手动添加 executionRoleArn 字段来指定您的任务执行角色。下面显示语法:

    "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole"
  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 (创建)