【问题标题】:Beanstalk getting container image from different (ECR) AWS accountBeanstalk 从不同(ECR)AWS 账户获取容器镜像
【发布时间】:2018-10-26 08:15:13
【问题描述】:

我在不同的 AWS 账户中遇到了一些关于 beanstalk 和 ECR 的问题。

在“Dockerrun.aws.json”中,我尝试提取的图像属于另一个 AWS 账户(相同的组织但不同的账户 ID)。

"Image": { "Name": "XXXXXXX.dkr.ecr.eu-central-1.amazonaws.com/YYYYYYY", "Update": "true" },

在 ECR 权限中,我已经添加了允许 beanstalk 拉取图像的策略(另一个 AWS 帐户):

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "Allow webapp aws account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ZZZZZZZZZZZ:root"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage",
                "ecr:InitiateLayerUpload",
                "ecr:UploadLayerPart",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeRepositories",
                "ecr:GetRepositoryPolicy",
                "ecr:ListImages",
                "ecr:DescribeImages",
                "ecr:DeleteRepository",
                "ecr:BatchDeleteImage",
                "ecr:SetRepositoryPolicy",
                "ecr:DeleteRepositoryPolicy",
                "ecr:GetLifecyclePolicy",
                "ecr:PutLifecyclePolicy",
                "ecr:DeleteLifecyclePolicy",
                "ecr:GetLifecyclePolicyPreview",
                "ecr:StartLifecyclePolicyPreview"
            ]
        }
    ]
}

但是,我正在尝试构建 Beanstalk 环境我仍然收到以下错误:

because: Failed to authenticate with ECR for registry 'XXXXXX' in 'eu-central-1' (ElasticBeanstalk::ExternalInvocationError)
caused by: Failed to authenticate with ECR for registry 'XXXXX' in 'eu-central-1' (Executor::NonZeroExitStatus

我想知道我该如何解决这个问题。如果我可以在 dockerrun.aws.json 中使用 Authentication 参数应该会很棒。但不确定它是否适用于 ECR,因为令牌在 12 小时后过期。

  "Authentication": {
"Bucket": "elasticbeanstalk-eu-central-1-XXXXX",
"Key": "aws_credentials.json"

},

【问题讨论】:

    标签: amazon-elastic-beanstalk amazon-ecr


    【解决方案1】:

    当 Elastic Beanstalk 在部署期间拉取 docker 映像时,它将使用您的 Elastic Beanstalk 运行时环境的 EC2 实例配置文件。这意味着您必须:

    1. 授予实例配置文件角色从 ECR 存储库中提取的权限。最终得到的政策文件如下所示:

    { "Version": "2008-10-17", "Statement": [ { "Sid": "ElasticBeanstalkApplicationInstance", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ZZZZZZZZZZZ:role/YourElasticBeanstalkApplicationIamRole-A1B2C3D4E5" }, "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ] } ] }

    注意:据我所知,无法在管理控制台中授予此类权限,这意味着您必须使用 CloudFormation 来完成。

    1. 授予您的 Elastic Beanstalk 运行时实例权限以从您的存储库获取授权令牌和映像。这是通过创建以下策略并将其附加到 IAM 中的实例配置文件角色来完成的。 (https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-images-ecr) { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowEbAuth", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken" ], "Resource": [ "*" ] }, { "Sid": "AllowPull", "Effect": "Allow", "Resource": [ "arn:aws:ecr:us-east-2:account-id:repository/repository-name" ], "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:BatchGetImage" ] } ] }

    【讨论】:

    • 感谢分享示例,这有助于我在停止使用默认角色时解决权限问题。
    猜你喜欢
    • 2021-12-23
    • 2022-06-18
    • 1970-01-01
    • 2019-03-25
    • 2020-07-03
    • 2016-05-30
    • 2016-11-11
    • 2018-04-02
    • 2022-06-23
    相关资源
    最近更新 更多