我有一个AWS SAM模板,该模板创建一个显式的lambda和隐式的api网关(通过Events
属性)。我需要为lambda和api网关分配特定且不同的IAM角色。从SAM模板语法来看,lambda角色是不言而喻的,但我无法弄清楚如何为api网关分配角色。
例如
# template.yaml
...
Resources:
MyLambda:
Type: AWS::Serverless::Function
Properties:
FunctionName: very-important-lambda
Handler: src/index.handler
Runtime: nodejs8.10
Role: !Sub "arn:aws:iam::${AWS::AccountId}:role/lambda-role-name
CodeUri: ./build
# Below event creates an AWS::ApiGateway::RestApi resource, but how do I give that resource an IAM Role?
Events:
PostDomainEvent:
Type: Api
Properties:
Method: POST
Path: "/path/resource/v1"
答案 0 :(得分:0)
为什么要向API网关添加角色? SAM会自动(隐式)安排API网关具有使用Lambda资源策略(有关API网关的docs中的更多信息)来调用Lambda函数的权限
如果要设置API网关的资源策略或设置其他设置,则可以显式定义Lambda事件使用的API。
例如设置资源策略:
RestApi:
Type: AWS::Serverless::Api
Properties:
Policy: >
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:root"
},
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:eu-central-1: 123456789012:7mancjlc5z/*"
}
]
}
Function:
Type: AWS::Serverless::Function
Properties:
Events:
ApiRequest:
Type: Api
Properties:
Path: /v1/comments
Method: post
RestApiId: !Ref RestApi
关于SAM文档尚不十分清楚,但是在撰写上述设置工作时。