客户端错误:
调用 GetObject 操作时发生错误 (AllAccessDisabled):对此对象的所有访问已被禁用
我的代码是:
s3resource = boto3.resource('s3')
my_bucket = s3.Bucket(bucket_name)
s3client = boto3.client('s3')
for s3_object in my_bucket.objects.all():
path, file1 = os.path.split(s3_object.key)
obj = s3client.get_object(Bucket='bucket_name',Key=file1)
j = json.loads(obj['Body'].read())
存储桶策略为:
{
"Version": "2012-10-17",
"Id": "Policy1559802940321",
"Statement": [
{
"Sid": "Stmt1559802821882",
"Effect": "Allow",
"Principal": {
"Service": "cloudtrail.amazonaws.com"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucketname"
}
]
}
答案1
检查这一行:
s3client.get_object(Bucket='bucket_name',Key=file1)
如果您的代码确实'bucket_name'
在此处显示,那么这就是导致错误的原因。这是一个字符串文字,而不是变量,因此您需要删除这些'
引号:
s3client.get_object(Bucket=bucket_name,Key=file1)
为什么会出现这个错误?
实际上,Amazon S3 中某个地方有一个名为的存储桶bucket_name
,它已被 AWS 管理锁定——这就是导致出现AllAccessDisabled
错误消息的原因——而且看起来您可能正在尝试访问它。只有两种情况会导致该特定错误——访问属于其他人的锁定存储桶,或者不支付您的 AWS 账单,这当然会导致您自己的存储桶被锁定,而这里可能不是这种情况。您似乎是在无意中尝试访问该存储桶。