跨AWS账户:能否通过Secrets Manager轮换调用其他账户的Lambda函数?
跨AWS账户Secrets Manager调用Lambda实现密钥自动轮换解决方案
需求背景
我们希望将Lambda函数打造为可被不同账户的Secrets Manager调用的中心化服务,以此实现跨多账户的密钥自动轮换功能。Secrets Manager与Lambda函数处于同一区域,目标是选择部署在其他AWS账户中的Lambda函数作为轮换触发源。
(示意图说明:Secrets Manager Rotation架构图展示了多账户Secrets Manager调用中心化Lambda函数进行密钥轮换的流程)
已尝试但未成功的操作
- 通过IAM角色与角色假设实现跨AWS账户访问授权
- 为Lambda函数添加基于资源的策略
正确配置步骤(需同时满足)
要实现跨账户调用,必须同时配置Lambda资源策略和Secrets Manager轮换角色权限,两者缺一不可:
1. 配置Lambda函数的资源策略
给目标Lambda添加资源策略,明确允许指定账户的Secrets Manager服务调用该函数,示例策略如下(替换占位符为实际值):
{ "Version": "2012-10-17", "Id": "LambdaCrossAccountRotationPolicy", "Statement": [ { "Sid": "AllowSecretsManagerInvocation", "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:<Lambda所在账户ID>:function:<Lambda函数名>", "Condition": { "StringEquals": { "aws:SourceAccount": "<Secrets Manager所在账户ID>" }, "ArnLike": { "aws:SourceArn": "arn:aws:secretsmanager:<区域>:<Secrets Manager所在账户ID>:secret:*" } } } ] }
- 必须通过
aws:SourceAccount和aws:SourceArn限制调用来源,避免权限过度开放。
2. 配置Secrets Manager所在账户的轮换执行角色
在Secrets Manager所在账户创建IAM角色,需包含两部分配置:
信任关系(允许Secrets Manager扮演该角色)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
权限策略(允许调用Lambda及密钥轮换操作)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:<Lambda所在账户ID>:function:<Lambda函数名>" }, { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], "Resource": "arn:aws:secretsmanager:<区域>:<当前账户ID>:secret:<目标密钥名>" } ] }
3. 配置Secrets Manager轮换规则
在Secrets Manager控制台操作:
- 启用目标密钥的轮换功能
- 选择「自定义Lambda函数」,输入跨账户Lambda的完整ARN(格式:
arn:aws:lambda:<区域>:<Lambda账户ID>:function:<函数名>) - 指定之前创建的轮换执行角色
常见排查点
如果之前配置失败,可检查:
- Lambda资源策略中的
aws:SourceAccount和aws:SourceArn是否与Secrets Manager所在账户及资源匹配 - 轮换执行角色的信任关系是否正确授权Secrets Manager服务
- 确认Lambda与Secrets Manager处于同一区域(此为硬性要求)
- Lambda自身的执行角色是否具备完成轮换逻辑所需的权限(如数据库访问、其他AWS服务调用等)
内容的提问来源于stack exchange,提问作者Nonrev
相关产品推荐
相关产品推荐

