Amazon S3 Control
Store and read account public access block settings through REST.
Plan: Free94 of 97 operations implemented1Known difference
The tested CLI adds an account prefix to the local hostname; use the REST example. Policy enforcement was not established.
Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.
Connect
Section titled “Connect”Start Vera as in Get started, then run this in a terminal of its own, from an empty scratch directory. The example sends plain HTTP requests with curl, so it doesn’t need the AWS CLI:
export VERA_ENDPOINT="http://localhost:5003"ACCOUNT_ID=123456789012The emulator serves the 2018-08-20 API over the REST XML protocol. Each request names the account in the x-amz-account-id header, so no special host name is needed. The requests need no AWS credentials. S3 Control is on the Free plan, which runs without a license key: see Licenses and plans.
The AWS CLI doesn’t work here: for these operations, it puts the account ID in front of the endpoint’s host name. The official AWS CLI 2.31.35 requested http://123456789012.127.0.0.1:5003/v20180820/configuration/publicAccessBlock, which doesn’t reach the emulator, even with AWS_DISABLE_HOST_PREFIX_INJECTION=true. boto3 1.40.72 with inject_host_prefix=False kept the prefix too. Use the REST requests below rather than editing your hosts file.
Example
Section titled “Example”Write the four public access block settings to a file and put them for the account:
cat > public-access-block.xml <<'XML'<PublicAccessBlockConfiguration> <BlockPublicAcls>true</BlockPublicAcls> <IgnorePublicAcls>true</IgnorePublicAcls> <BlockPublicPolicy>true</BlockPublicPolicy> <RestrictPublicBuckets>true</RestrictPublicBuckets></PublicAccessBlockConfiguration>XMLcurl --fail --silent --show-error -X PUT \ "$VERA_ENDPOINT/v20180820/configuration/publicAccessBlock" \ -H "x-amz-account-id: $ACCOUNT_ID" -H 'Content-Type: application/xml' \ --data-binary @public-access-block.xmlThe put returns an XML response envelope. Read the settings back:
curl --fail --silent --show-error \ "$VERA_ENDPOINT/v20180820/configuration/publicAccessBlock" \ -H "x-amz-account-id: $ACCOUNT_ID"The response returns all four settings. It starts with an XML declaration and may come on one line; these are its fields:
<PublicAccessBlockConfiguration> <BlockPublicAcls>true</BlockPublicAcls> <IgnorePublicAcls>true</IgnorePublicAcls> <BlockPublicPolicy>true</BlockPublicPolicy> <RestrictPublicBuckets>true</RestrictPublicBuckets></PublicAccessBlockConfiguration>To clean up, delete the settings, which also returns an XML response envelope, then the input file:
curl --fail --silent --show-error -X DELETE \ "$VERA_ENDPOINT/v20180820/configuration/publicAccessBlock" \ -H "x-amz-account-id: $ACCOUNT_ID"rm public-access-block.xmlAfter the delete, the same GET answers HTTP 404 with NoSuchPublicAccessBlockConfiguration.
Supported features
Section titled “Supported features”- Public access blocks: an account’s four flags stored, read back as set and deleted.
- Settings per account: the settings belong to the account ID in the request. In earlier testing, reading them with another account’s ID returned
404 NoSuchPublicAccessBlockConfiguration. - Also served, not yet tested: access points and their policies, Multi-Region Access Points, Object Lambda access points, access grants, Batch Operations job management, Storage Lens configurations and groups, S3 on Outposts buckets, and tags. They weren’t part of the checks on Vera 1.2.0 preview or Vera 1.2.0-rc.3.
Limitations
Section titled “Limitations”The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.
- The AWS CLI doesn’t reach the emulator. The tested CLI and boto3 add the account ID to the endpoint’s host name, and
AWS_DISABLE_HOST_PREFIX_INJECTION=truedoesn’t stop it. This is a connection problem, not a missing operation: the REST requests above reach the same operations. - Settings weren’t tested against S3. A public access block is stored and returned, but whether it changes S3 requests wasn’t established. Routing through access points, Multi-Region Access Points and Object Lambda, and Storage Lens metrics, weren’t tested either.
- Account authorization wasn’t tested. Beyond the earlier read with another account’s ID, writes, other callers and policy enforcement weren’t tried.
- Batch Operations manifests are only partly checked. In earlier testing,
CreateJobaccepted a manifest object that doesn’t exist, and an object ARN and version ID that belong to different objects, though it rejected a version ID that doesn’t exist. Jobs weren’t run.
API coverage
Section titled “API coverage”Every operation in AWS's published 2018-08-20 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean
No operation matches .
Try part of a name, such as AssociateAccessGrantsIdentityCenter, or .
| Operation | Status | Notes |
|---|---|---|
| Associate | Implemented | |
| Create | Implemented | |
| Create | Implemented | |
| Create | Implemented | |
| Create | Implemented | |
| Create | Not implemented | |
| Create | Implemented | |
| Create | Known difference | Local observation: Accepts a manifest object that doesn't exist, and an object ARN and version ID that belong to different objects, though it rejects a version ID that doesn't exist. Jobs weren't run. |
| Create | Implemented | |
| Create | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Not implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — deleted the account's settings over unsigned REST with the x-amz-account-id header. |
| Delete | Implemented | |
| Delete | Implemented | |
| Delete | Implemented | |
| Describe | Implemented | |
| Describe | Implemented | |
| Dissociate | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Not implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — over unsigned REST with the x-amz-account-id header, returned the four flags after a put, and HTTP 404 NoSuchPublicAccessBlockConfiguration after a delete. Earlier testing, 3 November 2026: for another account's ID, returned 404 NoSuchPublicAccessBlockConfiguration. Authorization wasn't tested. |
| Get | Implemented | |
| Get | Implemented | |
| Get | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| List | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | |
| Put | Implemented | Local observation: Vera 1.2.0 preview, 5 November 2026 — stored the four flags from an XML body, sent over unsigned REST with the x-amz-account-id header. The tested AWS CLI adds the account ID to the endpoint's host name and doesn't reach the emulator: a connection problem, not a missing operation. |
| Put | Implemented | |
| Put | Implemented | |
| Submit | Implemented | |
| Tag | Implemented | |
| Untag | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented | |
| Update | Implemented |