如何允许辅助账户在我的 Amazon ECR 映像存储库中推送或拉取映像?

2 分钟阅读
0

我想允许辅助账户在我的 Amazon Elastic Container Registry(Amazon ECR)映像存储库中推送或拉取映像。

解决方法

您可以将映像推送到其他账户的 Amazon ECR 存储库或从中拉取映像。首先,您必须创建一个策略,允许辅助账户对存储库执行 API 调用。然后,使用从辅助账户生成的 Docker 身份验证令牌对主账户的存储库执行推送和拉取命令。

创建一个策略,允许辅助账户对映像存储库执行 API 调用

1.    打开您的主账户的 Amazon ECR 控制台

2.    选择要修改的存储库的超链接存储库名称

3.    在左侧导航窗格的“Amazon ECR - 存储库”下,选择权限

4.    要从主账户中为您的辅助账户添加存储库策略,请选择编辑策略 JSON。在代码编辑器中输入您的策略,然后选择保存

重要事项: 在您的策略中,包含辅助账户的账号以及该账户可以对存储库执行的操作。要允许访问特定角色,请提供角色 arn 作为主体。例如,AWS: arn:aws:iam::account-id:role/ecsInstanceRole。辅助帐户中必须存在该角色,您才能保存存储库策略。如果它不存在,就会收到类似以下内容的错误:invalid repository policy provided

以下存储库策略示例允许特定账户推送和拉取映像:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowPushPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::account-id:root"
      },
      "Action": [
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:CompleteLayerUpload"
      ]
    }
  ]
}

5.    在任务定义中,设置要用于 Amazon ECS 的映像。您的映像托管在主账户的 Amazon ECR 存储库中。
**注意:**请确保您的辅助账户拥有“AmazonEC2ContainerRegistryPowerUser”托管策略中列出的 Amazon ECR 权限。从您的主账户拉取或推送需要这些权限。

从辅助账户生成临时 Docker 身份验证令牌并执行测试推送或拉取操作

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

辅助账户在收到临时身份验证令牌之前,无法在存储库上执行策略操作,临时身份验证令牌的有效期为 12 小时。该令牌允许辅助账户对主账户的存储库执行 Docker 推送和拉取命令。get-login-password 命令检索并解码授权令牌,然后您可以通过管道将该令牌通过管道输入 docker login 命令进行身份验证。

**注意:**获取令牌的账户必须具有相关的 AWS Identify and Access Management(IAM)API 权限才能修改存储库。有关示例,请参阅 Amazon Elastic Container Registry 的 AWS 托管式策略。要解决 Docker 的问题,请在 Docker 进程守护程序上启用调试模式。最新版本的 AWS CLI 版本 2 或者 v1.17.10 或更高版本的 AWS CLI 版本 1 支持此命令。有关详细信息,请参阅 get-login-password

1.    要为在 Amazon ECS 之外推送和拉取映像的账户生成 Docker 身份验证令牌,请运行以下命令。将 aws_account_id 替换为您的主账户 ID,将 regionID 替换为您的区域 ID

使用 AWS CLI:

aws ecr get-login-password --region regionID | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

使用 AWS Tools for Windows PowerShell:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.regionID.amazonaws.com

您会收到以下输出:

aws ecr get-login-password --region ap-south-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-south-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

2.    执行从主账户拉取映像或将映像推送到主账户的测试:

docker pull AccountID.dkr.ecr.Region.amazonaws.com/ImageName::TagName

注意: 将 AccountID 和 Region 替换为您的账户 ID 和区域。将 ImageName 和 TagName 替换为您的映像和标签的名称。

3.    验证映像是否已成功下载:

docker images | grep ImageName

注意: 将 ImageName 替换为您的映像名称。

AWS 官方
AWS 官方已更新 2 年前