如何将 IAM 角色分配给 SAM 模板中的隐式 API 网关?
How to assign IAM Role to implicit API Gateway in SAM template?
我有一个创建显式 lambda 和隐式 api 网关的 AWS SAM 模板(通过 Events
属性)。我需要为 lambda 和 api 网关分配特定和不同的 IAM 角色。虽然 lambda 角色从 SAM 模板语法中是不言而喻的,但我无法弄清楚如何将角色分配给 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"
为什么要向 API 网关添加角色? SAM 将自动(隐式)安排 API 网关有权使用 Lambda 资源策略调用 Lambda 函数(更多信息请参见 API 网关的 docs)
如果您想设置 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 文档对此并不完全清楚,但在编写上述设置工作时。
我有一个创建显式 lambda 和隐式 api 网关的 AWS SAM 模板(通过 Events
属性)。我需要为 lambda 和 api 网关分配特定和不同的 IAM 角色。虽然 lambda 角色从 SAM 模板语法中是不言而喻的,但我无法弄清楚如何将角色分配给 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"
为什么要向 API 网关添加角色? SAM 将自动(隐式)安排 API 网关有权使用 Lambda 资源策略调用 Lambda 函数(更多信息请参见 API 网关的 docs)
如果您想设置 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 文档对此并不完全清楚,但在编写上述设置工作时。