AWS ECR GetAuthorizationToken

Я попытался следовать инструкциям AWS по настройке авторизации ECR для моего пользователя, предоставив моей политике AmazonEC2ContainerRegistryFullAccess.

Однако, когда я пытаюсь запустить на своем ПК aws ecr get-login, я получаю сообщение об ошибке, что у меня нет разрешения.

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::ACCOUNT_NUMBER:user/MY_USER is not authorized to perform: ecr:GetAuthorizationToken on resource: *

Что я сделал неправильно?

Ответ 1

Я выяснил, что, когда включен 2FA, нет возможности использовать aws ecr get-login, как только я удалю 2FA из своей учетной записи, я получил токен авторизации

Ответ 2

Вы должны приложить политику к своей роли IAM.

Я подключил AmazonEC2ContainerRegistryFullAccess, и он сработал.

Ответ 3

Как показано в описании ошибки, я должен разрешить действие "GetAuthorizationToken" в моей политике.

    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "ecr:GetAuthorizationToken",
        "Resource": "*"
    }

Примечание. Это не полная политика, а подраздел "Заявление".

Ответ 4

В итоге я использовал AmazonEC2ContainerRegistryPowerUser, так как он показался мне лучшим вариантом, чем полный доступ. Вот правила, которые я нашел по состоянию на июнь 2019 года: Container Registry Permissions

Ответ 5

У меня была такая же проблема с ECS, когда я пытался протолкнуть свой контейнер в хранилище.

Чтобы решить эту проблему, я прикрепил к своей роли IAM: AmazonECS_FullAccess

Ответ 6

Вот полный ответ, после того как я выполнил все шаги - я смог использовать ECR

Ошибка может иметь 2 значения:

1) Вы не авторизованы, потому что к вашему пользователю не привязана политика ECR

2) Вы не авторизованы, потому что вы используете 2FA, а использование cli небезопасно, если вы не установите временный токен сеанса

Вот список всех шагов для получения доступа (включая обработку 2FA)

  1. Прежде всего, вы должны создать политику, которая дает вам доступ к действию GetAuthorizationToken в ECR.
  2. Прикрепите эту политику либо к пользователю, либо к группе (IMHO всегда лучше подходят для групп/ролей, мой голос за роли, например, DevOps)
  3. Убедитесь, что в вашей среде установлены AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Я рекомендую использовать папку aws с разделенными учетными данными и профилями.

Если у вас включен 2FA

  1. Вам нужно сгенерировать токен сеанса с помощью этой команды aws sts get-session-token --serial-number arn-of-the-mfa-device --token-code code-from-token. arn-of-the-mfa-device можно найти в вашем профиле, раздел 2FA. Токен, сгенерированный токен из устройства.
  2. Обновите учетные данные aws с полученными AccessKeyId, SecretAccessKey и SessionToken. AWS рекомендует использовать какое-либо задание cron для обновления токена, что означает, что если вы делаете это, вы что-то тестируете, скорее всего, в ваших ресурсах prod не включен 2FA. Вы можете увеличить сеанс, предоставив --duration-seconds, но только до 36 часов. Хорошее объяснение можно найти на authenticate-mfa-cli

Это должно сделать работу

Ответ 7

У меня та же проблема, но я ранее установил permission boundary только s3, что вызывает проблему.

Убрал permission boundary, она работала как шарм