У меня есть несколько AWS учетных записей, и я пытаюсь запустить сценарий для всех учетных записей из профиля центральной учетной записи / экземпляра.
У меня возникают проблемы при назначении роли / ориентации на другие учетные записи с созданной ролью. и разрешено для профиля экземпляра в python сценарий boto3.
Я пробовал 2 функции ниже, но сценарий всегда работает с локальной учетной записью, где находится экземпляр. Как мне указать скрипту python запускаться с целевой учетной записью?
def access_sub_account(access_key, secret_key, account_id, role_arn):
client = boto3.client('sts', aws_access_key_id=access_key, aws_secret_access_key=secret_key)
response = client.assume_role(RoleArn=arn:aws:iam::12345678910:role/Role, RoleSessionName='CTOpsLambdaAuditRole')
return response['Credentials']['AccessKeyId'], \
response['Credentials']['SecretAccessKey'], \
response['Credentials']['SessionToken']
arn_role='arn:aws:iam::12345678910:role/Role'
arn_session='Role'
def assume_role(arn, session_name):
"""aws sts assume-role --role-arn arn:aws:iam::00000000000000:role/example-role --role-session-name example-role"""
client = boto3.client('sts')
assume_account_id = client.get_caller_identity()["Account"]
print("Current Account ID",assume_account_id)
response = client.assume_role(RoleArn=arn, RoleSessionName=session_name)
session = Session(aws_access_key_id=response['Credentials']['AccessKeyId'],
aws_secret_access_key=response['Credentials']['SecretAccessKey'],
aws_session_token=response['Credentials']['SessionToken'])
client = session.client('sts')
assume_account_id = client.get_caller_identity()["Account"]
print('Account ID Assumed:',assume_account_id)
Я вижу, что роль верна, если я установил этот параметр, но сценарий запускается для локальной учетной записи, где профиль экземпляра обновляется
assume_role(arn_role, arn_session)
account_id = boto3.client('sts').get_caller_identity()['Account']
: при печати ответа ему назначается правильная роль и ключи. Сценарий продолжает использовать локальный профиль из экземпляра локальной учетной записи. Нужно ли экспортировать учетные данные в ~ / .aws / credentials?
Response is: {'Credentials': {'AccessKeyId': 'ABCDEGHJJJJJJJSSSSSS', 'SecretAccessKey': '123456789876543212344567898765653322', 'SessionToken': 'sessiontokenblahblah==', 'Expiration': datetime.datetime(2020, 1, 23, 16, 44, 32, tzinfo=tzlocal())}, 'AssumedRoleUser': {'AssumedRoleId': 'AccesskeyId:Role', 'Arn': 'arn:aws:sts::123456789:assumed-role/Role/Role'}, 'ResponseMetadata': {'RequestId': '3f8839b4-3df7-11ea-85e2-316d5eca0a34', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '3f8839b4-3df7-11ea-85e2-316d5eca0a34', 'content-type': 'text/xml', 'content-length': '1095', 'date': 'Thu, 23 Jan 2020 15:44:31 GMT'}, 'RetryAttempts': 0}}
Мне удалось заставить его предполагать обновление .aws / config и учетные данные и добавление кода ниже, теперь проблема запускается для обеих учетных записей
boto3.setup_default_session(profile_name='Role')
session = boto3.session.Session()
temp_credentials = session.get_credentials().get_frozen_credentials()