如何在serverless.yml中为跨服务多Lambda引用现有IAM策略?
跨Serverless服务复用已有IAM策略的方案
你当前用YAML锚点的方式只能在单个serverless.yml文件内复用策略,要实现跨服务复用,有以下两种可行方案:
方案一:抽离公共配置文件,跨服务引用
把通用的IAM策略定义抽成独立的YAML文件,在各个服务的serverless.yml中通过文件引用的方式调用,实现代码层面的跨服务复用。
- 创建公共策略文件(比如
common/policies.yml),存放通用策略:
idempotencyPolicy: Effect: Allow Action: - dynamodb:GetItem - dynamodb:PutItem - dynamodb:UpdateItem - dynamodb:DeleteItem Resource: - arn:aws:dynamodb:#{AWS::Region}:#{AWS::AccountId}:table/IdempotencyTable
- 在各个服务的
serverless.yml中引用该策略(注意根据实际目录结构调整文件路径):
some-lambda: handler: handler.func memorySize: 512 events: ... iamRoleStatementsName: some-name iamRoleStatements: - ${file(../../common/policies.yml):idempotencyPolicy} - Effect: Allow Action: - cloudwatch:GetMetricData Resource: "*"
方案二:引用AWS账户中已存在的托管策略
如果这个IAM策略已经在你的AWS账户中创建为独立的托管策略(而非内联策略),可以直接通过ARN将其附加到Lambda的IAM角色上,无需重复编写策略内容。
在serverless.yml的Lambda配置中添加managedPolicyArns字段,指定已有策略的ARN:
some-lambda: handler: handler.func memorySize: 512 events: ... iamRoleStatementsName: some-name managedPolicyArns: - arn:aws:iam::#{AWS::AccountId}:policy/你的策略名称 # 替换为实际策略名称 iamRoleStatements: - Effect: Allow Action: - cloudwatch:GetMetricData Resource: "*"
这种方式的优势是策略在AWS账户中统一管理,修改策略后所有附加该策略的Lambda都会自动生效,无需逐个更新服务配置。
内容的提问来源于stack exchange,提问作者Ohav
相关产品推荐
相关产品推荐

