无服务器 - 如何将多个文件添加到 iamRoleStatements?

2024-03-22

In my serverless.yml文件,我希望能够添加iamRoleStatements来自两个不同的文件(这不能改变)。所以我尝试这样做:

provider:
  iamRoleStatements: 
    - ${file(__environments.yml):dev.iamRoleStatements, ''}
    - ${file(custom.yml):provider.iamRoleStatements, ''}

每个文件都有一个iamRoleStatements部分。

__environments.yml:

dev:
  iamRoleStatements:
    - Effect: 'Allow'
      Action: 'execute-api:Invoke'
      Resource: '*'

自定义.yml:

provider:
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - lambda:InvokeFunction
      Resource:
        - "*"

就个人而言,他们每个人都表现出色。但当我尝试跑步时sls deploy对于他们两个,我遇到以下错误:

iamRoleStatements 应该是一个对象数组,其中每个对象都有 Effect、Action / NotAction、Resource / NotResource 字段。具体来说,语句 0 缺少以下属性:Effect、Action / NotAction、Resource / NotResource;语句 1 缺少以下属性:Effect、Action / NotAction、Resource / NotResource

我在线搜索,这似乎适用于无服务器文件的其他部分,例如resources:

# This works perfectly well.
resources: 
  - ${file(custom.yml):resources, ''}
  - ${file(__environments.yml):resources, ''}

所以我想知道是否有任何解决方案,或者它是否是无服务器框架当前不支持的东西。

感谢您的帮助。


你必须克服一些困难才能到达那里。

文件合并限制

无服务器框架允许在配置中的任何位置导入文件,但只合并resources and functions https://github.com/serverless/serverless/blob/master/lib/classes/Service.js#L158部分。

你的例子:

provider:
  iamRoleStatements: 
    - ${file(__environments.yml):dev.iamRoleStatements, ''}
    - ${file(custom.yml):provider.iamRoleStatements, ''}

结果是一个数组数组,如下所示:

{
  "provider": {
    "iamRoleStatements": [
      [
        {
          "Effect": "Allow",
          "Action": "execute-api:Invoke",
          "Resource": "*"
        }
      ],
      [
        {
          "Effect": "Allow",
          "Action": [
            "lambda:InvokeFunction"
          ],
          "Resource": [
            "*"
          ]
        }
      ]
    ]
  }
}

您也许可以提交一个非常小的拉取请求来纠正这个问题。

使用引用的 IAM 托管策略

可以将每个 IAM 角色定义为自定义资源,并使用iamManagedPolicies提供者配置 https://serverless.com/framework/docs/providers/aws/guide/iam#the-default-iam-role指向其中每一个资源。就像是:

provider:
    name: aws
    iamManagedPolicies:
        - Ref: DevIamRole
        - Ref: CustomIamRole

resources:
    - ${file(__environments.yml):resources, ''}
    - ${file(custom.yml):resources, ''}

当然,您需要将这两个文件的结构更改为AWS::IAM::Role资源。

自定义 IAM 角色

该框架还为您提供了完全控制的选项,即完整记录 https://serverless.com/framework/docs/providers/aws/guide/iam#custom-iam-roles.

我希望这有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无服务器 - 如何将多个文件添加到 iamRoleStatements? 的相关文章

随机推荐