2

我有一个 Lambda 函数,它成功地在另一个账户中担任角色以从其 API 下载 WAF 命中。

我还需要从执行 Lambda 的帐户中获取 SSM 参数。当然,我可以先做这一步,然后再承担这个角色。

但我想知道是否有办法恢复 Lambda 本身的执行角色。以防将来可能发生一些链接?

4

1 回答 1

2

您的代码实际上并没有“交换”到不同的角色。

相反,在您的代码中,您指定要使用的凭据。

担任角色时,您将使用:

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使用所需凭据集创建的服务。然后,您可以随心所欲地在它们之间“交换”,因为重要的是每次呼叫使用的客户端。

于 2018-06-19T23:14:24.093 回答