我有一个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存储桶中。
我尝试了这些,但是它不能存储数据...有什么方法可以强制使承担角色过期并获得我当前的访问角色来存储数据
答案 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
实际上并不会更改您的凭据。而是,您需要使用返回的凭据来创建新的客户端对象。因此,没有“过期”任何凭证的概念。