Как отправить на учетную запись с помощью ASSUME_ROLE в AWS ECR

Что мне не хватает? Независимо от того, какой синтаксис я использую, отправка в AWS ECR всегда происходит в основной/управляющей учетной записи AWS. В консоли AWS я могу переключиться на эту учетную запись с соответствующей ролью. Используя Terraform, я могу установить свойство assume_role.role_arn для создания ресурсов в правильной учетной записи. Однако никакая конфигурация или синтаксис для Docker и интерфейса командной строки AWS, похоже, не работают. Мне явно не хватает шага, свойства или глобальной опции.

Если я выберу путь Terraform, я смогу делать все, что мне нужно. Итак, я знаю, что это должен работает...

provider "aws" {
  region = "us-gov-west-1"
  shared_credentials_file = "~/.aws/credentials"
  profile = "govcloud"

  assume_role {
    role_arn = "arn:aws-us-gov:iam::123456789012:role/Build_Administrator"
  }
}

Однако я бы предпочел НЕ использовать Terraform для такой простой задачи, как отправка в ECR.

Я пытался использовать свойство role_arn в ~/.aws/config, и тот не работает...

[govcloud]
region = us-gov-west-1
output = json

[govcloud-assume]
region = us-gov-west-1
output = json
role_arn=arn:aws-us-gov:iam::123456789012:role/Build_Administrator

В любом другом сценарии вызов get-login-password / create-repository будет использовать текущие настроенные ключи и управлять настроенной учетной записью...

aws ecr get-login-password | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com
aws ecr create-repository --repository-name "complexapi" --image-tag-mutability MUTABLE 

Такое ощущение, что должна быть какая-то глобальная опция для установки целевой учетной записи или role_arn, однако никакая комбинация не работает...

aws ecr get-login-password --profile govcloud-assume --region us-gov-west-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com
aws ecr create-repository --profile govcloud-assume --region us-gov-west-1 --repository-name "complexapi" --image-tag-mutability MUTABLE 

Обновление 1:
Кажется, я приближаюсь. После установки ключа доступа я могу успешно вызвать aws sts assume-role и вернуть объект Credentials. Просто пока не знаю, что с этим делать.

Обновление 2:
STS был пустой тратой времени и направил меня по ложному пути. Не ходи туда. Это не нужно и загрязнит вашу локальную среду аутентификации для AWS CLI.

Извините, в чем здесь проблема? с какой ошибкой вы столкнулись?

Tapan Hegde 03.04.2022 16:01

Думаю, вам нужно сгенерировать временные учетные данные предполагаемой роли — aws.amazon.com/premiumsupport/knowledge-center/…

Jan Garaj 03.04.2022 17:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы взять на себя роль, используя интерфейс командной строки AWS с ECR, вы должны использовать свойство --profile в своих скриптах и ​​структурировать ~/.aws/config со свойствами два вместе: role_arn и source_profile

Для ~/.aws/config требуется оба основная учетная запись и вспомогательная учетная запись, с которой вы хотите работать. Этот субаккаунт содержит роль, которую вы хотите взять на себя, поскольку ARN сохраняется в его свойстве role_arn. Профиль субаккаунта — это то, на что вы будете ссылаться в своих сценариях, однако конфигурация также должна указывать на source_profile, который будет поддерживать фактические учетные данные:

[default]
region = us-gov-west-1
output = json

[profile gov-mgmt]
region = us-west-1
output = json

[profile gov-staging]
role_arn = arn:aws-us-gov:iam::123456789123:role/BuildBoxRole
source_profile = gov-mgmt
region = us-gov-west-1

Затем ваш файл ~/.aws/credentials содержит ключи для основной учетной записи:

[gov-mgmt]
aws_access_key_id = ABCDEFGHIJKLMNOPQRST
aws_secret_access_key = abcdefghijklmnopqrstuvwxyz1234567890ab12

Оказавшись на месте, ваши команды будут ссылаться на профиль, содержащий роль, которую вы хотите взять на себя (целевая учетная запись), и, при необходимости, вы используете этот идентификатор учетной записи. В примере с командой get-login-password интерфейсу командной строки AWC передается свойство --profile с использованием имени дочерней учетной записи. Docker получит полученный пароль из интерфейса командной строки AWS и напрямую сошлется на субаккаунт по номеру.

Например, вот команды для создания репозитория AWS ECR в дочерней учетной записи (обратите внимание, что используется как идентификатор дочерней учетной записи, так и имя профиля этой учетной записи):

aws ecr get-login-password --profile gov-staging | docker login \
  --username AWS \
  --password-stdin 123456789123.dkr.ecr.us-gov-west-1.amazonaws.com

aws ecr create-repository \
  --profile gov-staging \
  --repository-name "complexapi" \
  --image-tag-mutability MUTABLE 

... и команды, необходимые для отправки изображения в реестр субаккаунта с тегом latest и правильным номером версии:

docker tag fredlackey/complexapi:0.0.0 \
  123456789012.dkr.ecr.us-gov-west-1.amazonaws.com/complexapi:0.0.0

docker tag fredlackey/complexapi:0.0.0 \
  123456789012.dkr.ecr.us-gov-west-1.amazonaws.com/complexapi:latest

aws ecr get-login-password \
  --profile gov-staging | docker login \
  --username AWS \
  --password-stdin 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com

docker push 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com/complexapi:0.0.0

docker push 123456789012.dkr.ecr.us-gov-west-1.amazonaws.com/complexapi:latest

Другие вопросы по теме