首页 > 解决方案 > 具有相同内联策略的 AWS SAM 多项功能

问题描述

在 AWS SAM .yaml 模板中,我可以为每个 lambda 函数声明一个内联策略,如下所示:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      - Statement:
        - Sid: SSMDescribeParametersPolicy
          Effect: Allow
          Action:
          - ssm:DescribeParameters
          Resource: '*'
        - Sid: SSMGetParameterPolicy
          Effect: Allow
          Action:
          - ssm:GetParameters
          - ssm:GetParameter
          Resource: '*'

但是,如果我希望多个函数共享同一个内联策略文档,我们是否在模板的“全局”部分声明它?

到目前为止,文档让我相信,最干净的方法是创建一个带有附加策略的角色,并简单地将角色声明给每个函数,而不是像这样:

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources: 
  MyFunction:
    Type: 'AWS::Serverless::Function' 
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip' 
      Role: arn:aws:iam::111111111111:role/SAMPolicy

有没有办法在模板中声明内联策略并简单地在每个函数上引用它?

标签: amazon-web-servicesaws-lambdaaws-sam

解决方案


内联策略不能被引用和重用。但是,您可以创建和引用AWS 托管策略SAM 策略模板,而不是内联策略。

如果您想使用可重用的自定义策略,则必须创建一个客户托管策略并通过Role属性附加到 Lambda 函数。


推荐阅读