Lambda间调用场景下如何获取调用方身份(ARN、IAM角色等)
识别调用方Lambda身份的方案
由于Invoke API的事件内容由调用方完全控制,无法依赖事件数据,以下是几种从Lambda内部获取调用方身份的可靠方式:
1. 调用STS GetCallerIdentity API
这是最直接的方法:目标Lambda可以通过AWS Security Token Service (STS)的GetCallerIdentity接口,获取发起调用的实体身份ARN。调用方Lambda在执行Invoke API时,会使用自身的执行角色进行身份验证,因此GetCallerIdentity返回的ARN就是该执行角色的ARN。
你可以预先维护一份调用方Lambda与其执行角色ARN的映射表,通过匹配返回的ARN来识别具体调用方。需要确保目标Lambda的执行角色拥有sts:GetCallerIdentity的权限(可通过IAM策略配置)。
示例Python代码:
import boto3 def lambda_handler(event, context): sts = boto3.client('sts') caller_info = sts.get_caller_identity() caller_role_arn = caller_info['Arn'] # 预先配置的调用方角色与Lambda名称映射 caller_mapping = { "arn:aws:iam::123456789012:role/CallerLambda1-ExecutionRole": "Lambda调用方1", "arn:aws:iam::123456789012:role/CallerLambda2-ExecutionRole": "Lambda调用方2" } caller_name = caller_mapping.get(caller_role_arn, "未知调用方") return {"识别到的调用方": caller_name}
2. 利用AWS X-Ray追踪数据
如果你的Lambda开启了X-Ray追踪,目标Lambda可以通过X-Ray的上下文数据获取调用方的信息。X-Ray会记录调用链中的各个服务实体,包括发起调用的Lambda的ARN。不过这种方式需要额外配置X-Ray权限,且实现复杂度高于STS方法,适合已经启用X-Ray的场景。
注意事项
- Lambda的
context对象本身不直接提供调用方Lambda的身份信息,必须通过外部API或服务获取。 - 确保目标Lambda的执行角色拥有对应操作的权限(如
sts:GetCallerIdentity、xray:GetTraceSummaries等)。
内容的提问来源于stack exchange,提问作者Sébastien
相关产品推荐
相关产品推荐

