我有一个 Lambda 函数,它成功地在另一个账户中担任角色,以从其 API 下载 WAF 命中。
我还需要从执行 Lambda 的账户中获取 SSM 参数。 当然,我可以先做这一步,然后再担任角色。
但我想知道是否有办法恢复到 Lambda 本身的执行角色。 万一将来可能会发生一些连锁反应?
您的代码实际上并没有"交换"到不同的角色。
相反,在代码中,您可以指定要使用的凭据。
担任角色时,您将使用:
import boto3
sts_client = boto3.client('sts')
response = sts_client.assume_role(...)
assumed_session = boto3.Session(
aws_access_key_id=response['Credentials']['AccessKeyId'],
aws_secret_access_key=response['Credentials']['SecretAccessKey'],
aws_session_token=response['Credentials']['SessionToken'])
然后,您可以使用该Session
连接到服务:
# Connect to WAF using assumed_session
waf_client = assumed_session.client('waf')
response = waf_client.get_sampled_requests(...)
当您稍后想要使用提供给 Lambda 函数的默认凭证时,只需使用常规语法:
# Note: No 'Session' here, just the normal way to connect
ssm_client = boto3.client('ssm')
response = client.get_parameter(...)
因此,不要考虑"登录"一组特定的凭据。相反,当调用服务时,请提供使用所需的凭据集创建的client
。然后,您可以根据需要在它们之间"交换",因为重要的是用于每次调用的客户端。