终端设备:EMC ECS, 协议:AWS S3
我尝试使用我的Python脚本进行身份验证,并使用Paw构建相同的请求。
使用 boto 的Python 工作得很好。 原始代码:
from boto.s3.connection import S3Connection
accessKeyId = 'objuser'
secretKey = 'spl4vDHl11H7uW/683WZCoYrle03Bn1hd42gy8bd'
host = '10.10.10.10'
port = 9020
conn = S3Connection(aws_access_key_id=accessKeyId,
aws_secret_access_key=secretKey,
host=host,
port=port,
calling_format='boto.s3.connection.ProtocolIndependentOrdinaryCallingFormat',
is_secure=False)
print conn.get_all_buckets()
S3服务器接受正确的标题
Date: Fri, 08 Apr 2016 07:38:34 GMT
Authorisation: AWS obtuser:Gi/qcdbyYcVMdI9EkdORPMx2wbo=
接下来,我用Paw重新创建了相同的请求但得到了错误的标题:
Date: Fri, 08 Apr 2016 07:38:34 GMT
Authorisation: AWS obtuser:/znFNFviqD5fw3t1oWUwBQ8B5M4=
当然它被S3服务器拒绝了。
在Paw中,我使用了标准" S3 Amazon S3授权标题"的授权标题。动态价值。 AWS Access Key ID 和 Secret Access密钥ID 与脚本中的相同(三重检查)。
根据ECS文档,S3身份验证遵循Signing and Authenticating REST Requests因此签名基于标准HMAC-SHA1。 我希望Paw使用相同的方法。
请问您能否提出Paw未创建正确的授权标头以及如何解决该问题的可能原因?
非常感谢提前!
答案 0 :(得分:0)
很抱歉这个问题已经很晚了!我刚刚使用我们的AWS账户自行测试了这个问题,例如,我已经能够轻松列出所有S3存储桶,请参阅此内容截图:
似乎这可能是与配置Authorization标头的方式有关的问题,或者是在URL字段中插入了无效字符。 (截图有助于查看可能出现的问题)
答案 1 :(得分:0)
使用Paw v3.0.16和“Amazon S3授权标头”动态值时,此网址出现SignatureDoesNotMatch错误。
GET https://s3-ap-northeast-1.amazonaws.com/bucket123/sub456/some789.json
它适用于此网址。
GET https://bucket123.s3.amazonaws.com/sub456/some789.json
http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html