What's Changed
New Contributors
- @edbramwell made their first contribution in #2223
- @kinoh made their first contribution in #2227
[1.5.29] — 2026-10-17
Added
- Managed Service for Apache Flink — control plane —
kinesisanalyticsv2applications for theFLINK-*runtimes: create, describe, update and delete, start and stop with the model's status transitions, snapshots, CloudWatch logging options and tags, per account and region. Updates bumpApplicationVersionIdand theConditionalToken, and a stale one returnsConcurrentModificationException. CloudFormation creates, updates and deletesAWS::KinesisAnalyticsV2::Application,AWS::KinesisAnalyticsV2::ApplicationCloudWatchLoggingOptionandAWS::Logs::LogStream, so a CDK Flink stack deploys. Contributed by @Jolley71717. - Managed Service for Apache Flink — job execution — with Docker available, starting a
FLINK-1_19orFLINK-1_20application runs its jar from MiniStack S3 in the official Apache Flink image (1.19.1 or 1.20.5, Java 11) with a JobManager and a TaskManager, its runtime properties at/etc/flink/application_properties.json, its configured parallelism and checkpointing, and its AWS calls pointed at MiniStack in the application's account. Snapshots are Flink savepoints, restores resume the job's state, and a job that fails to start returns the application toREADY. Jars in/opt/ministack/flink-lib(for example a mountedaws-kinesisanalytics-runtime) are added to every cluster. Without Docker the control plane behaves as before. Contributed by @Jolley71717. - S3 Access Points — S3 Control
CreateAccessPoint,GetAccessPoint,ListAccessPoints,DeleteAccessPointandPut/Get/DeleteAccessPointPolicy. The bucket must be in the request's region, names are unique per account and region, and errors follow AWS (AccessPointAlreadyOwnedByYou,NoSuchAccessPoint). Requests through an access point ARN (<name>-<account>.<host>) or its-s3aliasalias reach the bucket, including as aCopyObjectsource; signing for another region gets the bucket-region redirect with the access point's region.DeleteBucketrefuses a bucket with access points. CloudFormation provisionsAWS::S3::AccessPoint, and underAUTH=trueeach operation needs itss3:action. Contributed by @fabio-andre-rodrigues. - S3 Object Lambda — S3 Control
Create/Get/List/DeleteAccessPointForObjectLambda,Get/PutAccessPointConfigurationForObjectLambdaand the policy operations, with the supporting access point and Lambda in the same account and region.GetObjectthrough an Object Lambda ARN or--ol-s3alias invokes the Lambda with the documentedgetObjectContext(a presignedinputS3Urlthrough the supporting access point,outputRoute,outputToken) and returns what it writes withWriteGetObjectResponse.HeadObject,ListObjectsandListObjectsV2transformations return the Lambda's JSON result; operations without a transformation pass through;RangeandpartNumberneedAllowedFeatures; Lambda failures map toLambdaRuntimeError,LambdaResponseNotReceived,LambdaTimeoutandLambdaNotFound. CloudFormation provisionsAWS::S3ObjectLambda::AccessPointandAccessPointPolicy. AWS no longer onboards new Object Lambda customers, so the data plane follows the S3 user guide. Contributed by @fabio-andre-rodrigues. - Lambda —
AWS_DISABLE_HOST_PREFIX_INJECTION=trueby default — Lambda environments set it unless the function does, so boto3 in a handler reachesWriteGetObjectResponsewithout the<route>.<host>prefix, which doesn't resolve locally. SDKs that ignore the variable need their host-prefix injection turned off in client config. Contributed by @fabio-andre-rodrigues.
Fixed
- Cognito / API Gateway — OAuth scope refusals — a client credentials grant that named a scope the client lacks, or one that doesn't exist, dropped it and issued a token;
/oauth2/tokennow refuses the whole request with 400invalid_grantorinvalid_scope, and a REST API method whose authorization scopes match none in the access token answers 401Unauthorized(theUNAUTHORIZEDgateway response) instead of 403. Contributed by @gakuto-cw21. - S3 — browser POST policies are enforced — a form upload was written whatever its policy said; an expired policy, a field that fails a condition or a field the policy doesn't cover now answers 403
AccessDenied(Invalid according to Policy: …), and underAUTH=truethe SigV4 or SigV2 signature and the signer'ss3:PutObjectpermission are checked. Contributed by @kinoh. - CloudWatch Logs — event order across streams and pages —
FilterLogEventsstopped atlimitbefore sorting across streams, so a newer event could displace an older match; events now merge across streams by timestamp, then ingestion time, andsearchedLogStreamsis empty, as on AWS.GetLogEventsexcludes events atendTime, and its tokens no longer repeat or skip events when late events arrive. Contributed by @kinoh. - Lambda —
RevisionIdon updates —UpdateFunctionCode,UpdateFunctionConfigurationandUpdateAliasignoredRevisionId; a stale one now answers 412PreconditionFailedExceptionbefore anything changes. Contributed by @kinoh. - SQS — an empty policy removes it —
SetQueueAttributeswith an emptyPolicyorRedriveAllowPolicystored the empty string, and an emptyRedrivePolicywas refused; each now removes the attribute, as Terraform's policy resources expect. Contributed by @kinoh. - AppSync Events —
eventis a string — subscribers'datamessages carriedeventas a one-element array; it is now the JSON-encoded string, as AWS sends it. Contributed by @edbramwell. - S3 — Object Lock is per version — retention and legal holds were stored per key, so a lock on one version blocked permanent deletes of the key's other versions; they now belong to the version they were set on,
GetObjectRetention,PutObjectRetentionand the legal-hold calls takeversionId, and aDeleteObjectorDeleteObjectswithout aVersionIdon a locked key adds a delete marker instead of answering 403. Reported by @bettiah. - S3 — Object Lock headers need an Object Lock bucket —
PutObject,CopyObject,CreateMultipartUploadand browser POST uploads withx-amz-object-lock-*headers on a bucket created without Object Lock applied the lock; they now answer 400InvalidRequestBucket is missing ObjectLockConfiguration. Reported by @bettiah. - KMS —
ScheduleKeyDeletionwindow — aPendingWindowInDaysoutside 7–30 was accepted; it now answersValidationExceptionPendingWindowInDays must be between 7 and 30. Reported by @bettiah. - KMS — RSASSA-PSS salt — signatures used a maximum-length salt; they now use a salt as long as the digest, as AWS does, and
Verifyexpects the same. Reported by @bettiah. - KMS — RSA encryption algorithms —
EncryptandDecryptused OAEP SHA-256 whateverEncryptionAlgorithmnamed; they now useRSAES_OAEP_SHA_1orRSAES_OAEP_SHA_256as named, so a mismatchedDecrypt, or one withoutEncryptionAlgorithm, answersInvalidCiphertextException, and anEncryptwith an algorithm the key doesn't support answersInvalidKeyUsageException. Reported by @bettiah. - KMS —
SignandVerifyinput checks — a digest of the wrong length or an algorithm the key spec doesn't support crashed with a 500; they now answer 400ValidationException(Digest is invalid length for algorithm …) andInvalidKeyUsageException, and an unknown algorithm name answers the enumValidationException. Reported by @bettiah. - CloudFormation —
AWS::S3::MultiRegionAccessPointRefwhen the access point exists — a create that found an existing Multi-Region Access Point of the same name returned its alias as the physical id;Refnow returns the name in that case too.