2017-05-25 1 views
1

J'essaie d'utiliser le rôle AssumeRole de telle sorte que je parcours plusieurs comptes et récupère des actifs pour ces comptes. Je l'ai fait à ce point:AWS: Boto3: exemple AssumeRole qui inclut l'utilisation du rôle

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") 

Grand, j'ai le assumedRoleObject. Mais maintenant je veux utiliser cela pour lister des choses comme des ELB ou quelque chose qui n'est pas une ressource intégrée de bas niveau.

Comment va-t-on dans ce sens? Si je peux demander - s'il vous plaît coder un exemple complet, afin que tout le monde puisse bénéficier.

Répondre

1

Il est plus facile et pour une raison quelconque façon non documentée de la création d'une telle session:

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

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

EDIT: cela ne semble pas fonctionner, j'en étais sûr, mais maintenant j'essaye à nouveau et ce n'est pas le cas.

0

Vous pouvez assumer le rôle en utilisant STS jeton, comme:

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'] 

Cela vous donnera la clé d'accès temporaire et les clés secrètes, avec jeton de session. Avec ces informations d'identification temporaires, vous pouvez accéder à n'importe quel service. Pour exemple, si vous voulez accéder ELB, vous pouvez utiliser le code ci-dessous:

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