我正在尝试通过AWS API网关调用Lambda函数。当我提到身份验证类型为NONE时,它可以正常工作,但API变成了公共的,任何人都可以访问我的API。 为了使API调用安全,我正在使用身份验证类型AWS_IAM,并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户上,但出现了这个错误:
{ message: "Missing Authentication Token"}
我不知道我在这里缺少了什么。我正在尝试通过AWS API网关调用Lambda函数。当我提到身份验证类型为NONE时,它可以正常工作,但API变成了公共的,任何人都可以访问我的API。 为了使API调用安全,我正在使用身份验证类型AWS_IAM,并将AmazonAPIGatewayInvokeFullAccess策略附加到我的用户上,但出现了这个错误:
{ message: "Missing Authentication Token"}
我不知道我在这里缺少了什么。注意:登录AWS控制台不会自动为您的API签署浏览器请求。
今天我遇到了同样的问题,因为我错误地使用了GET而不是POST。我通过在Postman中将方法更改为POST来解决了这个问题。
当你调用错误的API端点时,通常会出现此错误。 检查你正在调用的API端点,并在API网关上验证。
您从您的AWS帐户内调用API(例如:从在您的帐户中创建的EC2实例)
将必要的凭据(访问密钥和秘密密钥)放入EC2实例中的route ~/.aws/credentials(此路由适用于Linux实例)。如果IAM用户使用MFA,则还需要aws_session_token值。
使用基于vpce(vpc endpoint)的URL。例如:curl https://vpce-0c0471b7test-jkznizi5.execute-api.us-east-1.vpce.amazonaws.com/dev/api/v1/status
我曾经遇到过同样的问题,我是通过以下方式解决的:
GET方法测试
https://54wtstq8d2.execute-api.ap-southeast-2.amazonaws.com/dev/echo/hello
Authorization tab ->
• select type(AWS signature)
• Add AccessKey and SecretKey
如果您为服务器设置了具有AmazonAPIGatewayInvokeFullAccess权限的IAM角色,则仍然需要在每个请求中传递标头。 您可以使用aws-requests-auth库在Python中执行此操作:
import requests
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth
auth = BotoAWSRequestsAuth(
aws_host="API_ID.execute-api.us-east-1.amazonaws.com",
aws_region="us-east-1",
aws_service="execute-api"
)
response = requests.get("https://API_ID.execute-api.us-east-1.amazonaws.com/STAGE/RESOURCE", auth=auth)