What's Changed
New Contributors
- @facuparedes made their first contribution in #1521
[1.5.2] — 2026-08-26
Added
- Cognito —
AdminLinkProviderForUser/AdminDisableProviderForUser— both actions answeredInvalidAction, so a federated identity could not be linked to a local user. Linking records the identity in the user'sidentitiesattribute (up to 5 per user,AliasExistsExceptionwhen the identity is already linked) and a hosted-UI federated sign-in resolves to the linked user; disabling removes the link, and withProviderName=Cognitoit deactivates the local user's password sign-in (NotAuthorizedException) while the profile stays. Reported by @rsimples. - Cognito —
AddCustomAttributes, and a user pool that reports its schema (SchemaAttributes) —DescribeUserPoolnever returned the pool's attribute schema andAddCustomAttributesansweredInvalidAction, so Terraform re-planned anaws_cognito_user_poolas changed right after creating it and failed the follow-up apply. A pool now carries the full standard attribute set with AWS's data types, mutability and constraints, a request'sSchemaentries override a standard entry field-for-field under theircustom:/dev:prefix, andAddCustomAttributesadds 1-25 attributes per call with the documented errors; aRequiredcustom attribute is refusedInvalidParameterException, as real Cognito refuses it. Contributed by @jgrumboe. - S3 —
ListBucketspagination (MaxBuckets,ContinuationToken,Prefix) — every call returned the full bucket list and ignored the paging parameters; they are now honored, withContinuationTokenalone signalling a further page, per the S3 model. Contributed by @gaul. - S3 —
CRC32Cchecksums — a put carryingx-amz-checksum-crc32cwas refused as unsupported; CRC32C is now computed in-process (table-driven, no new dependency), verified on upload (BadDigeston mismatch) and surfaced on reads with checksum mode enabled, completing all five S3 checksum algorithms. Contributed by @gaul.
Fixed
- Step Functions —
CreateStateMachineis idempotent — repeating a create with the same name refusedStateMachineAlreadyExistseven when the request was identical, which AWS answers with the existing machine's ARN. An identical create (definition, role, type, logging, publish and version description) now succeeds, only a differing one is refused, andDescribeStateMachineno longer leaks internal version-bookkeeping fields. Contributed by @bandle. - EventBridge — an input template no longer needs quotes around a string variable — AWS adds the quotes itself when a string variable sits in a JSON value position, so the documented form
{"detail": <detail>, "groupId": <groupId>}rendered a body that would not parse. A string variable in a value position is now quoted, a variable inside a string literal interpolates raw, and an object or array spliced into a string has its internal quotes stripped, as AWS does. Contributed by @ppettitau. - EventBridge Pipes — a DynamoDB stream reaches a Step Functions target — the poller delivered to SNS and to nothing else, so a pipe targeting a state machine reported
RUNNING, advanced no position and moved no records, with no error and no log line. Astatestarget now gets oneStartExecutionper batch carrying the records as a JSON array, and a batch that fails to reach its target stays on the stream for the next poll to retry, logging a warning naming the pipe. Contributed by @facuparedes. - EC2 —
DescribeSnapshotsevaluatesFilters— filters were ignored entirely, so every filtered call returned every snapshot in the account; the documented filter names (snapshot-id,volume-id,status,owner-id,encrypted, thetagforms, ...) now narrow the result. Contributed by @bandle. - EC2 — two invented operations removed —
DescribeInstanceMaintenanceOptionsandDescribeInstanceAutoRecoveryAttributedo not exist in the EC2 API; both handlers answered invented shapes and are gone. - S3 —
CopyObjectappliesx-amz-acl, andUploadPartCopyhonors the copy-source conditions — a canned ACL on a copy was dropped, so a copy addressedpublic-readlanded private with no way to tell but reading the ACL back, andUploadPartCopyignored all fourx-amz-copy-source-if-*headers. A copy now permissions the destination as a put does (an unknown value refuses the request), a copy without an ACL leaves the destination private rather than inheriting the replaced key's, and both copy operations judge the source conditions the same way. Contributed by @gaul. - S3 — the versioning edges answer the way S3 answers them —
DeleteBucketdeleted a bucket that still held versions or delete markers (nowBucketNotEmptyuntil they are removed by version id); reading a delete marker by its version id answered 200-empty on GET andNoSuchVersionon HEAD (now405 Method Not Allowedwithx-amz-delete-marker,Last-ModifiedandAllow: DELETE); an ACL or tag operation naming a version that never existed read back the default policy (nowNoSuchVersion); andListObjectVersionshonorsdelimiter, grouping keys intoCommonPrefixes. Contributed by @gaul. - S3 — the directory-bucket delete conditions are refused —
x-amz-if-match-sizeandx-amz-if-match-last-modified-time(and theSize/LastModifiedTimemembers in aDeleteObjectsentry) were silently ignored on a general-purpose bucket; they now answerNotImplemented, as live S3 does. Reported by @gaul. - CodeBuild —
BatchDeleteBuildsreportsbuildsNotDeletedas structures — an id that could not be deleted was reported as a bare string where the API models{id, statusCode}, crashing SDK parsers; it now answers the documented structure. - Lambda —
InvokeWithResponseStreamreturns an HTTP-level error unframed — aResourceNotFoundException(and any other non-200) was wrapped in the eventstream envelope, which SDK parsers cannot read; the error now returns as plain JSON, and only a 200 streams. - s3tables — the delete operations answer
204 No Content—DeleteTableBucket,DeleteNamespaceandDeleteTableanswered200 {}where AWS answers an empty 204.