python-3.x - s3.meta.client.head_bucket 返回错误代码 403
问题描述
我对这个boto3
包很陌生,我正在尝试测试我在这里try/except
找到的一个简单块,以确定 s3 存储桶是否存在。到目前为止,我有:
s3 = boto3.resource(
"s3",
aws_access_key_id=self.settings['CREDENTIALS']['aws_access_key_id'],
aws_secret_access_key=self.settings['CREDENTIALS']['aws_secret_access_key'],
)
bucket = s3.Bucket(self.settings['S3']['bucket_test'])
for bucket_in_all in boto3.resource('s3').buckets.all():
if bucket_in_all.name == self.settings['S3']['bucket_test']:
print ("Bucket {} verified".format(self.settings['S3']['bucket_test'])) # This is triggered!
try:
s3.meta.client.head_bucket(Bucket=self.settings['S3']['bucket_test'])
print("Bucket Exists!")
return True
except botocore.exceptions.ClientError as e:
# If a client error is thrown, then check that it was a 404 error.
# If it was a 404 error, then the bucket does not exist.
error_code = int(e.response['Error']['Code'])
if error_code == 403:
print("Private Bucket. Forbidden Access!")
return True
elif error_code == 404:
print("Bucket Does Not Exist!")
return False
当我循环时找到存储桶buckets.all()
,但不知何故失败s3.meta.client.head_bucket
,返回错误 403。为什么?我的最终目标是能够查看 s3 存储桶,并确定那里有哪些文件。我从集群外部连接,即脚本当前不在 AWS“云”内运行,而是从我的 MBP 连接到相关集群。
解决方案
可能是该用户没有 S3 的身份验证
您可以在 aws 控制台中创建身份验证组并将用户添加到组中。
推荐阅读
- react-native - React Navigation (V2 / V3):如何在屏幕上的 navigationOptions 中访问 navigation.state.index
- sonarqube - 找不到 PMD XML 报告
- google-colaboratory - Google Colaboratory:从谷歌驱动读取数据
- c# - 将对象数组转换为字符串
- amazon-web-services - 在 Java 中解析 lambda 的 multipart/form-data json 主体
- javascript - 如何在 Node.js 中显示异步函数的结果
- java - JavaMelody 将版本从“javamelody-spring-boot-starter”更改为“javamelody-core”
- android - Android Kotlin - 永久禁用 UI 系统按钮
- r - R中变量中的单独数据
- ruby-on-rails - 如何在 Rails 的单个列中插入或存储多个 ID?