我已经用我的管理员帐户创建了一个S3存储桶,并且我已经创建了一个IAM用户(仅限编程访问)。我上传了一个虚拟的txt文件(以管理员身份),我正在使用python boto3下载这个文件,但是我得到了一个Access denied
异常。
我不清楚为什么,因为这是一个非常简单的设置。
我的python代码:
import os
import boto3
from dotenv import load_dotenv
# load environment variables
load_dotenv()
boto_session = boto3.session.Session(aws_access_key_id=os.getenv('AWS_ACCESS_ID'), aws_secret_access_key=os.getenv('AWS_ACCESS_KEY'), region_name=os.getenv('AWS_REGION'))
s3 = boto3.client('s3')
with open('test.txt', 'wb') as f:
s3.download_fileobj('dev-tom', 'readme.txt', f)
我已经检查过,环境中的凭据对于IAM用户是正确的。
Traceback (most recent call last):
File "/.../lib/python3.7/site-packages/boto3/s3/inject.py", line 678, in download_fileobj
return future.result()
File "/.../lib/python3.7/site-packages/s3transfer/futures.py", line 106, in result
return self._coordinator.result()
File "/.../lib/python3.7/site-packages/s3transfer/futures.py", line 265, in result
raise self._exception
File "/.../lib/python3.7/site-packages/s3transfer/tasks.py", line 255, in _main
self._submit(transfer_future=transfer_future, **kwargs)
File "/.../lib/python3.7/site-packages/s3transfer/download.py", line 343, in _submit
**transfer_future.meta.call_args.extra_args
File "/.../lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/.../lib/python3.7/site-packages/botocore/client.py", line 676, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
我的存储桶没有附加策略,所以它是默认的。
我的IAM用户配置:
我的文件详细信息:
发布于 2020-11-17 14:08:10
显然,我的问题与存储桶或其权限无关...
这一行忽略了我之前设置的所有会话内容:
s3 = boto3.client('s3')
并只获取它在环境中可以找到的任何访问凭据,这些凭据被设置为另一个没有完全s3访问权限的IAM用户。
(其中之一)正确的解决方案是:
s3 = boto_session.client('s3')
我应该学习编程,仅此而已。
https://stackoverflow.com/questions/64876520
复制相似问题