python - 使用 boto3 从 AWS S3 Bucket 下载文件会导致 ClientError: An error occurred (403): Forbidden
问题描述
我正在尝试使用https://db.humanconnectome.org提供的访问密钥 ID 和秘密访问密钥从 s3 存储桶下载文件。但是,即使我能够导航数据库并找到文件(因为我已经通过 aws cli 配置了我的凭据),但尝试下载它们会导致以下错误:“botocore.exceptions.ClientError: 发生错误 (403)调用 HeadObject 操作时:禁止“
使用相同的凭据,我可以浏览相同的数据库并通过 Cyberduck 等云存储浏览器手动下载文件,因此 Cyberduck 访问数据的方式不会引发 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)
这应该将文件下载到 FILE_NAME 给出的位置和文件,但会调用 403 Forbidden 错误。
解决方案
下载文件时,您还需要传递存储桶区域。尝试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)
https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html
推荐阅读
- c# - 如何从 CreateDbContext 读取 appsettings
- python-3.x - 在python中找到正确的文件mimetype
- java - 如何在杰克逊中删除重复的@JsonProperty
- python - 无法定位和编辑输入元素 Selenium 的值 - Python
- mysql - 如何结合左连接和哪里连接(老派逗号连接)?
- android - Android - 用 gradle jar 替换 lib jar
- mysql - 从 MySQL 数据生成 PDF 并使用 Postfix 发送它,而不使用 PHP?
- react-native - 最新的反应原生版本包含自定义图标的最佳方式是什么?
- ios - UIActivityViewController 共享在同一应用程序中显示具有不同方案的不同选项
- excel - 如何创建具有动态验证列表的下拉菜单