如何修复 AWS s3 boto3 中的“调用 GetObject 操作时的 AuthorizationHeaderMalformed”错误

Mr.*_*ear 2 amazon-s3 amazon-web-services boto3

当我尝试运行非常简单的 Python 脚本以从 s3 存储桶中获取对象时:

import boto3

s3 = boto3.resource('s3',
 region_name="eu-east-1",
 verify=False,
 aws_access_key_id="QxxxxxxxxxxxxxxxxxxxxxxxxFY=",
 aws_secret_access_key="c1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxYw==")

obj = s3.Object('3gxxxxxxxxxxs7', 'dk5xxxxxxxxxxn94')
result = obj.get()['Body'].read().decode('utf-8')

print(result)
Run Code Online (Sandbox Code Playgroud)

我有一个错误:

$ python3 script.py

Traceback (most recent call last):
  File "script.py", line 7, in <module>
    result = obj.get()['Body'].read().decode('utf-8')
  File "//anaconda3/lib/python3.7/site-packages/boto3/resources/factory.py", line 520, in do_action
    response = action(self, *args, **kwargs)
  File "//anaconda3/lib/python3.7/site-packages/boto3/resources/action.py", line 83, in __call__
    response = getattr(parent.meta.client, operation_name)(**params)
  File "//anaconda3/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "//anaconda3/lib/python3.7/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: 

An error occurred (AuthorizationHeaderMalformed) 
when calling the GetObject operation:
 The authorization header is malformed; the authorization component 
"Credential=QUtJxxxxxxxxxxxxxxxxxlZPUFY=/20191005/us-east-1/s3/aws4_request" 
is malformed.

Run Code Online (Sandbox Code Playgroud)

我不确定是什么原因造成的,值得补充的是:

  • 我不知道桶区域是什么(不要问为什么),但我尝试手动连接到所有区域(通过将命令中的默认区域名称更改为每个区域),但没有成功。
  • 我无权访问存储桶配置。以及 aws 控制台中的任何内容。我只有密钥 ID、秘密、存储桶名称和对象名称。

Mic*_*bot 7

AWS-Access-Key-ID始终AKIAIAM 用户或ASIASecurity Token Service 的临时凭证开头,如AWS Identity and Access Management 用户指南中的IAM 标识符中所述。

您使用的值似乎不是其中之一,因为它以QUtJ...开头,所以这不是您应该在此处使用的值。您似乎在使用不是 AWS-Access-Key-ID 的东西。