如何强制失效承担角色来备份我的当前帐户帐户并将数据存储到我的当前帐户s3存储桶中

时间:2019-06-22 03:06:11

标签: amazon-web-services aws-lambda aws-sts

我有一个lambda,我可以通过该角色访问一个交叉帐户

sts = boto3.client('sts')
sts.assume_role(RoleArn='A', RoleSessionName='aaa')

现在访问此页面后我做了一些操作

就像我得到一些实例信息一样。

  ec2 = boto3.client('ec2')
  desc = ec2.describe_instaces() #this all are  working fine

现在,我想备份我的lambda角色(B)并存储此数据。

 sts2 = boto3.client('sts')
 sts2.assume_role(RoleArn='B', RoleSessionName='bbb')

,并希望将这些实例数据desc存储到我当前的lambda帐户的一个s3存储桶中。

我尝试了这些,但是它不能存储数据...有什么方法可以强制使承担角色过期并获得我当前的访问角色来存储数据

1 个答案:

答案 0 :(得分:1)

将IAM角色分配给AWS Lambda函数后,一组临时凭证将自动提供给该函数。然后,该函数内的代码只需调用AWS服务即可使用这些凭证,例如:

ec2_client = boto3.client('ec2')

当您担任角色时,将返回一组新的凭据。

response = sts.assume_role(RoleArn='A', RoleSessionName='aaa')

response将包含:

{
    'Credentials': {
        'AccessKeyId': 'string',
        'SecretAccessKey': 'string',
        'SessionToken': 'string',
        'Expiration': datetime(2015, 1, 1)
    },
    'AssumedRoleUser': {
        'AssumedRoleId': 'string',
        'Arn': 'string'
    },
    'PackedPolicySize': 123
}

如果您希望在随后的AWS调用中使用这些假定的凭据,则需要创建一个Session对象,然后使用该Session创建一个新的对象。 Client

session = Session(aws_access_key_id=response['Credentials']['AccessKeyId'],
                  aws_secret_access_key=response['Credentials']['SecretAccessKey'],
                  aws_session_token=response['Credentials']['SessionToken'])

assumed_client = session.client('ec2')
instances_response = assumed_client.describe_instances()    

底线::致电assume-role实际上并不会更改您的凭据。而是,您需要使用返回的凭据来创建新的客户端对象。因此,没有“过期”任何凭证的概念。