我正在尝试使用https://db.humanconnectome.org提供的访问密钥ID和秘密访问密钥从s3存储桶下载文件。但是,即使我能够导航数据库并找到文件(如通过aws cli配置我的凭据),尝试下载它们也会导致以下错误: “ botocore.exceptions.ClientError:调用HeadObject操作时发生错误(403):禁止”
使用相同的凭据,我可以浏览相同的数据库,并通过诸如Cyberduck之类的云存储浏览器手动下载文件,因此Cyberduck如何访问数据不会调用403 Forbidden错误。
我还验证了boto3能够访问我的AWS凭证,并且还通过对它们进行硬编码来尝试。
我如何尝试下载数据非常简单,并复制了boto3 docs示例:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html
s3 = boto3.client('s3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_KEY,)
s3.download_file(Bucket=BUCKET_NAME, Key=FILE_KEY, Filename=FILE_NAME)
这应该将文件下载到FILE_NAME给出的位置和文件,但会调用403 Forbidden错误。
答案 0 :(得分:0)
下载文件时,您还需要传递存储区。尝试使用CLI配置region
或在创建客户端时通过region_name
。
s3 = boto3.client('s3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_KEY,
region_name=AWS_REGION)
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html
答案 1 :(得分:0)
我知道这听起来很荒谬,但是请确保您的存储桶名称中没有错字。
我花了很长时间尝试解决此问题,才意识到我在为s3存储桶设置的env变量中添加了一个额外的字母。
奇怪的是,他们给您一个被禁止的错误,而不是“未找到”错误,但是他们这样做。