@@ -630,13 +630,12 @@ def _create_s3_bucket_if_it_does_not_exist(self, bucket_name, region):
630
630
s3 = self .s3_resource
631
631
632
632
bucket = s3 .Bucket (name = bucket_name )
633
+ expected_bucket_owner_id = self .account_id ()
633
634
if bucket .creation_date is None :
634
- self .general_bucket_check_if_user_has_permission (bucket_name , s3 , bucket , region , True )
635
+ self .general_bucket_check_if_user_has_permission (bucket_name , s3 , bucket , region , True , expected_bucket_owner_id )
635
636
636
637
elif self ._default_bucket_set_by_sdk :
637
- self .general_bucket_check_if_user_has_permission (bucket_name , s3 , bucket , region , False )
638
-
639
- expected_bucket_owner_id = self .account_id ()
638
+ self .general_bucket_check_if_user_has_permission (bucket_name , s3 , bucket , region , False , expected_bucket_owner_id )
640
639
self .expected_bucket_owner_id_bucket_check (bucket_name , s3 , expected_bucket_owner_id )
641
640
642
641
def expected_bucket_owner_id_bucket_check (self , bucket_name , s3 , expected_bucket_owner_id ):
@@ -649,9 +648,16 @@ def expected_bucket_owner_id_bucket_check(self, bucket_name, s3, expected_bucket
649
648
650
649
"""
651
650
try :
652
- s3 .meta .client .head_bucket (
653
- Bucket = bucket_name , ExpectedBucketOwner = expected_bucket_owner_id
654
- )
651
+ if self .default_bucket_prefix :
652
+ s3 .meta .client .list_objects_v2 (
653
+ Bucket = bucket_name ,
654
+ Prefix = self .default_bucket_prefix ,
655
+ ExpectedBucketOwner = expected_bucket_owner_id
656
+ )
657
+ else :
658
+ s3 .meta .client .head_bucket (
659
+ Bucket = bucket_name , ExpectedBucketOwner = expected_bucket_owner_id
660
+ )
655
661
except ClientError as e :
656
662
error_code = e .response ["Error" ]["Code" ]
657
663
message = e .response ["Error" ]["Message" ]
@@ -668,7 +674,7 @@ def expected_bucket_owner_id_bucket_check(self, bucket_name, s3, expected_bucket
668
674
raise
669
675
670
676
def general_bucket_check_if_user_has_permission (
671
- self , bucket_name , s3 , bucket , region , bucket_creation_date_none
677
+ self , bucket_name , s3 , bucket , region , bucket_creation_date_none , expected_bucket_owner_id
672
678
):
673
679
"""Checks if the person running has the permissions to the bucket
674
680
@@ -682,7 +688,14 @@ def general_bucket_check_if_user_has_permission(
682
688
bucket_creation_date_none (bool):Indicating whether S3 bucket already exists or not
683
689
"""
684
690
try :
685
- s3 .meta .client .head_bucket (Bucket = bucket_name )
691
+ if self .default_bucket_prefix :
692
+ s3 .meta .client .list_objects_v2 (
693
+ Bucket = bucket_name ,
694
+ Prefix = self .default_bucket_prefix ,
695
+ ExpectedBucketOwner = expected_bucket_owner_id
696
+ )
697
+ else :
698
+ s3 .meta .client .head_bucket (Bucket = bucket_name )
686
699
except ClientError as e :
687
700
error_code = e .response ["Error" ]["Code" ]
688
701
message = e .response ["Error" ]["Message" ]
0 commit comments