S3 - Fix a bug when requesting a presigned URL on an object without ACL (#5417)

This commit is contained in:
Bert Blommers 2022-08-24 21:17:17 +00:00 committed by GitHub
parent 3e6394e641
commit 58a313d294
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 1 deletions

View File

@ -1156,7 +1156,7 @@ class S3Response(BaseResponse):
key = self.backend.get_object(bucket_name, key_name)
if key:
if not key.acl.public_read and not signed_url:
if (key.acl and not key.acl.public_read) and not signed_url:
return 403, {}, ""
elif signed_url:
# coming in from requests.get(s3.generate_presigned_url())

View File

@ -2,6 +2,7 @@ import boto3
import os
import pytest
import sure # noqa # pylint: disable=unused-import
import requests
from botocore.client import ClientError
from functools import wraps
@ -925,3 +926,46 @@ def test_ssm_key_headers_in_create_multipart():
)
assert complete_multipart_response["ServerSideEncryption"] == "aws:kms"
assert complete_multipart_response["SSEKMSKeyId"] == kms_key_id
@mock_s3
@reduced_min_part_size
def test_generate_presigned_url_on_multipart_upload_without_acl():
client = boto3.client("s3", region_name=DEFAULT_REGION_NAME)
bucket_name = "testing"
client.create_bucket(Bucket=bucket_name)
object_key = "test_multipart_object"
multipart_response = client.create_multipart_upload(
Bucket=bucket_name, Key=object_key
)
upload_id = multipart_response["UploadId"]
parts = []
n_parts = 10
for i in range(1, n_parts + 1):
part_size = REDUCED_PART_SIZE + i
body = b"1" * part_size
part = client.upload_part(
Bucket=bucket_name,
Key=object_key,
PartNumber=i,
UploadId=upload_id,
Body=body,
ContentLength=len(body),
)
parts.append({"PartNumber": i, "ETag": part["ETag"]})
client.complete_multipart_upload(
Bucket=bucket_name,
Key=object_key,
UploadId=upload_id,
MultipartUpload={"Parts": parts},
)
url = client.generate_presigned_url(
"head_object", Params={"Bucket": bucket_name, "Key": object_key}
)
res = requests.get(url)
res.status_code.should.equal(200)