我正在尝试在AWS上创建lambda服务,并通过API网关从外部访问它,而无需身份验证或限制。
为了使事情变得容易,我现在将网关设置为模拟。
在API的Get方法上,将Authorization设置为None
,API Key为not required
。
尝试此操作时,我收到{"message":"Forbidden"}
(如果我将其连接到实际的lambda服务,则显示相同的消息)。
有关如何使其可访问性的任何建议?
我正在尝试在AWS上创建lambda服务,并通过API网关从外部访问它,而无需身份验证或限制。
为了使事情变得容易,我现在将网关设置为模拟。
在API的Get方法上,将Authorization设置为None
,API Key为not required
。
尝试此操作时,我收到{"message":"Forbidden"}
(如果我将其连接到实际的lambda服务,则显示相同的消息)。
有关如何使其可访问性的任何建议?
[solved]
到您的问题中。谢谢!
Answers:
如果您将“需要API密钥”选项设置为true,请检查以下内容。
在API Gateway仪表板上,选择“资源”,单击“操作”,然后选择“部署API”。在首次部署之前,您将获得的唯一答复是{"message":"Forbidden"}
。
如果您使用自定义域名,而忘记选择目标登台,则会收到Forbidden
消息。
只需转到Custom Domain Names
并Edit
在您的域下单击,然后在下选择阶段Base Path Mappings
。
我有一个类似的问题,并且有以下问题:
我也没有设置任何授权或限制来简化事情。
通过为每个阶段(开发,登台,生产)添加基本路径映射,我能够解决此问题。
我可能为时已晚,但是API网关发出“禁止”消息的原因之一是在GET操作上在请求正文中传递数据时。要解决该问题,请进行资源POST或不在请求正文中传递数据。
GraphQL Query
-返回403禁止错误。将请求类型从更改GraphQL Query
为No Body
成功!
这可能并不很明显,但是使用AWS API Gateway时看到“禁止”错误的另一个原因可能是调用了与任何已部署的API方法都不对应的错误URL。如果您实际上输入了错误的URL,则可能会发生这种情况(例如,您调用的是(没有阶段)而不是调用https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
(注意dev
之前的阶段),希望得到404,但得到403。users
https://9999xx9x99.execute-api.us-east-1.amazonaws.com/users
顺便说一句:在部署了https://9999xx9x99.execute-api.us-east-1.amazonaws.com/dev/users
呼叫之后https://9999xx9x99.execute-api.us-east-1.amazonaws.com/user
(请在此处注意单数名词形式),您也会得到……403,但带有“缺少身份验证令牌”消息!
我从尝试访问API Gateway中的私有API的Nginx Fargate服务收到此错误。我需要像这样在我的api中的资源策略下添加策略
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:us-east-1:<AccountID>:<RestApiID>/*",
"Condition": {
"StringEquals": {
"aws:sourceVpce": "<VPC Endpoint ID for execute-api>"
}
}
}
]
}
我可能已经遇到了解决该问题的方法。我在MacOS上也遇到了同样的问题。我尝试刷新DNS,然后它起作用了!
在终端中尝试以下操作:
Mac OS X Yosemite及更高版本
sudo killall -HUP mDNSResponder
Mac OS X Yosemite v10.10至v10.10.3
sudo discoveryutil mdnsflushcache
Mac OS X Mavericks,Mountain Lion和Lion
sudo killall -HUP mDNSResponder
Mac OS X雪豹
sudo dscacheutil -flushcache
只是关于我在Swagger Editor中遇到的类似情况的注释:
403 Forbidden
随{"message":"Forbidden"}
身体返回。curl
Swagger Editor的命令如下所示:
curl -X GET "https://xxx52xxxx9.execute-api.eu-central-1.amazonaws.com//Prod/users" -H "accept: application/json"
(请注意//
之前的双精度Prod
)。
而同一curl
命令却没有//
通过命令行起作用!
有效的技巧是替换server
API Gateway生成的返回的此结构:
servers:
- url: "https://xxx52xxxx9.execute-api.eu-central-1.amazonaws.com/{basePath}"
variables:
basePath:
default: "/Prod"
完全url
不带variables
:
servers:
- url: "https://xxx52xxxx9.execute-api.eu-central-1.amazonaws.com/Prod"
值得注意的是,删除开头的斜杠default: "/Prod"
没有帮助。
正如@ gary69和@Adriaan Pelzer提到的
https://stackoverflow.com/a/52727654/809043
https://stackoverflow.com/a/55136675/809043
请求私有API时,您会收到消息{“ message”:“ Forbidden”}。
因此,如果您进行了所有流量都应经过API端点的设置,而不是将流量定向到API网关,则可以使用以下参数。
APIGatewayVPCEndpoint:
Type: 'AWS::EC2::VPCEndpoint'
Properties:
PolicyDocument: '{
"Version":"2012-10-17",
"Statement":[{
"Effect":"Allow",
"Principal": "*",
"Action":["execute-api:Invoke"],
"Resource":["arn:aws:execute-api:eu-north-1:000000000000:*/*"]
}]
}'
...
VpcEndpointType: Interface
PrivateDnsEnabled: true
如果启用了PrivateDnsEnabled,则API网关中的终结点必须为“私有”类型,并且需要添加策略。
ApiGatewayRest:
Type: AWS::ApiGateway::RestApi
Properties:
Description: A mocked API
Name: Mocked API
EndpointConfiguration:
Types:
- PRIVATE
Policy: '{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:eu-north-1:000000000000:*/*/*/*"
}]
}'
该论坛主题帮助我清除了一些细节