Как аутентифицировать AWS EBS (Beanstalk) на ECS (Container Storage)? AccessDeniedException

Я новичок в использовании AWS EBS и ECS, поэтому, пожалуйста, простите меня, если я задам вопрос, который может быть очевиден для других. К вопросу:

Я настроил EBS и ECS в одном облачном регионе AWS. Я толкнул свой контейнер и вижу изображение в ECS. Среда EBS была создана с использованием Dockerrun.aws.json, указывающего на ECS. Во время сборки EBS я получаю следующую ошибку:

2020/11/02 20:50:25.858567 [INFO] authenticate with ECR if the image is in an ECR repo
2020/11/02 20:50:25.858582 [INFO] Running command /bin/sh -c aws ecr get-login --no-include-email --registry-ids 731178912345 --region eu-west-1
2020/11/02 20:50:28.355911 [ERROR] An error occurred during execution of command [app-deploy] - [Docker Specific Build Application]. Stop running the command. Error: failed to authenticate with ECR for registry 731178912XXX in eu-west-1: Command /bin/sh -c aws ecr get-login --no-include-email --registry-ids 731178912XXX --region eu-west-1 failed with error exit status 255. Stderr:
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:sts::731178912XXX:assumed-role/aws-elasticbeanstalk-ec2-role/i-0bff9b5324348ea71 is not authorized to perform: ecr:GetAuthorizationToken on resource: *

Я где-то читал, что идентификация автоматически передается для обработки аутентификации. Я не мог найти никаких указаний на то, что делать, чтобы решить проблему. Может, кто-нибудь сможет мне помочь?

Заранее спасибо!

Изменить:

После добавления разрешения, как обсуждалось, я получаю следующее:

2020/11/03 09:17:46.490399 [INFO] pull docker image if update is not false in Dockerrun.aws.json
2020/11/03 09:17:46.490431 [INFO] Running command /bin/sh -c docker pull 731178912XXX.dkr.ecr.eu-west-1.amazonaws.com/user/project:latest
2020/11/03 09:17:46.576648 [WARN] failed to execute command: docker pull 731178912XXX.dkr.ecr.eu-west-1.amazonaws.com/user/project:latest, retrying...
2020/11/03 09:17:46.576673 [INFO] Running command /bin/sh -c docker pull 731178912XXX.dkr.ecr.eu-west-1.amazonaws.com/user/project:latest
2020/11/03 09:17:46.659379 [ERROR] An error occurred during execution of command [app-deploy] - [Docker Specific Build Application]. Stop running the command. Error: failed to pull docker image: Command /bin/sh -c docker pull 731178912XXX.dkr.ecr.eu-west-1.amazonaws.com/user/project:latest failed with error exit status 1. Stderr:Error response from daemon: pull access denied for 731178912XXX.dkr.ecr.eu-west-1.amazonaws.com/user/project, repository does not exist or may require 'docker login': denied: User: arn:aws:sts::731178912XXX:assumed-role/aws-elasticbeanstalk-ec2-role/i-0aa453e0d44cdfa90 is not authorized to perform: ecr:BatchGetImage on resource: arn:aws:ecr:eu-west-1:731178912XXX:repository/user/project

person spekulatius    schedule 03.11.2020    source источник


Ответы (1)


У вашей роли экземпляра aws-elasticbeanstalk-ec2-role нет разрешений на выполнение ecr:GetAuthorizationToken.

Вы можете решить эту проблему, добавив inline policy к роли aws-elasticbeanstalk-ec2-role:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ecr:GetAuthorizationToken",
            "Resource": "*"
        }
    ]
}

Обратите внимание, что после этого могут потребоваться дополнительные разрешения. Вы можете добавить их таким же образом.

person Marcin    schedule 03.11.2020
comment
Спасибо за ваш ответ. Где именно я бы это добавил? В Dockerrun.aws.json или где-то еще? - person spekulatius; 03.11.2020
comment
@spekulatius Перейдите в консоль IAM - ›Роли и найдите aws-elasticbeanstalk-ec2-role. Там у вас будет опция Add inline policy. - person Marcin; 03.11.2020
comment
Это немного продвинуло его вперед: я добавил разрешение и перестроил среду. Он по-прежнему не может получить образ контейнера - на этот раз с другим сообщением об ошибке. Есть идеи, в чем причина может быть @Marcin? - person spekulatius; 03.11.2020
comment
@spekulatius Как я уже писал в ответе, возможно, вам потребуется добавить дополнительные разрешения. На этот раз: ecr:BatchGetImage. Я не знаю, сколько потребуется. Просто добавляйте их по ходу дела. - person Marcin; 03.11.2020
comment
Спасибо, Марчин, просматривая логи, я обнаружил еще одно недостающее разрешение. После добавления все заработало! Спасибо за помощь! - person spekulatius; 03.11.2020
comment
Марчин, может быть, вы получили представление о моей последующей проблеме stackoverflow.com/questions/64664476/ тоже? - person spekulatius; 03.11.2020