diff --git a/cli/src/pcluster/aws/s3.py b/cli/src/pcluster/aws/s3.py index 1bb84ca17d..817d0879db 100644 --- a/cli/src/pcluster/aws/s3.py +++ b/cli/src/pcluster/aws/s3.py @@ -39,10 +39,13 @@ def head_object(self, bucket_name, object_name, expected_bucket_owner=None): error_code=client_error.response["Error"]["Code"], ) - def head_bucket(self, bucket_name): + def head_bucket(self, bucket_name, expected_bucket_owner=None): """Retrieve metadata for a bucket without returning the object itself.""" try: - return self._client.head_bucket(Bucket=bucket_name) + if expected_bucket_owner: + return self._client.head_bucket(Bucket=bucket_name, ExpectedBucketOwner=expected_bucket_owner) + else: + return self._client.head_bucket(Bucket=bucket_name) except ClientError as client_error: raise AWSClientError( function_name="head_bucket", diff --git a/cli/src/pcluster/models/s3_bucket.py b/cli/src/pcluster/models/s3_bucket.py index fdd4cdeb5b..8232ae1ba5 100644 --- a/cli/src/pcluster/models/s3_bucket.py +++ b/cli/src/pcluster/models/s3_bucket.py @@ -133,9 +133,12 @@ def generate_s3_bucket_hash_suffix(account_id, region): """ return hashlib.sha256((account_id + region).encode()).hexdigest()[0:16] - def check_bucket_exists(self): + def check_bucket_exists(self, default_bucket): """Check bucket existence by bucket name.""" - AWSApi.instance().s3.head_bucket(bucket_name=self.name) + if default_bucket: + AWSApi.instance().s3.head_bucket(bucket_name=self.name, expected_bucket_owner=self.account_id) + else: + AWSApi.instance().s3.head_bucket(bucket_name=self.name) def create_bucket(self): """Create a new S3 bucket.""" @@ -457,7 +460,7 @@ def _check_custom_bucket(cls, service_name: str, custom_s3_bucket: str, artifact def _check_default_bucket(cls, service_name: str, artifact_directory: str, stack_name: str): bucket = S3Bucket(service_name=service_name, artifact_directory=artifact_directory, stack_name=stack_name) try: - bucket.check_bucket_exists() + bucket.check_bucket_exists(default_bucket=True) except AWSClientError as e: cls._create_bucket(bucket, e)