Beanstalk получает изображение контейнера с другого (ECR) аккаунта AWS - PullRequest
0 голосов
/ 16 мая 2018

У меня проблема с бобовым стеблем и ECR в другой учетной записи AWS.

В «Dockerrun.aws.json» образ, который я пытаюсь получить, принадлежит другой учетной записи AWS (той же организации, но с другим идентификатором учетной записи).

"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

Интересно, как я мог решить эту проблему.Если бы я мог использовать параметр Authentication в dockerrun.aws.json, было бы здорово.Но не уверен, что он работает с ECR, так как срок действия токена истекает через 12 часов.

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

},

1 Ответ

0 голосов
/ 23 августа 2018

Когда Elastic Beanstalk извлекает образ докера во время развертывания, он будет использовать профиль экземпляра EC2 вашей среды выполнения Elastic Beanstalk.Это означает, что вам нужно будет:

  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" ] } ] }</p> <p> Примечание: Насколько я знаю, такое разрешение не может быть выполнено в консоли администратора, что означает, что вы 'Я должен сделать это с помощью CloudFormation.

Дайте разрешениям экземпляра среды 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" ] } ] }
...