CLI AWS: получение сведений о родительском пользователе после sts-accept-role - PullRequest
2 голосов
/ 15 апреля 2019

Я пытаюсь автоматизировать некоторые теги с помощью Ansible playbooks.Одна из вещей, которую я хочу сделать, - пометить ресурс именем пользователя, который его создал.Проблема в том, что sts-accept-role скрывает пользовательские данные учетной записи верхнего уровня.

# cat ~/.aws/credentials
[default]
aws_secret_access_key = gggggggggggggggggggggggggggggggggg
aws_access_key_id = JJJJJJJJJJJJJJJJJJJJ

[childaccount]
role_arn = arn:aws:iam::0123456789:role/child-acct-admin
source_profile = default

# aws iam get-user
{
    "User": {
        "Arn": "arn:aws:iam::4567891230:user/someuser",
        "UserName": "someuser",
        "UserId": "CCCCCCCCCCCCCCCCC",
        "Path": "/",
        "CreateDate": "2018-01-04T15:21:51Z",
        "PasswordLastUsed": "2019-01-11T15:24:32Z"
    }
}

# aws opsworks --region us-east-1 describe-my-user-profile
{
    "UserProfile": {
        "IamUserArn": "arn:aws:iam::4567891230:user/someuser",
        "Name": "someuser",
        "SshUsername": "someuser"
    }
}

# export AWS_DEFAULT_PROFILE=childaccount
# aws opsworks --region us-east-1 describe-my-user-profile
{
    "UserProfile": {
        "SshUsername": "child-acct-admin-botocore-sess",
        "Name": "child-acct-admin/botocore-session-123456789",
        "IamUserArn": "arn:aws:sts::234567898:assumed-role/child-acct-admin/botocore-session-123456789"
    }
}

# aws iam get-user

An error occurred (ValidationError) when calling the GetUser operation: Must specify userName when calling with non-User credentials

Мне нужна какая-то команда, которую я могу выполнить, чтобы предоставить мне данные учетной записи верхнего уровня.Единственная возможность, о которой я могу подумать, - это проанализировать файл учетных данных и попытаться использовать имя предполагаемой роли для сопоставления с загруженным профилем и родительским профилем.Затем передайте ключи непосредственно учетной записи верхнего уровня (в данном примере по умолчанию), чтобы указать действительное имя пользователя.Это намного сложнее, чем должно быть.

1 Ответ

0 голосов
/ 16 апреля 2019

Я прошел долгий путь.В этом подходе предполагается, что учетные данные и роль дочерней учетной записи определены в вашем файле ~ / .aws / credentials.Написано в Ansible.

- name: Query AWS role loaded
  shell: aws opsworks --region us-east-1 describe-my-user-profile --query 'UserProfile.Name' | awk -F'["/]' '{print $2}'
  register: role_in_use

- name: Discover AWS profile loaded
  shell: awk '/\[/{prefix=$0; next} $1{print prefix $0}' ~/.aws/credentials | grep role/{{ role_in_use.stdout }} | awk -F'[][]' '{print $2}'
  register: profile_in_use

- name: Find AWS source profile
  shell: awk '/\[/{prefix=$0; next} $1{print prefix $0}' ~/.aws/credentials| grep "\[{{ profile_in_use.stdout }}\]source_profile =" | awk '{print $3}'
  register: src_profile

- name: Set AWS source user
  shell: aws opsworks --region us-east-1 describe-my-user-profile --query 'UserProfile.Name' --profile {{ src_profile.stdout }} | awk -F'["/]' '{print $2}'
  register: src_user

Оттуда вы можете ссылаться на имя пользователя ala: {{src_user.stdout}}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...