我有一个AWS API网关,我想使用IAM Roles来保护 .
我正在寻找一个包来帮助我使用Python访问它 . 我试图避免实现整个Version 4 Signing Process . 我相信必须有一些我可以使用的库 .
我查看aws-requests-auth但它需要"aws_service"才能生成签名 . 我也看了boto3,但我无法找到任何方法只是将身份验证标头添加到一般请求 .
我有一个AWS API网关,我想使用IAM Roles来保护 .
我正在寻找一个包来帮助我使用Python访问它 . 我试图避免实现整个Version 4 Signing Process . 我相信必须有一些我可以使用的库 .
我查看aws-requests-auth但它需要"aws_service"才能生成签名 . 我也看了boto3,但我无法找到任何方法只是将身份验证标头添加到一般请求 .
2 回答
您可以使用aws-requests-auth为您的API网关请求生成签名,并使用 execute-api 作为服务名称 .
仅仅以Ka Hou Ieong的回应为基础,还有另外一件事让我感到沮丧 . 我正在使用
aws-requests-auth==0.3.0
,在使用requests.get(url, auth=auth)
时我仍然得到一个403
.;TLDR; :我的URL有一个查询字符串,它看起来像
aws-requests-auth
没有或者可能无法确保查询字符串参数是 sorted in ascending order 和%
-encoded .==> 所以,一旦我将
url
查询字符串更改为已订购且%
-encoded,我得到了200
.Details :我打开了API网关日志记录,但我得到了
(上面的新行和截断(
...
)是我的)根据亚马逊Canonical Request for Signature Version 4文档,
该规范查询字符串用于生成
Authorization Signature
,AWS在计算Signature Version 4
sig时应用相同的规则 . 底线,我想当然aws-requests-auth
Auth
当然不能改变你的url
,你必须 .