Skip to main content

GetBucketOwnershipControls

GetBucketOwnershipControls reads a bucket's Object Ownership setting - on Amazon S3, the switch that decides who owns uploaded objects and whether ACLs apply at all. Buckets on STRG have no such setting, so the operation checks that the bucket exists and then answers 404 OwnershipControlsNotFoundError, the same answer Amazon S3 gives for a bucket without ownership controls. Tools such as the AWS CLI and Terraform ask for it, and they already know what that answer means.

Good to know on STRG
  • The answer is always 404 OwnershipControlsNotFoundError, never an OwnershipControls document - and in particular never BucketOwnerEnforced, because a bucket's private or public-read ACL is honoured (GetBucketAcl reads it).
  • PutBucketOwnershipControls and DeleteBucketOwnershipControls are answered with 501 NotImplemented, so a client knows straight away.
  • x-amz-expected-bucket-owner is welcome and has nothing to check: a key only ever reaches buckets of its own account.

When you'd use it​

  • Infrastructure as code. Terraform asks for a bucket's ownership controls while it reads the bucket's current state. The not-found answer tells it there is nothing configured, and the plan carries on.
  • Inspecting a bucket from the command line. Someone checking how a bucket is set up with aws s3api gets the same answer a bucket without ownership controls gives on Amazon S3.
  • Scripts that check whether ACLs apply. A script written for Amazon S3 that reads this setting before relying on a bucket's ACL learns that no ownership controls are in place - and on STRG the bucket's ACL is indeed honoured.

Request​

GET /?ownershipControls HTTP/1.1
Host: my-bucket.s3.eu-central-1.strg.com
Authorization: AWS4-HMAC-SHA256 Credential=...
x-amz-date: 20260926T120000Z
x-amz-content-sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

The path-style form is GET /my-bucket?ownershipControls on s3.eu-central-1.strg.com - Addressing explains both.

Permissions​

The access key needs Read bucket settings (buckets:read-config). Every access key holds it, whether it covers all buckets or only some - a key scoped to specific buckets reads only those. Access keys has the details.

URI parameters​

NameTypeRequiredDescription
BucketStringYesThe bucket whose ownership controls to read.
ownershipControlsFlagYesSelects this operation. Sent with no value.

Any other query parameter is answered with 501 NotImplemented.

Request headers​

NameTypeRequiredDescription
x-amz-expected-bucket-ownerStringNoWelcome, with nothing to check: an access key only ever reaches its own account's buckets.

Request body​

None.

Response​

STRG never answers this operation with 200 OK. Once the bucket is confirmed, the answer is 404 Not Found with the error document below.

Response headers​

NameDescription
Content-Typeapplication/xml.
x-amz-request-idThe request ID, handy for a support request.

Response body​

ElementTypeDescription
OwnershipControlsContainerNever returned. Amazon S3 returns it, holding one Rule with an ObjectOwnership of BucketOwnerEnforced, BucketOwnerPreferred or ObjectWriter, for a bucket that has ownership controls.

The error document STRG returns:

<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>OwnershipControlsNotFoundError</Code><Message>The bucket ownership controls were not found</Message><Resource>/</Resource><BucketName>my-bucket</BucketName><RequestId>...</RequestId></Error>

Errors​

These are the errors this request can return, and the situation behind each one.

CodeHTTP statusWhen
OwnershipControlsNotFoundError404Always, for a bucket the access key can reach. This is the normal answer.
NoSuchBucket404The bucket does not exist, belongs to another account, or is in a region other than the endpoint's - including when the account has nothing stored in the endpoint's region.
AccessDenied403The access key is scoped to buckets that do not include this one, the account is not active, or the request is unsigned.
InvalidAccessKeyId403The access key does not exist, has expired or been revoked - or it was created moments ago and is not usable in this endpoint's region yet, in which case the same request works shortly afterwards.
SignatureDoesNotMatch403The request signature does not match.
RequestTimeTooSkewed403The request time is more than 15 minutes from the server's.
AuthorizationHeaderMalformed400The signature's credential scope names a region other than the endpoint's.
NotImplemented501The request carries a query parameter this operation does not take.
SlowDown503Too many requests. The Retry-After header says when a retry is welcome; the AWS SDKs retry on their own.
ServiceUnavailable503A temporary failure; the same request can be retried.
InternalError500An unexpected failure while confirming the bucket; the same request can be retried.

Differences from Amazon S3​

The table lists each place where STRG behaves differently, and what that means for a client.

AspectAmazon S3STRG
Object OwnershipConfigurable per bucket; new buckets get BucketOwnerEnforcedBuckets have no ownership controls, so every bucket answers 404 OwnershipControlsNotFoundError
ACLsDisabled under BucketOwnerEnforcedA bucket is private or public-read, and that ACL is honoured; GetBucketAcl and PutBucketAcl read and set it
Setting or removing itPutBucketOwnershipControls, DeleteBucketOwnershipControlsBoth answered with 501 NotImplemented
Bucket in another region301 redirect with x-amz-bucket-region404 NoSuchBucket. A bucket is reached through its own regional endpoint.
x-amz-expected-bucket-ownerChecked against the bucket ownerWelcome, with nothing to check

Examples​

Each example reads the ownership controls of my-bucket in eu-central-1 and treats OwnershipControlsNotFoundError as the expected answer.

aws s3api get-bucket-ownership-controls \
--bucket my-bucket \
--endpoint-url https://s3.eu-central-1.strg.com \
--region eu-central-1

The command ends with An error occurred (OwnershipControlsNotFoundError) when calling the GetBucketOwnershipControls operation and a non-zero exit status.

View as Markdown