Переключение ролей пользователей IAM с помощью Athena и boto3 - PullRequest
0 голосов
/ 06 мая 2019

Я пишу программу на python с использованием boto3, которая захватывает все запросы, сделанные основной учетной записью, и передает их на все вспомогательные учетные записи основной учетной записи.

Получение идентификаторов запросов из главного экземпляра завершено, но у меня возникли проблемы с их отправкой во вспомогательные учетные записи. С моей аутентификационной информацией AWS подключается к основной учетной записи по умолчанию, но я не могу понять, как заставить ее подключиться к дополнительной учетной записи. Обычно сервисы AWS делают это путем смены ролей, но у Афины нет встроенного метода для этого. Я мог бы вручную создавать разные профили, но я не уверен, как переключать их вручную во время выполнения кода

Вот пример кода Amazon для переключения в STS, который поддерживает принятие различных ролей https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html

Вот как выглядит моя программа

#!/usr/bin/env python3
import boto3

dev = boto3.session.Session(profile_name='dev')
#Function for executing athena queries
client = dev.client('athena')
s3_input = 's3://dev/test/'
s3_output = 's3://dev/testOutput'
database = 'ex_athena_db'
table = 'test_data'

response = client.list_named_queries(
    MaxResults=50,
    WorkGroup='primary'
)
print response

Итак, у меня есть профиль "dev", но я не уверен, как дифференцировать этот профиль, чтобы указать AWS, что я хотел бы получить доступ к одной из дочерних учетных записей. Это просто имя или мне нужен какой-то другой параметр? Я не думаю, что могу (или должен) генерировать отдельный токен аутентификации для этого

1 Ответ

1 голос
/ 06 мая 2019

Я решил эту проблему, создав новый профиль пользователя для дополнительной учетной записи с новым ARN

пример конфигурации

[default]
region = us-east-1
[profile ecr-dev]
role_arn = arn:aws:iam::76532435:role/AccountRole
source_profile = default

пример кода

#!/usr/bin/env python3
import boto3

dev = boto3.session.Session(profile_name='name', region_name="us-east-1")
#Function for executing athena queries
client = dev.client('athena')
s3_input = 's3:/test/'
s3_output = 's3:/test'
database = 'ex_athena_db'

response = client.list_named_queries(
    MaxResults=50,
    WorkGroup='primary'
)
print response
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...