Amazon web services 如何在EC2 DescribeVolume API中使用AWS V4签名?

Amazon web services 如何在EC2 DescribeVolume API中使用AWS V4签名?,amazon-web-services,Amazon Web Services,我正在编写代码以直接与AWSEC2 API端点交互,并将其用作起点 如果URL中的操作是DescribeVolumes或DescribeVolumesModifications-我获取AuthFailure-AWS无法验证提供的访问凭据,则我遇到问题 这不是凭证的问题。我可以使用具有相同卷ID和凭据的“aws ec2描述卷”,它可以正常工作。我还可以使用具有相同凭据和相同API调用的Postman,并且它可以正常工作 我尝试将Postman创建的授权头与Python脚本生成的授权头进行比较,结果

我正在编写代码以直接与AWSEC2 API端点交互,并将其用作起点

如果URL中的操作是DescribeVolumes或DescribeVolumesModifications-我获取AuthFailure-AWS无法验证提供的访问凭据,则我遇到问题

这不是凭证的问题。我可以使用具有相同卷ID和凭据的“aws ec2描述卷”,它可以正常工作。我还可以使用具有相同凭据和相同API调用的Postman,并且它可以正常工作

我尝试将Postman创建的授权头与Python脚本生成的授权头进行比较,结果有所不同。(注意,我在Python脚本中硬连接了X-Amz-Date,以确保与Postman的一致性)。但问题是,我无法对签名进行足够的反向工程,以确定其错误之处

有没有人有任何代码(Python、Javascript)能够以适合DescribeVolumes/DescribeVolumeSModificationsAPI的方式生成V4签名头?或者可以建议AWS提供的代码有什么问题

我发现了一个非常有用的网站:。这允许我插入Python脚本和Postman中使用的相同值,它将分解步骤以获得最终结果

因此,我能够找出Python脚本无法工作的原因——请求参数必须按字母顺序排列


我现在正处于Python脚本和Postman生成看起来完全相同的头的位置,但我仍然得到了AuthFailure。

我认为它一定是Python代码本身特有的东西,而不是签名算法代码,在这方面,我还得到了一个Javascript实现,现在我已经对请求参数进行了排序,它工作得非常好。