是否可以在不使用 docker 登录的情况下从 EC2 中的 ECR 中提取图像?

Is it possible to pull image from ECR in a EC2 without using docker login?

我现在拥有一个私有 ECR 存储库和一个 EC2 实例。如果我想从本地计算机的私有 ECR 中提取图像,我必须使用 aws configure 设置我的 AWS 凭证并执行 docker 登录。

现在,我想从 EC2 实例中提取映像。当我尝试直接 运行 docker 命令时,它告诉我先进行身份验证。是否可以将 IAM 角色附加到我的 EC2 实例并跳过 docker 登录或 aws ecr 登录工作流程?

此时,我只能运行 aws configure inside EC2 instance,它似乎需要一个额外的 IAM 用户,我试图避免。

I have to setup my AWS credential by using aws configure and perform a docker login.

您不必这样做。如果您的代码在 EC2 上运行,您应该使用 instance IAM role 而不是使用 aws configure.

定期设置 aws 凭据

您不必 运行 aws configure 在 EC2 机器上,事实上,这将是一种糟糕的安全做法。您应该附加一个允许 EC2 实例获取图像的 AWS 角色,更重要的是,可以获取 ECR 注册表的授权令牌。例如,您可以创建具有以下权限的策略以 read-only 访问 ECR 映像:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:DescribeImages",
                "ecr:GetAuthorizationToken",
                "ecr:ListImages"
            ],
            "Resource": "*"
        }
    ]
}

使用此策略,创建一个新的 IAM 服务角色并将其附加到 EC2 实例。

现在,即使您附加了此角色,您也必须使用 authorization token.

对 Docker CLI 进行身份验证

除了此处发布的其他说明您应该使用 EC2 IAM 角色而不是使用 aws configure 配置角色的答案之外,我还建议在您的 EC2 实例上安装 Amazon ECR Credential Helper。那么你就不必执行 docker login.