无服务器框架 - 如何禁用所有 API 到 AWS Lambda 函数的路由并仅使用 SNS
Serverless Framework - How to disable all API routes to an AWS Lambda function and use SNS only
我正在使用无服务器框架并希望创建一个仅通过 SNS 通知触发的 AWS Lambda 函数。
functions:
myHandler:
handler: handler.foo
events:
- sns: mySNSTopic
但是这会生成 POST 路线:
Serverless: Routes for myHandler:
Serverless: POST /{apiVersion}/functions/my-app-staging-myHandler/invocations
为什么要这样做?我怎样才能禁用它?
更新我看到现在只有离线模式
为什么要这样做?我不知道。
如何禁用它?我可以帮你解决这个问题。我不知道如何阻止生成 POST 路由,但我可以向您展示如何阻止除 SNS 之外的任何其他内容调用您的函数。
你可以attach a resource-based IAM policy to your lambda function。具体来说,您可以附加一个策略,拒绝所有访问来调用 lambda 函数,但允许 SNS 调用它除外。
政策看起来像这样:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "InvokeMyLambdaFunctionOnlyFromSNS",
"NotPrincipal": {
"Service": [
"sns.amazon.com"
]
},
"Effect": "Deny",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:region:AccountID:function:function_name"
}]
}
玩了一下才发现它只是Serverless Offline创建的,并没有推送上线。我使用 sls 使用 sls lambda invoke
自行调用 Lambda。
我正在使用无服务器框架并希望创建一个仅通过 SNS 通知触发的 AWS Lambda 函数。
functions:
myHandler:
handler: handler.foo
events:
- sns: mySNSTopic
但是这会生成 POST 路线:
Serverless: Routes for myHandler:
Serverless: POST /{apiVersion}/functions/my-app-staging-myHandler/invocations
为什么要这样做?我怎样才能禁用它?
更新我看到现在只有离线模式
为什么要这样做?我不知道。
如何禁用它?我可以帮你解决这个问题。我不知道如何阻止生成 POST 路由,但我可以向您展示如何阻止除 SNS 之外的任何其他内容调用您的函数。
你可以attach a resource-based IAM policy to your lambda function。具体来说,您可以附加一个策略,拒绝所有访问来调用 lambda 函数,但允许 SNS 调用它除外。
政策看起来像这样:
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "InvokeMyLambdaFunctionOnlyFromSNS",
"NotPrincipal": {
"Service": [
"sns.amazon.com"
]
},
"Effect": "Deny",
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:region:AccountID:function:function_name"
}]
}
玩了一下才发现它只是Serverless Offline创建的,并没有推送上线。我使用 sls 使用 sls lambda invoke
自行调用 Lambda。