AWS Lambda get-layer-version 是否不适用于跨账户?

Does AWS Lambda get-layer-version not work for cross-accounts?

我在 aws 账户 A 中有一个 AWS 层,在账户 B 中有一个引用该层的 Lambda 函数。我使用以下方法从账户 A 和许可账户 B 创建该层:

aws lambda add-layer-version-permission \
    --layer-name myLayer\
    --version-number <#> \
    --statement-id sharingWithAccountB \
    --principal <accountB-Id> \
    --action lambda:GetLayerVersion

我能够使用我的 sam 模板中的层 属性 通过 AWS SAM 获取账户 B 中的 lambda 函数以访问账户 A 中的层,即 运行 在账户 B:

Layers:
  - arn:aws:lambda:us-east-1:<accountA-id>:layer:myLayer:<#>

但是,当我尝试从帐户 B 到 运行 时:

aws lambda get-layer-version --layer-name myLayer --version-number <#>

我收到这个错误:

An error occurred (ResourceNotFoundException) when calling the GetLayerVersion operation: The resource you requested does not exist.

问题 1:如果 SAM 只是 AWS Lambda 上的包装器,那么跨账户层访问是否也适用于“aws lambda get-layer-version” ?

问题2:add-layer-version-permission是否只支持lambda:GetLayerVersion动作?当我 运行 执行操作 lambda:ListLayerVersions 时,出现以下错误:

An error occurred (ValidationException) when calling the AddLayerVersionPermission operation: 2 validation errors detected: Value 'lambda:ListLayerVersions' at 'action' failed to satisfy constraint: Member must satisfy regular expression pattern: lambda:GetLayerVersion; Value 'lambda:ListLayerVersions' at 'action' failed to satisfy constraint: Member must have length less than or equal to 22

我尝试授予此权限的原因是因为我正在尝试 运行 aws lambda list-layer-versions --layer-name arn:aws:lambda:us-east-1:<accounta#>:layer:myLayer 但收到此错误

An error occurred (AccessDeniedException) when calling the ListLayerVersions operation: User: arn:aws:sts::accountB#:assumed-role/cloud-deployer/accountB-role is not authorized to perform: lambda:ListLayerVersions on resource: arn:aws:lambda:us-east-1:accountA#:layer:myLayer because no resource-based policy allows the lambda:ListLayerVersions action

您提供给 get-layer-version 的层名称可以是层名称或层 A​​RN。如果您提供一个简单的名称,例如 mylayer,则没有任何内容明确指示您要查询哪个 AWS 账户,因此查询 运行s 针对与您使用的凭证关联的 AWS 账户,即账户 B,它没有这样的图层。

因此,使用 —-layer-name 提供该层的完整 ARN。然后,查询将针对帐户 A 运行 并找到该层。显然你需要跨账户权限,你有。