使用带External ID的IAM角色后,AWS NodeJS SDK无法创建Lambda函数
问题原因及解决方案
核心问题
你的IAM角色信任策略存在逻辑错误:将第三方IAM用户(需要External ID验证)和Lambda服务主体放在了同一条信任声明中,并统一附加了sts:ExternalId条件。但Lambda服务在尝试扮演该角色时无法提供External ID,导致这条声明对Lambda服务不生效,进而触发"无法被Lambda扮演"的错误。
修正后的信任策略
将信任策略拆分为两条独立的Statement,分别处理第三方用户的角色委托和Lambda服务的角色扮演:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::000000000000:user/admin" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "abcde" } } }, { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
原理说明
- 第三方用户通过STS AssumeRole获取临时凭证时,必须携带External ID,匹配第一条声明的条件,确保只有授权的外部实体能获取角色权限。
- Lambda服务在执行函数时扮演角色,不需要提供External ID,第二条声明专门为Lambda服务开放权限,无额外条件限制,满足Lambda的角色扮演要求。
验证步骤
- 更新第三方账号中
Third-party角色的信任策略为上述内容。 - 重新执行你的STS AssumeRole和Lambda创建代码,即可正常完成函数创建。
内容的提问来源于stack exchange,提问作者Malem
相关产品推荐
相关产品推荐

