我将API的授权类型更改为AWS_IAM,然后我创建了一个具有以下策略的用户:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"execute-api:Invoke"
],
"Resource": [
"arn:aws:execute-api:us-east-1:account_id:api-id/stage/GET/*"
]
}
]
}
并尝试通过邮递员访问此API,并且它有效。但是当我通过aws configure
将此用户的access_key_id和secret_access_key提供给EC2实例然后尝试访问API(curl URL
)时,它给了我Missing Authentication token
。
任何帮助表示赞赏。谢谢。
当您的API网关使用AWS_IAM
身份验证时,您必须向您的API端点发送AWS SigV4身份验证请求(就像AWS SDK对AWS API一样)。
Postman具有内置的SigV4身份验证模式,可以轻松进行测试。但是,curl
没有。 curl
不是AWS CLI的一部分,所以它不会关心你用aws configure
做什么。这就是它与curl
失败的原因。在您的EC2实例上执行命令不会神奇地使身份验证工作。
为了使用curl
发出请求,您需要计算并计算自己的SigV4签名参数和标题以与请求一起使用。
我刚刚找到(看起来很像)一个很好的curl
替代方案来处理这个问题:
https://github.com/okigan/awscurl
它包括一个API网关示例。