使用cURL测试AWS API网关

aemubtdh  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(318)

我有一个简单的AWS API网关实现,它受AWS_IAM授权保护。
我只想通过cURL从命令行进行测试:

curl --location --request GET 'https://<API_ID>.execute-api.eu-west-1.amazonaws.com/stage?type=type&category=category&lc=lc&passprhase=passprhase&product=product'
--header 'Authorization: AWS4-HMAC-SHA256 Credential=<AWS_ACCESS_KEY>/20200127/eu-west-1/execute-api/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=<AWS_SECRET_ACCESS_KEY>' --header 'Content-Type: application/json' \
--data-raw '{"query":"","variables":{}}'

但不断收到以下错误:

Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header.

有人能指点我做错了什么吗?

f0ofjuux

f0ofjuux1#

从版本7.75开始,curl支持AWS V4签名身份验证,因此您应该能够通过以下方式调用AWS资源:

curl --location --request GET 'https://$API-ID.execute-api.eu-west-1.amazonaws.com/stage?type=type&category=category&lc=lc&passprhase=passprhase&product=product' \
--header 'Content-Type: application/json' \
--user $ACCESS_KEY:$SECRET_KEY \
--aws-sigv4 "aws:amz" \
--data-raw '{"query":"","variables":{}}'

请注意,您可能需要在--aws-sigv4值中添加您所在的区域和服务。例如:--aws-sigv4 "aws:amz:eu-west-2:execute-api"
您可以在此处找到更多文档:https://curl.se/libcurl/c/CURLOPT_AWS_SIGV4.html

exdqitrt

exdqitrt2#

AWS_IAM授权使用Sigv4,其计算过程需要某些标头的值- Date是其中之一。您将x-amz-date作为“SignedHeaders”字段的一部分传递,但实际上并没有将其与其他标头一起传递。
创建正确的curl命令以调用AWS_IAM API的一种方法是使用Postman application。添加API URL并选择“授权”选项卡下的“AWS签名”。然后,您可以选择“代码”选项,并获得完整的curl命令,如下所示-

curl -X POST \
  https://$API-ID.execute-api.$AWS_REGION.amazonaws.com/$STAGE/$RESOURCE \
  -H 'authorization: AWS4-HMAC-SHA256 Credential=$ACCESS_KEY/20200128/$AWS_REGION/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=$SIGNATURE_VALUE' \
  -H 'cache-control: no-cache' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -H 'host: API-ID.execute-api.$AWS_REGION.amazonaws.com' \
  -H 'postman-token: 15f9498e-95b7-f22b-eed9-016cdea07424' \
  -H 'x-amz-date: $DATE_STAMP'

Create a Canonical Request for Signature Version 4

rt4zxlrg

rt4zxlrg3#

我可以建议使用awscurl,这要容易得多。
要安装awscurl,请单击here。有关文档,请参阅here
下面是调用igateway以调用lambda进行POST查询的示例。
服务执行API X POST -d '{“别名”:“xyx”,“类型”:“LDAP”}'https://. execute-api.us-west-2.amazonaws.com/Prod/user/groups/get--区域我们-西部-2 --访问密钥ACCESS_KEY --秘密密钥

相关问题