Python 使用boto3从AWS S3 Bucket下载文件会导致ClientError:发生错误(403):禁止
我试图使用提供的访问密钥ID和秘密访问密钥从s3存储桶下载文件。但是,即使我能够浏览数据库并找到文件(因为我已经通过aws cli配置了凭据),尝试下载它们也会导致以下错误: “botocore.exceptions.ClientError:调用HeadObject操作时发生错误(403):禁止” 使用相同的凭据,我可以浏览相同的数据库,并通过云存储浏览器(如Cyberduck)手动下载文件,因此Cyberduck访问数据的方式不会引发403禁止错误 我还验证了boto3能够访问我的aws凭据,并尝试对其进行硬编码 我尝试下载数据的方式非常简单,复制了boto3文档示例:Python 使用boto3从AWS S3 Bucket下载文件会导致ClientError:发生错误(403):禁止,python,amazon-web-services,amazon-s3,boto3,botocore,Python,Amazon Web Services,Amazon S3,Boto3,Botocore,我试图使用提供的访问密钥ID和秘密访问密钥从s3存储桶下载文件。但是,即使我能够浏览数据库并找到文件(因为我已经通过aws cli配置了凭据),尝试下载它们也会导致以下错误: “botocore.exceptions.ClientError:调用HeadObject操作时发生错误(403):禁止” 使用相同的凭据,我可以浏览相同的数据库,并通过云存储浏览器(如Cyberduck)手动下载文件,因此Cyberduck访问数据的方式不会引发403禁止错误 我还验证了boto3能够访问我的aws凭据,
这会将文件下载到文件名指定的位置和文件,但会调用403禁止错误。下载文件时,您还需要通过bucket区域。尝试使用CLI配置
region
,或在创建客户端时传递region\u name
s3 = boto3.client('s3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_KEY,
region_name=AWS_REGION)
我知道这听起来可能很可笑,但请确保您的存储桶名称中没有输入错误或类似的内容 我花了很长时间试图解决这个问题,结果发现我在为s3存储桶设置的env变量中添加了一个额外的字母
奇怪的是,他们给了你一个禁止的错误,而不是“找不到”的错误,但是他们确实给了你。试着确保你有正确的s3 bucket名称和正确的文件密钥。根据这一点,如果您没有该bucket的ListObject权限,您将获得403(拒绝访问),而不是404(“没有这样的密钥”)。因此,错误代码可能有点误导。尽管在我的案例中指定了区域,但仍然不起作用:(
s3 = boto3.client('s3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_KEY,
region_name=AWS_REGION)