gpt4 book ai didi

amazon-web-services - 使用无服务器,如何从资源中将 Lambda 函数的授权方设置为 Cognito 用户池?

转载 作者:行者123 更新时间:2023-12-04 08:07:02 24 4
gpt4 key购买 nike

在我的 serverless.yml 中,我有一个 Lambda 函数,我想将它的授权方设置为我在下面的引用资料部分中声明的 Cognito 用户池。我见过授权人设置为 aws_iam 的例子但这似乎是错误的。任何帮助都会很棒:)

我想我需要将授权方的 ARN 设置为池的 ARN,但我如何获得呢?或者这甚至是正确的?

最佳答案

正如另一个答案中所述,对 ARN 进行硬编码是有效的。很直观,你可能会认为这样的事情会奏效:

    authorizer:
arn:
Fn::GetAtt: [UserPool, Arn]

可悲的是,事实并非如此。看起来无服务器会影响您的 arn对照几个正则表达式来确定您是指向 lambda 还是用户池。这种方法似乎不适用于使用诸如 Ref 之类的方法的方法。 , Fn::Join , 或 Fn::GetAtt
截至 Serverless 1.27.3 (自提出此问题以来已发布),有 a workaround of sorts可用的。

本质上,您在 resources 中声明了您的授权人。部分,而不是让无服务器自动为您创建它。那你用新的 authorizerId输入您的 functions部分指向此授权人。一个最小的例子:
service: sls-cognitotest

provider:
name: aws
runtime: nodejs6.10
functions:
hello:
handler: handler.hello
events:
- http:
method: any
path: /api/{proxy+}
integration: lambda
authorizer:
type: COGNITO_USER_POOLS
authorizerId: { Ref: MyApiGatewayAuthorizer }
resources:
Resources:
CognitoUserPoolGeneral:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: general
MyApiGatewayAuthorizer:
Type: AWS::ApiGateway::Authorizer
Properties:
AuthorizerResultTtlInSeconds: 10
IdentitySource: method.request.header.Authorization
Name: MyCognitoAuthorizer
RestApiId:
Ref: ApiGatewayRestApi
Type: COGNITO_USER_POOLS
ProviderARNs:
- {"Fn::Join": ["", ["arn:aws:cognito-idp:", {Ref: "AWS::Region"}, ":", {Ref: "AWS::AccountId"}, ":userpool/", Ref: CognitoUserPoolGeneral]]}

这不是很好,但比必须将用户池 ARN 硬编码到您的模板中要好。

关于amazon-web-services - 使用无服务器,如何从资源中将 Lambda 函数的授权方设置为 Cognito 用户池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50145879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com