任务的私有注册表身份验证 - 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 SDK 时,如果密钥与您启动的任务 Amazon Web Services 区域 相同,则可以使用密钥的完整 ARN 或名称。 Amazon CLI如果密钥存在于另一个账户中,则必须指定密钥的完整 ARN。使用时 Amazon Web Services Management Console,必须始终指定密钥的完整 ARN。

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

"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. 注册任务定义。有关更多信息,请参阅使用控制台创建任务定义