What's Changed
New Contributors
- @onelshina made their first contribution in #1219
- @bandle made their first contribution in #1227
[1.4.9] — 2026-08-01
Added
- Lambda MicroVMs — new service — control-plane emulation of the AWS Lambda MicroVM API (
2025-09-09):RunMicrovm,GetMicrovm,ListMicrovms,SuspendMicrovm,ResumeMicrovm,TerminateMicrovm,CreateMicrovmImage,CreateMicrovmAuthToken, andCreateMicrovmShellAuthToken. MicroVMs transition straight toRUNNINGand images toCREATED(no real provisioning); state is account- and region-scoped. Reported by @wparad. - Region-scoped state — EC2, CloudTrail, ECR, Glue, OpenSearch, WAFv2, and Backup now isolate state by account and region, matching real AWS and joining IoT and AppSync Events from 1.4.8. Same-name resources in different regions no longer collide. WAFv2 homes
CLOUDFRONT-scope resources in us-east-1 withglobal-segment ARNs. Persisted state carries the versioned regional schema (on-disk format v3) that an older binary refuses rather than misreads; legacy resources migrate by ARN region. Contributed by @Areson. - Region-scoped state — ACM, Elastic Load Balancing (ALB/NLB), MediaConnect, and RDS Data now isolate state by account and region as well, using the same versioned regional schema (on-disk format v3) and by-ARN legacy migration.
- IAM — role update parity —
CreateRoleandGetRolenow round-tripPermissionsBoundary;PutRolePermissionsBoundary/DeleteRolePermissionsBoundaryupdate it with AWS-shaped role output and missing-role errors; andUpdateRoleDescriptionnow returns and persists the updated role. This unblocks Terraform providers that reconcile fixed boundaries and descriptions on service roles. Contributed by @jayjanssen.
Changed
- S3 — presigned URL signatures are now verified — presigned SigV4 URLs were accepted without checking the signature, so a URL signed with bogus credentials, or one whose signed headers (
content-type,content-length, …) were changed after signing, still succeeded. Presigned URLs are now verified against the server credential (AWS_SECRET_ACCESS_KEY, defaulttest); a bad signature or a tampered signed header returns403 SignatureDoesNotMatch, matching real S3. Header-signed and anonymous requests are unaffected. Reported by @BartekAndree.
Fixed
- Step Functions —
aws-sdk:s3:headObjectdropped the object's userMetadatamap — the S3 REST-XML SDK-integration spec maps response headers to output fields by exact name, which cannot express the N dynamicx-amz-meta-*headers, so the task result carried noMetadatakey and an ASL reading$.Metadata.<key>(e.g.States.StringToJson($.Metadata.shardcount)to size a downstream fan-out) failed withStates.Runtime. The dispatcher now collectsx-amz-meta-*response headers into aMetadatamap with the prefix stripped, attached after the SFN key-convention pass so the metadata keys stay verbatim (lowercase, as S3 stores them) instead of being title-cased like API member names. Contributed by @michael-denyer. - Cognito —
CUSTOM_AUTHnow honors Cognito-owned SRP challenges and passesClientMetadatato DefineAuth — AmplifyCUSTOM_WITH_SRPfailed withUSER_ID_FOR_SRP was not foundbecauseCUSTOM_AUTHalways invoked CreateAuth and returnedCUSTOM_CHALLENGE, even when DefineAuth returnedPASSWORD_VERIFIER/SRP_A. InitiateAuth withSRP_Anow recordsSRP_Asuccess (AWS-like), returns built-inPASSWORD_VERIFIERchallenge parameters, and continues the custom-auth session after RespondToAuthChallenge so MFACUSTOM_CHALLENGErounds still work. DefineAuth also receivesClientMetadata(previously hard-coded{}), matching Create/Verify. Contributed by @onelshina. - EC2 -
ModifySecurityGroupRules- this action was unimplemented and returnedInvalidAction: Unknown EC2 action: ModifySecurityGroupRules. Full support is now provided. Contributed by @staranto. - Step Functions —
aws-sdkintegrations for Query-protocol services sent malformed requests — the shared adapter numbered EC2 list parameters under the wrong wire names and passed the form body as a string rather than bytes, so calls such asaws-sdk:ec2:describeInstancesandaws-sdk:sqs:getQueueAttributesfailed or silently dropped parameters. EC2 list parameters are now numbered under their botocore wire names, the body is encoded to bytes,GetQueueAttributesreturns the SDKAttributesmap, andIsTruncatedis emitted as a boolean. Contributed by @bandle. - Step Functions — wildcard path projections now resolve — JSONPath wildcard (
[*]) projections in ASL returned incorrect results. Contributed by @felixp-square. - IoT — topic-rule Lambda action resolved the function in the wrong region — after IoT state became region-scoped, a topic rule invoking a Lambda action looked the function up in the request region rather than the function's own, so cross-region rule targets missed. Contributed by @Areson.
- S3 —
GetBucketEncryptionnow returns the default SSE-S3 configuration — a bucket with no explicit encryption returnedServerSideEncryptionConfigurationNotFoundError, but since 5 January 2023 every S3 bucket has default SSE-S3 encryption, so real S3 returns anAES256configuration.GetBucketEncryptionnow returns that default (matching AWS) rather than the error. Reported by @rsariyev-nav. - SNS — subscription filter policies now match
String.Arraymessage attributes — aFilterPolicycompared the rawStringValueof aString.Arrayattribute (e.g.["example.created"]) against the policy values, so array attributes never matched. Each element of aString.Arrayattribute is now evaluated separately, matching AWS. Reported by @cabrerafd.