任务的私有注册表身份验证 - Amazon Elastic Container Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用私有注册表在 Amazon Secrets Manager 中存储您的凭证,然后在任务定义中引用它们。这提供了一种方法来引用存在于 Amazon 以外的私有注册表中的容器镜像,这需要在任务定义中进行身份验证。在 Fargate 上托管的任务、Amazon EC2 实例以及使用 Amazon ECS Anywhere 的外部实例都支持此功能。

重要

如果您的任务定义引用了存储在 Amazon ECR 中的映像,则此主题不适用。有关更多信息,请参阅 Amazon Elastic Container Registry 用户指南中的使用 Amazon ECR 和 Amazon ECS

对于 Amazon EC2 实例上托管的任务,此功能要求您具有版本 1.19.0 或更高版本的容器代理。但是,我们建议使用最新的容器代理版本。有关如何检查您的代理版本并更新到最新版本的信息,请参阅更新 Amazon ECS 容器代理

对于 Fargate 上托管的任务,此功能需要平台版本 1.2.0 或更高版本。有关信息,请参阅Fargate Linux 平台版本

在容器定义中,使用您创建的密钥的详细信息指定 repositoryCredentials 对象。您引用的密钥可以来自与使用此密钥的任务不同的Amazon Web Services 区域或不同的账户。

注意

使用 Amazon ECS API、Amazon CLI 或 Amazon SDK 时,如果密钥存在于要启动的任务所在的Amazon Web Services 区域,可以使用密钥的完整 ARN 或名称。如果密钥存在于另一个账户中,则必须指定密钥的完整 ARN。使用 Amazon Web Services Management Console 时,必须始终指定密钥的完整 ARN。

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

private-repo 替代为私有存储库主机名称,将 private-image 替代为映像名称。

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

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

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

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

    • secretsmanager:GetSecretValue

    • kms:Decrypt - 仅当密钥使用自定义 KMS 密钥而不是原定设置密钥时才需要。您的自定义密钥的 Amazon 资源名称(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" ] } ] }
  2. 使用 Amazon Secrets Manager 为您的私有注册表凭证创建密钥。有关如何创建密钥的信息,请参阅《Amazon Secrets Manager 用户指南》中的创建 Amazon Secrets Manager 密钥

    使用以下格式输入您的私有注册表凭证:

    { "username" : "privateRegistryUsername", "password" : "privateRegistryPassword" }
  3. 注册任务定义。有关更多信息,请参阅 使用控制台创建任务定义