принимая на себя роль экземпляра профиля boto3 python - PullRequest
0 голосов
/ 23 января 2020

У меня есть несколько 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()

1 Ответ

0 голосов
/ 23 января 2020

Укажите индивидуальный номер учетной записи AWS вместе с ключом доступа и секретом в скрипте, который позволит вам подключиться к учетной записи. Я пытался выполнить сценарии boto3 с серверов Jenkins для нескольких AWS учетных записей

  • Передано AWS номер учетной записи, секретный ключ и ключ доступа в качестве переменной среды, поэтому нет необходимости определять в сценарии. Вы можете попробовать любой из способов.
...