@@ -630,13 +630,12 @@ def _create_s3_bucket_if_it_does_not_exist(self, bucket_name, region):
630630 s3 = self .s3_resource
631631
632632 bucket = s3 .Bucket (name = bucket_name )
633+ expected_bucket_owner_id = self .account_id ()
633634 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 )
635636
636637 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 )
640639 self .expected_bucket_owner_id_bucket_check (bucket_name , s3 , expected_bucket_owner_id )
641640
642641 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
649648
650649 """
651650 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+ )
655661 except ClientError as e :
656662 error_code = e .response ["Error" ]["Code" ]
657663 message = e .response ["Error" ]["Message" ]
@@ -668,7 +674,7 @@ def expected_bucket_owner_id_bucket_check(self, bucket_name, s3, expected_bucket
668674 raise
669675
670676 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
672678 ):
673679 """Checks if the person running has the permissions to the bucket
674680
@@ -682,7 +688,14 @@ def general_bucket_check_if_user_has_permission(
682688 bucket_creation_date_none (bool):Indicating whether S3 bucket already exists or not
683689 """
684690 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 )
686699 except ClientError as e :
687700 error_code = e .response ["Error" ]["Code" ]
688701 message = e .response ["Error" ]["Message" ]
0 commit comments