我正在努力阅读 aws s3 bucket 事件日志并收到错误

我正在努力阅读 aws s3 bucket 事件日志并收到错误

客户端错误:

调用 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 账单,这当然会导致您自己的存储桶被锁定,而这里可能不是这种情况。您似乎是在无意中尝试访问该存储桶。

相关内容