问题描述
在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
是否可以在模板中声明内联策略,而仅在每个函数上引用它?
解决方法
内联策略不能被引用和重复使用。但是,您可以创建和引用AWS Managed Policy或SAM policy template而不是内联策略。
如果要使用可重用的自定义策略,则必须创建Customer Managed Policy并通过Role
property附加到Lambda函数。
如果我希望多个功能共享同一内联策略文档,我们是否在模板的“全局”部分中声明它? 是。这是一个示例:
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Globals:
Function:
Policies:
- Statement:
- Sid: SSMDescribeParametersPolicy
Effect: Allow
Action:
- ssm:DescribeParameters
Resource: '*'
- Sid: SSMGetParameterPolicy
Effect: Allow
Action:
- ssm:GetParameters
- ssm:GetParameter
Resource: '*'
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/function.zip'
MyOtherFunction:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs8.10
CodeUri: 's3://my-bucket/other-function.zip'