AWS Lambda跨账号访问层时get-layer-version接口异常及权限问题
问题1解答
你调用aws lambda get-layer-version失败的核心原因是命令参数填写错误:当访问跨账号的层时,--layer-name参数不能只写层的短名称myLayer,短名称默认会指向当前操作账号(账号B)的同名称层,自然会报资源不存在。
你只需要把命令中的--layer-name替换为和SAM模板中一致的完整层ARN即可正常调用,正确命令如下:
aws lambda get-layer-version --layer-name arn:aws:lambda:us-east-1:<accountA-id>:layer:myLayer --version-number <#>
SAM模板中你填写的是完整ARN,所以可以正常定位到账号A的层资源,和CLI调用的逻辑并不冲突。
问题2解答
是的,add-layer-version-permission接口仅支持配置lambda:GetLayerVersion这一个操作,这是AWS Lambda的原生设计:
- 该接口作用的资源是单个具体版本的层,而非整个层本身,权限校验逻辑已经通过正则硬限制了仅允许传入
lambda:GetLayerVersion,所以你配置其他操作都会报参数校验错误。 lambda:ListLayerVersions是作用于整个层(所有版本)的操作,目前不支持通过层版本的资源策略跨账号授权。
如果你需要在账号B查询账号A的层版本,有两种可行方案:
- 每次调用时直接指定具体版本的ARN使用,无需查询版本列表
- 在账号A中创建一个允许账号B角色代入的IAM角色,为该角色配置
lambda:ListLayerVersions权限,账号B侧先代入该角色再调用版本查询接口
内容的提问来源于stack exchange,提问作者virenstack
相关产品推荐
相关产品推荐

