Как использовать AWS CLI для нескольких учетных записей - PullRequest
0 голосов
/ 19 июня 2019

У меня есть корневая учетная запись 1234 (идентификатор учетной записи), и у меня включена аутентификация с поддержкой MFA, мое имя пользователя myuser12.Я мог войти в систему с идентификатором учетной записи и моим именем пользователя, а также с моим паролем.И он запросит код токена MFA.Однажды я ввел код токена.Я мог видеть экземпляры под моей учетной записью root для определенного местоположения.

Я мог бы переключить роль на новую учетную запись (5678) со своей ролью (в моем случае роль одинакова для всех учетных записей) вместе с любым псевдонимом для этого.Когда роль переключателя завершена, я смог увидеть все экземпляры под новой учетной записью в определенных местах.

Все нормально через веб-консоль.Когда я пытаюсь получить к ним доступ через CLI, я не могу получить результат для новой учетной записи (5678).Но он работает для учетной записи 1234.

Account ID - Location   - No. of instances

1234       - us-east-1  - 5 instances

1234       - eu-west-3   - 2 instances

5678       - eu-north-1  - 5 instances

5678       - eu-west-1   - 5 instances

и т. Д.

Мой начальный .aws/config контент

[profile default]
region = us-east-1
output = json

.aws/credentials контент,

[default]
aws_access_key_id = accesskeyIdFromDownloadedCSV
aws_secrect_access_key = secrectAccessKeyFromDownloadedCSV

Теперь, если я попытаюсь запросить какой-либо экземпляр, я получу ошибку, так как я не сгенерировал токен ключа доступа с MFA.

aws rds describe-db-instances --query 'DBInstances[?DBInstanceClass==`db.m3.large`]' --profile default --no-verify-ssl

Итак, я должен получить свой MFA arnurl и получите идентификатор ключа мгновенного доступа, секретный ключ доступа и токен сеанса.

aws iam list-mfa-devices --user-name myuser12

Я получил команду «SerialNumber» (MFA arn url) сверху, которая понадобится мне позже для генерации токена сеанса.

Теперь,

aws sts get-session-token --serial-number arn:aws:iam::1234:mfa/myuser12 --token-code 123456

Примечание: 123456 (токен-код), сгенерированный из моего виртуального устройства MFA

Теперь у меня есть SessionToken (aws_session_token), SecrectAccessKey (aws_secret_access_key), AccessKeyId (aws_access_key_id) сверху команда вместе с отметкой времени истечения.

Итак, я обновил файлы .aws/config и .aws/credential на основе новых учетных данных.

.aws/config содержимое файла

[profile default]
region = us-east-1
output = json

[profile newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

.aws/credentials содержимое,

[default]
aws_access_key_id = NewIdFromMFACommand
aws_secrect_access_key = NewKeyFromMFACommand
aws_aws_session_token = TokenFromMFACommand      

[newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

Теперь я могу выполнить свою начальную команду

aws rds describe-db-instances --query 'DBInstances[?DBInstanceClass==`db.m3.large`]' --profile default --no-verify-ssl

И получить список db.m3.large экземпляров типа.

Но, когда я пытаюсь с--profile newacc Я ничего не получаю.Я действительно запутался, что менять и где менять?

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Наконец-то это работает!Кажется, мне нужно запустить команду ниже для каждой учетной записи.

aws sts assume-role --role-arn "arn:aws:iam::5678:role/MyRoleForThisAccount" --role-session-name AWSCLI-Session

Примечание. Укажите соответствующую роль (MyRoleForThisAccount), назначенную вашему пользователю в IAM, и убедитесь, что у пользователя есть разрешение на вызов AssumeRole

и обновите результат (учетные данные) длякаждый соответствующий блок в файле ~/.aws/credentials.Таким образом, файлы учетных данных будут выглядеть как

[default]
aws_access_key_id = NewIdFromMFACommand
aws_secrect_access_key = NewKeyFromMFACommand
aws_aws_session_token = TokenFromMFACommand      

[newacc]
aws_access_key_id = NewIdFromAssumeRoleCommandForThisAccount
aws_secrect_access_key = NewKeyFromAssumeRoleCommandForThisAccount
aws_aws_session_token = NewTokenFromAssumeRoleCommandForThisAccount

, а файл ~/.aws/config будет

[profile default]
region = us-east-1
output = json

[profile newacc]
region = eu-west-1
0 голосов
/ 20 июня 2019

Этот блок конфигурации:

[profile newacc]
region = eu-west-1
role_arn = arn:aws:iam::5678:role/myRole   
source_profile default                     
output = json

означает, что вы хотите принять myRole.Тем не менее, допущение роли может быть выполнено только пользователями IAM, которые авторизованы для принятия роли.Поэтому для подтверждения вашей личности требуются некоторые обычные учетные данные IAM.Это делается через source_profile.

. Строка source_profile default означает, что учетные данные в профиле default будут использоваться для вызова AssumeRole.

. Я рекомендую вам сохранитьваши учетные данные по умолчанию в качестве обычных учетных данных IAM.Когда вы звоните aws sts get-session-token, сохраните результат в другом профиле (не default, не newacc).Вы можете сделать это с помощью aws configure --profile sts (например).

Если вы хотите принять myRole, вы можете использовать --profile newacc.Это будет использовать ваши default учетные данные для вызова AssumeRole и будут использовать учетные данные роли для совершаемого вызова.

В результате получится три профиля:

  • default длязвоните get-session-token и AssumeRole
  • sts, чтобы доказать, что у вас есть MFA
  • newacc для использования роли
...