2017-05-25 1 views
1

私はAssumeRoleを使用して、複数のアカウントをトラバースし、それらのアカウントのアセットを取得しています。私はこの時点までにそれを作った:AWS:Boto3:役割の使用を含むAssumeRoleの例

import boto3 
stsclient = boto3.client('sts') 

assumedRoleObject = sts_client.assume_role(
RoleArn="arn:aws:iam::account-of-role-to-assume:role/name-of-role", 
RoleSessionName="AssumeRoleSession1") 

いいえ、私は想定したロールオブジェクトを持っています。しかし、今では、ELBや組み込みの低レベルリソースではないもののようなものを一覧表示するために、このコードを使用したいと思います。

これを行うにはどうすればよいですか?もし私が尋ねることがあれば - 誰もが恩恵を受けることができるように、完全な例をコード化してください。あなたが好きな、STSはトークン使用して役割を引き受けることができる

答えて

1

、このようなセッションを作成するのが容易といくつかの理由のために文書化されていない方法があります:あなたはELBにアクセスしたい場合例:について、あなたは以下のコードを使用することができます。これは動作していないようだ、私はそれが確信していたが、今私は再び試しているし、それはしません。

0

class Boto3STSService(object): 
def __init__(self, arn): 
    sess = Session(aws_access_key_id=ARN_ACCESS_KEY, 
        aws_secret_access_key=ARN_SECRET_KEY) 
    sts_connection = sess.client('sts') 
    assume_role_object = sts_connection.assume_role(RoleArn=arn, RoleSessionName=ARN_ROLE_SESSION_NAME,DurationSeconds=3600) 
    self.credentials = assume_role_object['Credentials'] 

これは、セッショントークンで、あなたの一時的なアクセスキーと秘密鍵を与えるだろう。これらの一時的な資格情報を使用すると、任意のサービスにアクセスできます。

session = boto3.Session(
    role_arn = 'arn:aws:iam::${ACCOUNT}:role/${ROLE NAME}' 
) 

ec2 = session.client('ec2') # ... etc. 

EDIT:

self.tmp_credentials = Boto3STSService(arn).credentials 

def get_boto3_session(self): 
     tmp_access_key = self.tmp_credentials['AccessKeyId'] 
     tmp_secret_key = self.tmp_credentials['SecretAccessKey'] 
     security_token = self.tmp_credentials['SessionToken'] 

    boto3_session = Session(
     aws_access_key_id=tmp_access_key, 
     aws_secret_access_key=tmp_secret_key, aws_session_token=security_token 
    ) 
    return boto3_session 
def get_elb_boto3_connection(self, region): 
    sess = self.get_boto3_session() 
    elb_conn = sess.client(service_name='elb', region_name=region) 
    return elb_conn 
関連する問題