问题描述
我们使用 AWS SAM 构建了一个服务。现在我们要为其添加身份验证。我们有一个 HTTP ApiGateway,我们想向它添加一个 IAM 身份验证器。不幸的是,我找不到关于如何做到这一点的任何示例或文档?我试过,以下选项:
exampleApi:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration: True
DeFinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: 'openapi.yaml'
StageName: v2
Auth:
DefaultAuthorizer: AWS_IAM
和
exampleApi:
Type: AWS::Serverless::HttpApi
Properties:
CorsConfiguration: True
DeFinitionBody:
'Fn::Transform':
Name: 'AWS::Include'
Parameters:
Location: 'openapi.yaml'
StageName: v2
fnExample:
Type: AWS::Serverless::Function
Properties:
Handler: index.example
Role: !GetAtt dataLambdaRole.Arn
Events:
getExample:
Type: HttpApi
Properties:
Path: /example
Method: get
ApiId: !Ref exampleApi
Auth:
Authorizer: AWS_IAM
不幸的是,它们都以错误结束。我能否请您分享一个示例或说明,说明如何在 AWS SAM 模板中为 HTTP ApiGateway 配置 IAM 授权方。
解决方法
我想我找到了。 不幸的是,目前(2021 年 1 月 21 日)看起来不可能使用 SAM 模板为 HTTP API 配置 IAM 安全性。这是我在 AWS 文档中发现的内容:
访问控制机制 | AWS::Serverless::HttpApi | AWS::Serverless::Api |
---|---|---|
Lambda 授权方 | ✓ | ✓ |
IAM 权限 | ✓ | |
Amazon Cognito 用户池 | ✓ | ✓ |
API 密钥 | ✓ | |
资源政策 | ✓ | |
OAuth 2.0/JWT 授权者 | ✓ |
更多详情请见here
AWS 方面有一些工作可以解决这个问题: