【发布时间】:2019-08-02 17:35:00
【问题描述】:
我对@987654323@ 包非常陌生,我正在尝试测试一个简单的try/except 块,我发现here 以确定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 连接到相关集群。
【问题讨论】:
-
403 是通过权限,您正在使用的 iam 用户需要 listbucket 权限。您需要查看 s3 文档,这与 boto docs.aws.amazon.com/AmazonS3/latest/dev/… 无关
标签: python-3.x amazon-s3 boto3