我正在使用AWS API Gateway和AWS Lambda创建一个服务器较少的REST API.虽然已创建端点并与相应的Lambda函数链接,但下一步是添加身份验证层以通过电子邮件和密码对用户进行身份验证.根据我从文档中可以理解的,API网关方法可以支持基于API密钥的访问或基于IAM的访问.但我无法理解如何使用API密钥安全地实现身份验证.
我是否必须创建用于进行身份验证和管理用户的服务器?有没有什么办法可以成为一个完整的服务器而不是端到端的应用程序?任何指向正确方向的资源都将受到高度赞赏.我在看这个文件的时刻
我一直在努力研究如何使用Lambda代理集成来表达(在cloudformation中)具有Lambda函数集成类型的API网关资源.
但是,AWS :: ApiGateway :: Method CloudFormation资源中没有相应的字段(它应该在Integration属性中).
如何在cloudformation中配置它?
我正在尝试将eu-central-1颁发的证书用于我的 apigateway,它是区域性的并且在同一区域工作。
我的地形代码如下:
//ACM Certificate
provider "aws" {
region = "eu-central-1"
alias = "eu-central-1"
}
resource "aws_acm_certificate" "certificate" {
provider = "aws.eu-central-1"
domain_name = "*.kumite.xyz"
validation_method = "EMAIL"
}
//Apigateway
resource "aws_api_gateway_rest_api" "kumite_writer_api" {
name = "kumite_writer_api"
endpoint_configuration {
types = ["REGIONAL"]
}
}
resource "aws_api_gateway_domain_name" "domain_name" {
certificate_arn = aws_acm_certificate.certificate.arn
domain_name = "recorder.kumite.xyz"
endpoint_configuration {
types = ["REGIONAL"]
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不断收到此错误:
错误:创建 API 网关域名时出错:BadRequestException:无法在 REGIONAL 处于活动状态时为 EDGE 导入证书。
我在这里缺少什么?我认为我的 ApiGateway 不是 EDGE 而是 REGIONAL,所以找不到错误的意义......
我正在尝试按照https://aws.amazon.com/premiumsupport/knowledge-center/api-gateway-migrate-accounts-regions/ 中的说明导出和导入 AWS Gateway API 。
导出工作:
aws apigateway get-export --parameters extensions='apigateway' --rest-api-id MY_REST_API_ID --stage-name Prod --export-type swagger my-api-apigateway.json
Run Code Online (Sandbox Code Playgroud)
我的 API 的相同文件是使用--parameters extensions='apigateway'
和生成的--parameters extensions='integrations'。
但是当我尝试从导出的文件中进行导入时:
aws apigateway import-rest-api --fail-on-warnings --body file://%cd%/my-api-gateway.json
Run Code Online (Sandbox Code Playgroud)
,我总是收到“无效的 base64:”错误。像这样:
Invalid base64: "{
"swagger" : "2.0",
"info" : {
"version" : "1.0",
"title" : "my-stack-name"
},
"host" : "MY_REST_API_ID.execute-api.eu-central-1.amazonaws.com",
"basePath" : "/Prod",
...
Run Code Online (Sandbox Code Playgroud)
谷歌上没有文档和示例说 body 应该是 Base64。
当我通过 UI(操作 -> 导入 API)导入它时,相同的 JSON 似乎有效。
我也尝试使用--cli-input-json:
my-api-apigateway-cli-json.json文件(根据aws apigateway …
我正在构建一个由Lambda函数提供服务的API,但我需要这些API是异步的,而不是将API-Gateway直接连接到Lambda函数我使用"AWS服务代理"来发布 SNS消息然后拥有Lambda函数订阅相关的SNS主题,以便它接收请求的传递.这是一张说明流程的图片:
我已经单独测试了Lambda函数以及SNS和Lambda之间的pub/sub消息传递,但我正在努力使用API-Gateway进行SNS切换.文档很轻,但我现在假设的是必须在POST请求中发送以下属性:
操作:API-Gateway提供在UI中设置它,我已经放入了发布操作,这是适当的SNS操作
消息:POST消息的正文应该是JSON文档.它将由Web客户端传递,并通过网关代理到SNS.
TopicArn:表示我们要发布的SNS主题.在我的设计中,这将是一个静态值/端点,所以我更喜欢Web客户端也不必通过它,但如果它更容易做到这一点也会很好.
我尝试了很多东西,但我只是卡住了.很想在某处找到一个好的代码示例,但任何帮助都会受到赞赏.
想要为我目前的尝试增加更多的背景:
我尝试发布我的API并使用Postman尝试获得有效的响应.这是邮递员屏幕(一个用于标题变量,一个用于JSON正文):
这会导致以下错误消息:
{
"Error": {
"Code": "InvalidParameter",
"Message": "Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter",
"Type": "Sender"
},
"RequestId": "b33b7700-e8a3-58f7-8ebe-39e4e62b02d0"
}
Run Code Online (Sandbox Code Playgroud)
错误似乎表明TopicArn参数没有发送到SNS,但我在API-Gateway中包含以下内容:
我创建了一个带有Serverless(serverless.com)的API端点,我通过API Gateway公开了它.虽然我已经启用了CORS,但我收到了以下错误
XMLHttpRequest无法加载 https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/development/signup.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许访问来源' http://yyyyyyyy.com.s3-website-us-east-1.amazonaws.com '.
尽管我已经设置了origin标题,但是当我使用Postman发出请求时,我没有收到任何错误.我该如何解决这个问题?
我试图通过AWS API Gateway调用Lambda函数.
当我尝试IAM身份验证,API密钥身份验证以及没有身份验证时,我一直收到此错误.

{"message":"Missing Authentication Token"}
Run Code Online (Sandbox Code Playgroud)
由于不存在端点,有些人遇到了同样的问题.但是,我直接从Lambda Function AWS控制台获取了我的端点.

我一直在尝试在浏览器和邮递员中打开URL(使用和不使用标头身份验证:x-api-key:*****************).

两者都回答了上述错误.
authentication amazon-web-services aws-lambda aws-api-gateway
我们开发了一个应用程序,它提供了多个休息服务,并支持Accept-Encoding通过Content-Encoding:gzip标头值返回压缩内容的标头.
此应用程序部署在aws上的ec2实例上,当我们发送带有Accept-Encoding值设置的请求时,响应被正确构建.
我们希望通过使用api网关公开这个api,但它只是为了不压缩请求而工作.当我们发送请求gzip压缩内容的请求时,Content-Encoding标头设置正确但响应内容已损坏.
我们是否必须在集成响应或方法响应步骤中设置一些特殊参数或配置?
问候.
这是我从API网关自动生成的javascript SDK中获得的错误.
{
"data": "",
"status": 0,
"statusText": "",
"headers": {
},
"config": {
"method": "POST",
"headers": {
"Content-Type": "application/json",
"Accept": "application/json",
"x-amz-date": "20180127T231842Z",
"Authorization": "AWS4-HMAC-SHA256 Credential=.....",
"x-amz-security-token": "....."
},
"timeout": 0,
"transformRequest": [null],
"transformResponse": [null],
"url": "https://somevalues.execute-api.us-west-2.amazonaws.com/env/some/path",
"data": "{\"startDay\":0,\"endDay\":1}"
}
}
Run Code Online (Sandbox Code Playgroud)
我查看了我的cloudwatch日志,并且呼叫成功了.我将API网关绑定到AWS lambda作为无服务器功能设置.
我从未见过这些类型的错误,但今天我得到了其中的5个错误.后续调用全部奏效.
编辑:这可能与CORS设置有关吗?每隔一段时间API网关似乎打嗝并且不会发送回适当的CORS.可能是功能冷的时候?我不确定...
编辑2:我刚刚验证 - 我的所有OPTIONS端点(用于CORS的端点)都不需要auth或api密钥.所以我认为不是这样的.
编辑4:编辑3错了,我正在击中错误的端点.使用curl命中我的API OPTIONS端点可以正常工作.
编辑5:查看云观察中的API网关日志,这就是它们的样子......此时完全丢失了.
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m START RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Version: $LATEST
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m END RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1
[32m/aws/lambda/supercoolsoftware-prod-createInviteCode[0m [36m2018/02/26/[$LATEST]8578bb59ab0538558fabef7bd1f484a2[0m REPORT RequestId: e3g4f130-1b35-11e8-b0cf-e7f75f2e4dc1 Duration: 10007.96 ms Billed Duration: 10000 ms Memory Size: 128 MB …Run Code Online (Sandbox Code Playgroud) I'm trying to enable CORS in my AWS SAM app. Here is the snippet from my template.yaml:
Globals:
Api:
Cors:
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
Resources:
MyApi:
Type: AWS::Serverless::Api
Properties:
StageName: prod
Auth:
Authorizers:
MyCognitoAuthorizer: ...
getByIdFunc:
Type: AWS::Serverless::Function
Properties:
Handler: src/handler.handle
Events:
ApiEvent:
Type: Api
Properties:
Path: /{id}
Method: GET
RestApiId: !Ref MyApi
Run Code Online (Sandbox Code Playgroud)
根据此Using CORS with AWS SAM和https://github.com/aws/serverless-application-model/issues/373,cors配置应该可以工作,但不幸的是API响应上没有设置标头,如下所示。
< HTTP/2 200
< content-type: application/json
< content-length: 770
< date: Tue, 13 Apr 2021 …Run Code Online (Sandbox Code Playgroud) amazon-web-services cors aws-api-gateway aws-sam infrastructure-as-code
aws-api-gateway ×10
aws-lambda ×3
cors ×2
amazon-s3 ×1
amazon-sns ×1
api-gateway ×1
aws-cli ×1
aws-sam ×1
base64 ×1
terraform ×1