使用 boto3 从 AWS S3 存储桶下载文件会导致 ClientError: 发生错误 (403): Forbidden

Sem*_*ürk 6 python amazon-s3 amazon-web-services botocore boto3

我正在尝试使用https://db. humanconnectome.org提供的访问密钥 ID 和秘密访问密钥从 s3 存储桶下载文件。但是,即使我能够导航数据库并找到文件(因为我已通过 aws cli 配置了凭证),尝试下载它们会导致以下错误:“botocore.exceptions.ClientError:发生错误 (403)调用 HeadObject 操作时:禁止”

使用相同的凭据,我可以浏览相同的数据库并通过 Cyber​​duck 等云存储浏览器手动下载文件,因此 Cyber​​duck 访问数据的方式不会引发 403 Forbidden 错误。

我还验证了 boto3 能够访问我的 aws 凭证,并尝试对它们进行硬编码。

我尝试下载数据的方式非常简单,并复制 boto3 文档示例: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)

Run Code Online (Sandbox Code Playgroud)

这应该将文件下载到 FILE_NAME 指定的位置和文件,但会调用 403 Forbidden 错误。

小智 2

下载文件时,您还需要传递存储桶区域。尝试region使用 CLI 进行配置或region_name在创建客户端时通过。

s3 = boto3.client('s3',
    aws_access_key_id=ACCESS_KEY_ID,
    aws_secret_access_key=ACCESS_KEY,
    region_name=AWS_REGION)
Run Code Online (Sandbox Code Playgroud)

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html

  • 尽管在我的情况下指定了区域,但仍然不起作用:( (5认同)