Вам потребуется доступ к набору учетных данных, принадлежащих дочерней учетной записи.
С Доступ к учетным записям членов вашей организации и управление ими - Организации AWS :
Когда вы создаете учетную запись участника с помощью консоли AWS Organizations, AWS Organizations автоматически создает роль IAM в учетной записи. Эта роль имеет полные права администратора в учетной записи участника. Роль также настроена на предоставление этого доступа к основной учетной записи организации.
Чтобы использовать эту роль для доступа к учетной записи участника, вы должны войти в систему как пользователь с основной учетной записью, у которой есть разрешения для принятия роли.
Таким образом, вы можете предположить роль IAM в дочерней учетной записи , которая затем предоставляет набор временных учетных данных, которые можно использовать с boto3
для выполнения вызовов API для дочерней учетной записи.
import boto3
role_info = {
'RoleArn': 'arn:aws:iam::<AWS_ACCOUNT_NUMBER>:role/<AWS_ROLE_NAME>',
'RoleSessionName': '<SOME_SESSION_NAME>'
}
client = boto3.client('sts')
credentials = client.assume_role(**role_info)
session = boto3.session.Session(
aws_access_key_id=credentials['Credentials']['AccessKeyId'],
aws_secret_access_key=credentials['Credentials']['SecretAccessKey'],
aws_session_token=credentials['Credentials']['SessionToken']
)
Более простой способ - добавить роль в ваш файл .aws/config
в качестве нового профиля. Затем вы можете указать профиль при вызове функции:
# In ~/.aws/credentials:
[master]
aws_access_key_id=foo
aws_secret_access_key=bar
# In ~/.aws/config
[profile child1]
role_arn=arn:aws:iam:...
source_profile=master
Используйте это так:
session = boto3.session.Session(profile_name='dev')
s3 = session.client('s3')
См .: Как выбрать профиль AWS при использовании boto3 для подключения к CloudFront