簡體   English   中英

假設角色實例配置文件 boto3 python

[英]assuming role instance profile boto3 python

我有多個 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()

在腳本中指定個人 AWS 賬號以及訪問密鑰和秘密,這將允許您連接到帳戶。 我試圖從 Jenkins 服務器執行 boto3 腳本到多個 AWS 賬戶

  • 將 AWS 帳號、密鑰和訪問密鑰作為環境變量傳遞,因此無需在腳本中定義。 你可以嘗試任何一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM