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

上次更新时间:2020 年 9 月 28 日

我想允许一个二级账户推送或拉取我的 Amazon Elastic 容器注册表 (Amazon ECR) 映像存储库中的映像。

简短描述

要向另一个账户中的 Amazon ECR 存储库推送映像或从中拉取映像,您必须创建一个允许二级账户对该存储库执行 API 调用的策略。在为存储库配置权限并获取令牌后,您可以基于允许的操作来推送或拉取映像。获得令牌的用户还需要相关的 AWS Identity and Access Management (IAM) API 权限才能修改存储库。

解决方法

选择选项 A 或 B。

(选项 A)创建一个策略,以允许二级账户对映像存储库执行 API 调用

1.    为您的一级账户打开 Amazon ECR 控制台

2.    选择您要修改的存储库的名称。

3.    从导航菜单中,选择权限

4.    要从您的一级账户内为您的二级账户添加存储库策略,请选择编辑策略 JSON,将您的策略输入到代码编辑器中,然后选择保存

重要提示:在您的策略中,包含二级账户的账号和该账户可对存储库执行的操作。

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

{
    "Version": "2008-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 配合使用的映像。您的映像托管在主账户的 ECR 存储库中。

(选项 B)使用二级账户中的临时 Docker 身份验证令牌执行从主账户的映像测试拉取

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

二级账户在接收到有效期为 12 小时的临时身份验证所需令牌之前,无法对存储库执行策略操作。令牌使您可以使用二级账户生成的令牌对一级账户存储库使用 Docker 推送和拉取命令。AWS CLI get-login-password 命令通过检索并解码授权令牌来简化此操作,然后您可以通过管道传输到 docker login 命令进行身份验证。

1.    要获取在 Amazon ECS 之外推送和拉取映像的账户的 Docker 身份验证令牌,请通过使用 regionaws_account_id 替换您的主账户 ID 和区域,运行下列命令。

使用 AWS CLI:

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

使用 AWS Tools for Windows PowerShell:

(Get-ECRLoginCommand).Password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.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.    执行测试映像拉取或推送到主账户。

注意:获取令牌的账户需要在存储库账户中进行必要 API 调用的权限。有关示例,请参阅 Amazon ECR 托管策略。要排查 Docker 的问题,对您的 Docker 守护程序启用调试模式。使用最新版本的 AWS CLI 版本 2 或版本 1.17.10,或比 AWS CLI 版本 1 更新的版本时支持此命令。有关详细信息,请参阅获取登录密码


这篇文章对您有帮助吗?


您是否需要账单或技术支持?