我如何强制过期承担角色以支持我的当前帐户将数据存储到我的当前帐户 s3 存储桶中

How can I force expire assume role to back my current account account store the data into my current account s3 bucket

我有一个 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 存储桶中。

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

当 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 实际上不会更改您的凭据。相反,您需要使用返回的凭据来创建新的客户端对象。因此,没有 "expiring" 任何凭据的概念。