2.1.0 (2026-09-15)
Bug Fixes
- acm: reflect the requested ValidationDomain in DescribeCertificate (#3264) (922eb0b)
- acm: reject RequestCertificate key algorithms real ACM does not support (#3044) (db6c419), closes #3027
- acm: report SUCCESS domain validation once a certificate is issued (#3112) (9b28388)
- acm: stop hex-shaped names becoming bogus IP address SANs (#3335) (7a7531a)
- amazonmq: add configuration for AMQP and console host port ranges (#3315) (2d5a8f7)
- apigateway: add missing authorizer arg to two VtlContext test calls (38056a0), closes #3560
- apigateway: allow idempotent custom-id tags (#3430) (eb62225)
- apigateway: answer an unmatched REST request with 403, not 404/405 (#3547) (fb82fb2)
- apigateway: decode the ~0 JSON Pointer escape in stage method-settings patch paths (#3526) (bc44fc9)
- apigateway: enforce ApiKeyRequired on REST API methods (#3537) (3b31c5a), closes #3507 #3507
- apigateway: enforce AWS_IAM authorization on the execute-api data plane (#2895) (06349c8), closes #2810
- apigateway: expose VTL authorizer and parameter maps (#3538) (2290247)
- apigateway: fall back to a parameterised sibling on method mismatch (#3399) (f03a716)
- apigateway: implement MOCK integration response selection based on status code (#3327) (8d011cb)
- apigateway: import x-amazon-apigateway-any-method on OpenAPI import (#2876) (b85dd2b)
- apigateway: include apiKeyId in the REQUEST authorizer identity context (#3143) (dced3e7)
- apigateway: only emit the greedy path parameter for greedy resources (#3397) (547090b)
- apigateway: prefer path parameters in VTL lookups (#3560) (166b13a)
- apigateway: report rootResourceId and the API key defaults (#3269) (c57b8ff)
- apigateway: return the full integration configuration on read-back (#3432) (a91d7be)
- apigateway: take the last value of a repeated query string parameter (#3548) (e8edc3d)
- apigatewayv2: provision integration, route and stage on quick create (#2877) (2a637d3), closes #1902
- appconfigdata: honor requested poll interval (#3092) (8686651)
- appconfigdata: return empty payload on repeat polls (#3295) (47d96f6)
- appsync: verify JWT signatures and SigV4 requests for GraphQL auth (#3541) (f38a384)
- athena: project the column names the Glue table declares (#3414) (ebe9cf2)
- athena: read a projecting table's partition paths, not its whole location (#3415) (6d6940b)
- athena: register every Glue database as a DuckDB schema so . resolves (#2993) (0ab9979)
- autoscaling: round-trip launch configuration InstanceMonitoring and BlockDeviceMappings (#3174) (4cc850e)
- autoscaling: round-trip the dropped Auto Scaling group fields (#3494) (cebb011)
- autoscaling: validate monitoring booleans (#3219) (84a7ce6)
- bound CloudTrail delivery retries (#3298) (d44a3fe)
- build: publish arm64 baseline release image (#3461) (e0d4318)
- cdk: parse CDK endpoint URLs safely (#3352) (c5e1a7f)
- cloudcontrol: reject ListResources for unsupported resource types instead of returning empty (#3141) (5cf10ec), closes #2043
- cloudcontrol: scope resources by caller account (#3244) (b6080ea)
- cloudformation: apply AWS::SQS::Queue tags from the template (#3532) (a5045d3), closes #2985
- cloudformation: delete AWS::IAM::User on stack deletion (#3076) (7b5c6e2), closes #2490
- cloudformation: expand AWS::Serverless::StateMachine, and reject every unresolvable DefinitionUri on both StateMachine and HttpApi (#2885) (f2b4c08)
- cloudformation: expose the RDS resource-id GetAtt attributes (#3527) (b618fa9)
- cloudformation: identify unsupported SAM Cognito authorizers (#3535) (809ce40)
- cloudformation: keep a generated physical name across stack updates (#2788) (1528c65)
- cloudformation: keep generated names across updates for Scheduler, SQS and MicrovmImage (#2985) (9162b99), closes #2788
- cloudformation: keep unchanged VPCs and security groups on stack update (#3033) (dde11ae)
- cloudformation: merge Fn::Transform AWS::Include before provisioning, and honour GetTemplate TemplateStage (#2886) (77b4881)
- cloudformation: persist FunctionResponseTypes on Lambda::EventSourceMapping (#2964) (9e2c031), closes #2848
- cloudformation: preserve list intrinsics and conditional tags (#2986) (9f44254)
- cloudformation: preserve SAM implicit API auth (#3501) (8963c66)
- cloudformation: provision AWS::Scheduler::ScheduleGroup (#2796) (961d82d)
- cloudformation: provision CloudFront policies and origin access controls (#3228) (895adce), closes #2441
- cloudformation: reconcile AWS::Pipes::Pipe on UpdateStack (#2970) (a31a959)
- cloudformation: refuse UpdateStack on a ROLLBACK_COMPLETE stack (#3104) (d2d7eb4), closes #3097
- cloudformation: replace AWS RDSDBCluster when EngineMode or StorageEncrypted changes (#3555) (589b1ab)
- cloudformation: resolve dynamic references for all template values (#3301) (924e35c), closes ProvisionContext#resolveOptional #2213
- cloudformation: resolve FunctionResponseTypes through whole-property intrinsics (#2996) (9eb4fc8), closes #2964 #2964 #2796 #2946
- cloudformation: resolve list-valued intrinsics for DBSubnetGroup SubnetIds (#2946) (f214050), closes #2937 #2937 #2937 #2937 #2937 #2937 #2937
- cloudformation: scope stack state by account (#3185) (0cff315)
- cloudformation: set Fn::GetAtt attributes the schemas declare (#2761) (7095641)
- cloudformation: skip re-invoking custom resource handlers when properties are unchanged (#2785) (71c7836)
- cloudformation: validate WAFv2 WebACL and Config rule required properties (#3576) (36c8396), closes #2711
- cloudformation: wire Route53 and Scheduler provisioners into the test fixture (#2922) (cf10d25), closes #2722 #2796
- cloudfront: echo OriginSslProtocols and round-trip legacy cache behavior fields (#3182) (006f3c7)
- cloudfront: echo TrustedSigners in cache behaviors so the AWS provider does not segfault (#3015) (75e93e5), closes #2767
- cloudfront: emit origin timeout fields (#3299) (3523378), closes #3221
- cloudfront: persist and echo LambdaFunctionAssociations and FunctionAssociations (#2915) (3d3ab00), closes #2835
- cloudfront: report Logging on distribution reads (#3318) (d4e9dcb)
- cloudfront: stop duplicating CachedMethods into AllowedMethods.Items (#3217) (9e9b0b6)
- cloudhsmv2: tighten backup and tag fidelity (#3443) (daff15d)
- cloudtrail: bound log flush memory (#3293) (d3530d9)
- cloudtrail: implement CreateTrail with tagging support and add integration tests (#3206) (991470e)
- cloudtrail: serialize trail mutations to prevent lost updates (#2911) (8c2619f), closes #2904
- cloudtrail: stop CloudTrailLogWriterBoundedRetryIntegrationTest relying on S3 key order (#3363) (34be181), closes #3361
- cloudwatch: fail Logs Insights queries with unsupported syntax instead of silently dropping it (#3139) (121a929)
- cloudwatchlogs: bound stored events and enforce retention (#3611) (6ce3fbb)
- cloudwatch: wrap TagResource and UntagResource in their declared Result element (#3211) (65db87d)
- codebuild: persist build numbers across restarts (#3049) (51f5591)
- codebuild: resolve project ARNs in batch lookup (#2999) (de92212)
- codedeploy: default server hook timeout to one hour (#3606) (73ef15f)
- codedeploy: fail closed on unreachable, erroring, or timed-out lifecycle hooks (#3563) (d167cc5)
- codepipeline: cap QUEUED and PARALLEL pipelines at 50 active executions (#3503) (2104b33)
- codepipeline: poll S3 source changes (#3525) (ffd2488)
- codepipeline: populate stage execution status (#3478) (129ba0a)
- cognito: clear stale pending admin updates (#2533) (a704f73)
- cognito: delete a pool's users and resource servers on DeleteUserPool (#3419) (c48e81d), closes #2858
- cognito: delete a user pool's records with the pool (#2949) (2a4ca61), closes #3419 #2864 #2936 #2864
- cognito: fail listUsers/listUserPoolClients on an absent user pool (#2962) (4bf17a1), closes #2952
- cognito: invoke the CustomMessage Lambda trigger before delivering verification emails (#3140) (148ec83)
- cognito: name missing user pools in errors (#2936) (c30ca8f)
- cognito: serialize attribute verification updates (#2535) (530717e)
- cognito: verify self-service access tokens (#3184) (3c247eb)
- compat: avoid CloudWatch statistics time race (#3320) (bf49390)
- compat: require Kinesis stream details (#3321) (53a5164)
- compat: retry RedshiftTest's SDK calls past a brief connection-refused hiccup (#3216) (974d357)
- config: accept any Host header again after the Quarkus 3.39 upgrade (#3222) (1f4d43c), closes #3175
- core: accept ARNs from every AWS partition (#3376) (1726c6a), closes #2485
- core: accept only JSON objects as JSON protocol request bodies (#3509) (9f9a828)
- core: prevent REST JSON requests falling through to S3 (#3498) (e62e99f)
- core: quarantine unreadable hybrid storage (#2250) (cc8b8e9)
- core: read ARN resource segments by structure, not by position (#3392) (7c08b35)
- docdb: accept an existing security group on CreateDBCluster and ModifyDBCluster (#2991) (91d7ab8), closes #2990
- docker: allow explicit root for restricted sockets (#3558) (d8e7382)
- docker: PortAllocator also checks ports other containers already publish on the host (#2805) (afa5960)
- docker: produce a working native image from Dockerfile.native (#3325) (a501eab)
- docker: translate misleading disk-quota error for keyring exhaustion (#2797) (7828ab2), closes floci-io/floci#2243
- dynamodb: add missing request validation (#3287) (4d199b1)
- dynamodb: append list values for out-of-range indexes (#3088) (f8a1c31)
- dynamodb: apply GSI throughput updates (#3032) (2d26f93), closes #3028
- dynamodb: bind every PartiQL parameter type and reject unordered operands (#3288) (66ca9dc)
- dynamodb: calculate consumed capacity correctly (#3071) (97915d3)
- dynamodb: enforce primary key size limits (#3354) (8624ccc)
- dynamodb: flush persistence once per affected table in batch and transact writes (#2998) (80725e6), closes #2995 #2995 #2995
- dynamodb: honor customer-supplied KMS key for table SSE (#1923) (e313ab5), closes #1811
- dynamodb: keep stream iterators stable after trimming (#3313) (b377134)
- dynamodb: match AWS on UpdateItem results and request limits (#3447) (6d43e16)
- dynamodb: match AWS wording and order for Select rejections (#3410) (dffe34e)
- dynamodb: merge shared-prefix projection paths and compact list indices (#3072) (5c8cff6)
- dynamodb: more request validations in Query and Scan (#3360) (fbe92aa), closes #3287
- dynamodb: name the table in the ResourceNotFoundException message (#2929) (58b2e5f)
- dynamodb: partition parallel scan by partition key hash (#3225) (#3429) (9c9aa67)
- dynamodb: re-check TTL under item lock before sweeper deletes (#3562) (f1bbe12)
- dynamodb: read every attribute through an ALL-projection index in PartiQL (#3309) (4cb9314)
- dynamodb: reject a BETWEEN with reversed bounds at parse time (#3183) (df0bf82)
- dynamodb: reject ConsistentRead on GSI Scan (#2931) (6dec214)
- dynamodb: reject out-of-bound query cursors (#3389) (862e4a1)
- dynamodb: reject QueryFilter with KeyConditionExpression (#2935) (7d693de)
- dynamodb: reject unused ExpressionAttributeNames/Values on PutItem, DeleteItem, Scan, Query (#2923) (262495d), closes #2893 #2893 #st #2893
- dynamodb: route Kinesis CDC to the table owner's account and retry failed forwards (#3063) (a9df872)
- dynamodb: stage transact write mutations before commit (#3189) (8343583)
- dynamodb: word BatchWriteItem key rejections the way AWS does (#3227) (f4954de)
- ec2,ecr,eks,elasticache,msk,opensearch: degrade gracefully with no Docker daemon (#2975) (1aa981f), closes #2386 #3023
- ec2,ssm: explain missing IMDS registration for SSM-only managed instances (#3283) (f77cf4d)
- ec2: add network capacity to instance type responses (#3179) (f9686d5)
- ec2: align catalog image owner filtering (#3463) (a6f1751)
- ec2: answer DescribeTransitGatewayConnects with an empty list (#3274) (f30ba77)
- ec2: bound launches and close userdata streams (#3135) (dd33308)
- ec2: bound user data output capture (#3144) (653c139)
- ec2: build the instance AWS_ENDPOINT_URL from the shared container endpoint (#3579) (1ae779a), closes #3578
- ec2: carry DeliverLogsPermissionArn through CreateFlowLogs and DescribeFlowLogs (#3172) (acc0904)
- ec2: describe launchable unknown AMI ids in DescribeImages (#3168) (de5dc0d)
- ec2: generate real key material in CreateKeyPair and fingerprint imported keys (#3307) (2fbe2b7), closes PKCS#1 PKCS#8
- ec2: guard null group entries in DescribeNetworkInterfaces group-id filter (#2887) (5c71713)
- ec2: honor AMI architecture for containers (#3096) (43cdbe2)
- ec2: include network metadata in instance type responses (#2943) (c54b237)
- ec2: include supported usage classes in DescribeInstanceTypes (#3347) (19f410d)
- ec2: let dnf swap curl-minimal for curl when installing the IMDS proxy (#3284) (5648be7), closes floci-io/floci#3281
- ec2: match cidr-block-association filters on DescribeVpcs (#3257) (eb3a6b2), closes #3256
- ec2: nest cidrBlockState in AssociateVpcCidrBlock response (#3243) (496b376), closes #3241
- ec2: place a subnet in the zone its request names, not always az1 (#2890) (c32f8b5)
- ec2: reclaim instance containers orphaned by a hard restart (#3031) (94b9665), closes #2029
- ec2: register all guest network addresses with IMDS (#3546) (3c6568b)
- ec2: reject a CreateSubnet whose CIDR overlaps an existing subnet (#3171) (614166f)
- ec2: report a NAT gateway's addresses, not just its allocation id (#2892) (bed2704)
- ec2: report NotFound for launch templates requested by name (#3246) (8bc4891), closes #3234
- ec2: store and validate CreateVpcEndpoint SubnetConfiguration (#3491) (5d0b0b4)
- ec2: store instance metadata options and add ModifyInstanceMetadataOptions (#3215) (5eacd01), closes lex00/floci#116
- ec2: tolerate a null groupId in the network-interface group-id filter (#2921) (e44df51)
- ecr: clean up registry storage (#2982) (732e009)
- ecr: enforce immutable image tags (#3009) (9507996)
- ecr: join the ECR API with the backing registry (#2466) (064f302)
- ecr: recover backing registry containers (#3486) (8e3bd63)
- ecs: enforce host-volume bind-mount safety fail-closed at register and run time (#3543) (126af73)
- ecs: reconcile services in every account, not just the default one (#3297) (42bc0d9)
- efs: implement UpdateFileSystemProtection and report protection on describe (#2842) (db182b3)
- eks: validate IAM authentication tokens (#2912) (309043b)
- elasticache: honor the requested Port on CreateReplicationGroup (#3276) (67198c7)
- elasticache: implement parameter group reservation to prevent deletion during provisioning (#3023) (d398376)
- elasticache: resolve order-dependent crossGroupAuthIsRejected test failure (#1991) (#3074) (173ff45)
- elbv2: bound Lambda and target body sizes (#3149) (ec41b1e)
- elbv2: do not let a listener bind a port Floci reserves for itself (#3034) (bf517ac)
- elbv2: drop access logs from a Gateway Load Balancer's attributes (9bf93b9)
- elbv2: report the attribute defaults, not only what was modified (910e64e)
- eventbridge,scheduler: read cron day-of-week as AWS 1-7 SUN-SAT (#3147) (60a8a9d), closes 2#1
- eventbridge: scope replay cancellation by ARN (#3058) (2e303e2)
- firehose: isolate streams by account and region (#3267) (141b159)
- firehose: keep buffered records when S3 delivery fails (#3471) (6507f32)
- github-actions: continue Docker compatibility tests after failures (#3351) (051a2f0)
- glue: bound DeleteSchemaVersions ranges before expanding them (#3508) (76c1907)
- glue: populate CatalogId on GetDatabase and GetDatabases (#2814) (342f58b), closes #2793
- guardduty: scope organization state across accounts (#3278) (ed116ae)
- honor Kinesis ExplicitHashKey routing (#3069) (a006b27)
- iam: distinguish cross-account resource grants (#3590) (2f76640)
- iam: enforce temporary credential lifecycle (#3487) (ad1061c)
- iam: report the real default version of AWS-managed policies (#3275) (abfa8e9)
- iam: resolve DynamoDB table ARN from request body for IAM enforcement (#2928) (3db883d), closes #2925
- iam: use AWS-managed policy documents (#3237) (379910b)
- identitystore: self-heal the bootstrap identity store on hasIdentityStore (#3387) (b87ee5b), closes #3386
- init-hooks: terminate hook process trees on timeout (#3372) (d99f162)
- iot: isolate topic rule actions and run the error action (#3012) (7ec4c89)
- kinesis: handle minimum partition key hash (#2950) (30b8f88)
- kinesis: reject non-string tag members instead of coercing them (#3099) (fcb5bd0), closes #2512
- kinesis: stop dropping shard records under concurrent producers and resharding (#3000) (73deb13)
- kms: apply real RSAES-OAEP for RSA keys in Encrypt and Decrypt (#3038) (e5afe35), closes #3024
- kms: give ECC_NIST_EDWARDS25519 an actual Ed25519 key (#2930) (146753b), closes #2924
- kms: protect ciphertext blobs with an AES-GCM envelope (#3544) (494bab4)
- kms: support ML-DSA keys (#3047) (b713c4b)
- kms: support SM2 signing in China regions (#3046) (5198cf2)
- kms: validate KeyUsage against KeySpec on CreateKey (#2787) (#3004) (69e8bf1)
- lambda: apply Architectures on UpdateFunctionCode (#2907) (9b582b3)
- lambda: bound ZIP extraction resources (#3127) (0fce2d2)
- lambda: correct Function URL body encoding, cookies, and error status (#3196) (d049875), closes #3153
- lambda: defer handler validation to invocation (#3332) (8b25e50), closes #3311
- lambda: deliver extension INVOKE when the runtime receives the invocation (#3070) (43e2a48), closes #2573
- lambda: do not publish a version when nothing has changed (#2941) (c48b6b0), closes #2822
- lambda: enforce handler deadline at dispatch (#3177) (438ae61), closes #3154
- lambda: fail the whole SQS batch on malformed batchItemFailures (#3169) (bcd422a), closes #3152
- lambda: give each published version its own copy of the code (#3041) (4ee5a52), closes #2958
- lambda: honor configured function architecture (#2994) (7fdd145)
- lambda: honor DynamoDB stream partial batch failures (#3466) (c6316d1)
- lambda: honor MaximumBatchingWindowInSeconds on SQS event source mappings (#3203) (ec2d678), closes #3155
- lambda: honor MaximumRetryAttempts and DestinationConfig.OnFailure for DynamoDB Streams ESM (#3263) (#3428) (1af3b56)
- lambda: honour Qualifier on GetFunction and GetFunctionConfiguration (#2932) (cf628ba), closes #1988 #2821
- lambda: honour the CodeSha256 precondition on PublishVersion (#2939) (3d2b882), closes #2822
- lambda: omit Environment when no variables are set (#2838) (2bf9b57)
- lambda: persist, validate and enforce event source mapping FilterCriteria (#3060) (5512db0)
- lambda: recover a DynamoDB Streams ESM from a trimmed checkpoint (#3412) (62abde8)
- lambda: reject dotted and over-length function names (#3300) (49903ab), closes #3238
- lambda: reject scalar structure members (#3051) (ec034a5)
- lambda: replace the fabric8 kubernetes client with a plain REST client (#2919) (97ce09f), closes #2914 PKCS#8
- lambda: report real runtime errors instead of Function.TimedOut (#3505) (34062f6), closes #3314
- lambda: resolve layer version ARNs by account (#2948) (24a8c84), closes #2813 #2813 #2809
- lambda: scope extracted function code by region (#3265) (290559c)
- lambda: serialise the version snapshot against function updates (#3010) (ebd849a), closes #2939 #3041 #3051 #2939 #3007
- lambda: stop rejecting a foreign-platform image the daemon cannot describe (#3357) (570f975)
- lambda: warn before runtime api port exhaustion (#3496) (bea8f85)
- lifecycle: clear storage before services clear on state reset (#3388) (22bae1f)
- lifecycle: run every shutdown step even when one of them fails (#3472) (3bdb019)
- memorydb: scope resources by account and region (#3261) (e02accf)
- mq: match CreateBroker EngineType and DeploymentMode without regard to case (#3268) (c1e5cc2)
- msk: isolate MSK resources by account and region (#3353) (970cd30)
- mwaa: also detect a crashed sibling Postgres container, not just Airflow (#3454) (fe07621)
- mwaa: apply AirflowConfigurationOptions to the Airflow container (#3457) (d429d10), closes #3436
- mwaa: isolate environments by account and region (#3400) (c6e64a0)
- mwaa: mark CREATE_FAILED when the Airflow container exits before becoming ready (#3446) (2a682a6), closes #3437
- mwaa: match real MWAA's Airflow/Python pairing for the emulated image tag (#3445) (473a26a), closes #3438
- mwaa: probe the metadata database over TCP before starting Airflow (#3406) (be578ac)
- mwaa: reject a malformed configured AirflowVersion as ValidationException (#3453) (a7902b9)
- neptune: isolate resources by account and region (#3401) (70176d6)
- networkfirewall: model CreateFirewall* collisions and enforce UpdateToken (#3198) (215a802), closes #2600
- opensearch: include CognitoOptions in domain status (#2860) (047db09), closes #2801
- opensearch: keep publishing the domain's host port when floci runs in a container (#2798) (96c55ec)
- opensearch: keep readiness polling after errors (#3373) (713a166)
- organizations: return account state (#3053) (587d0b5)
- parse S3 EventBridge notification XML (#3350) (ad9a88c)
- pipes: replace kafka-clients with a Kafka REST Proxy client (#3160) (cd2847d)
- pipes: restore a CloudFormation snapshot without re-validating it (#3218) (d95ed9f), closes #3192 #3209
- ram: emulate organization sharing side effects (#3279) (d322d48)
- ram: enforce resource share principal visibility (#3266) (8e10fd1)
- rds: bound PostgreSQL handshake packet lengths (#3102) (148ea6f)
- rds: bound RDS/Redshift auth proxy connections and handshakes (#3545) (1987bf0)
- rds: enhance DB cluster handling by recording createOnly properties and updating rollback logic (#3636) (b2b43df)
- rds: format unexpected query errors as XML error envelope (#3121) (daeea78), closes #3110
- rds: keep the control plane working with no Docker daemon (#3170) (49dfd1b), closes lex00/floci#38
- rds: map Aurora MySQL engine versions to the MySQL image tag (#3382) (d9cc2a0)
- rds: persist PubliclyAccessible on Create/ModifyDBInstance and echo it on Describe (#2484) (d45a437), closes #2420
- rds: populate MasterUserSecret for Aurora clusters with ManageMasterUserPassword (#3148) (6345c37), closes #3061
- rds: preserve aurora engine identity in parameter group names and managed secrets (#1920) (5719e65), closes #1829
- rds: register instances before starting auth proxy (#3467) (34efd89)
- rds: report backing container failures (#3455) (68c783b)
- rds: run IAM PostgreSQL sessions as the role named in the token (#3106) (c22ded9), closes #3087
- rds: scope event reconciliation and prune history (#3533) (04f0c3b)
- rds: support tagging DB proxy target groups (#3145) (e0bf589)
- rds: use MySQL 8.4 auth options (#3001) (e26e9a6)
- rds: wait for the final PostgreSQL server before reporting the instance ready (#3405) (14b0875), closes #3384
- redshift: emit ClusterAvailabilityStatus and AvailabilityZoneRelocationStatus (#3109) (025ac71), closes #3098
- resourceexplorer2: reject invalid pagination tokens (#3444) (f482a2d)
- route53: require exact match for ChangeResourceRecordSets DELETE (#3565) (9da5895)
- s3: authorize read on copyobject/uploadpartcopy source (#3450) (bb58176), closes #2333
- s3: decode unsigned streaming checksum payloads (#3476) (d11fff3)
- s3: enforce auth on bucket-level config writes when enforce-auth is enabled (#3536) (28105c0), closes #2326 #2335
- s3: enforce source resource policies on object copies (#3539) (19917ed)
- s3: evaluate IAM policy on presigned URL and presigned POST requests (#3504) (8a45211), closes #3195
- s3: honor max-keys=0 and reject invalid max-keys values (#3510) (b994d58)
- s3: honor per-object VersionId in batch DeleteObjects (#3232) (d9cddc5), closes #1045
- s3: honor x-amz-bypass-governance-retention in batch DeleteObjects (#3366) (7d96799)
- s3: honor x-amz-tagging query parameter on presigned PutObject and CreateMultipartUpload (#3615) (52bafb7), closes #3608
- s3: make GetObject atomic against concurrent same-key overwrites (#2874) (b4aab99)
- s3: preserve SSE-KMS key ID metadata (#2145) (d466ffe)
- s3: return composite multipart checksums and match S3 on UploadPart, GetObjectAttributes and CopyObject responses (#3093) (724be0a), closes #877
- s3: route signed multipart requests by virtual host (#3464) (01ec7af)
- s3: shrink getObject's lock to a cheap seqlock check, not the I/O (#2901) (3a212d8)
- s3: validate multipart completion parts (#3312) (31f8860)
- s3: verify SigV4 signature on presigned POST uploads (#3081) (ffab3dc)
- s3: verify the SigV4 header signature when enforce-auth is enabled (#3573) (bfe2b71), closes #1842 #3081 #2332
- s3: verify virtual-hosted presigned URLs (#3048) (3dee17e)
- scheduler: forward MessageAttributes in universal sqs target (#3435) (ffdd5b8)
- secretsmanager: serialize secret version updates with the rotation lock (#3247) (172765a)
- security: map EXTRA_CORS_* env variables to enable global CORS preflight (#1890) (18044d9)
- serialize GetRecords ApproximateArrivalTimestamp as a plain decimal (#2359) (5b4d1af), closes #2099 #2358
- ses: align v1 Query boolean parsing with probed xsd 1.1 behavior (#3075) (f677eda)
- ses: create email identities atomically so failures leave nothing behind (#3146) (618ca58)
- sfn: apply state input and output paths (#3289) (9fa36e9), closes #3258
- sfn: enforce the alias and published version quotas per state machine (#3580) (4707d4d), closes #3575 #3614
- sfn: fail States.Runtime on an unresolvable JSONPath in a payload template (#3199) (618f52e), closes #2521
- sfn: merge ResultPath at a bracket-index reference path (#3483) (99c19d0), closes #3479
- sfn: preserve Lambda function errors (#3456) (ae58097)
- sfn: preserve mocked response indexes (#3391) (78cf107)
- sfn: resolve context reference paths (#3390) (ce07393)
- sfn: return empty objects for null state paths (#3371) (3090e33)
- sfn: support advanced JSONPath expressions (#3398) (5bf8075)
- sfn: treat null as falsy in JSONPath negation (#3497) (c18c80e)
- sns: honor FifoThroughputScope=MessageGroup on FIFO topics (#3181) (a1d0597)
- sqs: bound message move task history (#3292) (520568e)
- sqs: honour ReceiveMessageWaitTimeSeconds when ReceiveMessage omits WaitTimeSeconds (#2989) (ad0f4a1)
- sqs: keep DLQ messages when a move task cannot deliver them (#3470) (a9feb3c)
- sqs: match AWS queue attribute defaults and MaximumMessageSize range (#3626) (1482d45)
- ssm: apply every DescribeParameters filter and page the results (#3646) (ea88947), closes #3642
- ssm: set the Arn attribute on AWS::SSM::Parameter (#3019) (3600038)
- stepfunctions: abort executions abandoned by a restart (#2969) (504203f)
- stepfunctions: fail an intrinsic argument that matches nothing (#2872) (fad54f3), closes #2870 #2927
- stepfunctions: let Express executions reuse names and type the nested StartExecution refusal (#3059) (8a2161a)
- stepfunctions: persist execution history across restarts (#3291) (35159c5)
- stepfunctions: reject the QueryLanguage definitions AWS rejects (#2972) (e3230a7)
- stepfunctions: resolve state machine alias ARNs (#3607) (e828363)
- stepfunctions: resolve the States.Format template argument like every other argument (#2963) (fa265a4), closes #2927
- storage: load each backend once and close WAL writers on shutdown (#3469) (1b83ef3)
- storage: log effective storage mode at boot (#3495) (15eff7e), closes #2225
- storage: migrate legacy entries by exact key (#3408) (d92211d)
- sts: reject unverified web identity tokens (#3151) (1de6b80)
- sts: return ExpiredTokenException for an expired web identity token (#3210) (90fa707), closes #3205
- sts: validate SAML assertions before assuming roles (#3204) (1b12525)
- support SSM PutParameter tags and ECS container healthCheck (#2567) (#3550) (7d6e958)
- swf: improve polling mechanism with timeout and backoff strategy (#3207) (f765195)
- test: disable the GuardDuty organization admin GuardDutyMembersIntegrationTest enables (#3348) (3669c8e)
- test: isolate MQTT WebSocket concurrency from TLS (#3431) (9f36a87)
- test: relax S3 concurrent write stress timeout (#3396) (901b83c)
- test: sign the CopyObject source-permission requests for real (#3588) (62407e2), closes #3539 #3539 #3573 #3573
- test: stop XmlParserTest matching a localized parser message (#3458) (c127794)
- test: tear down the organization DetectiveIntegrationTest creates (#3229) (1a804ae), closes #3226
- test: tear down the organizations the service-managed StackSets test creates (#3158) (6914530), closes #3055
- test: wait for DeleteStack to actually complete in CloudFront policies test (#3473) (ec2ab07)
- tls: fail startup when public listener cannot bind (#3362) (2fd55b5)
- transcribe: isolate jobs and vocabularies by account and region (#3402) (c4ff42b)
- transfer: allow DeleteServer regardless of server state (#2897) (e7256f5), closes #2802 #1834 #2802
- transfer: isolate servers and users by account and region (#3403) (43eace4)
- ui: verify Floci connectivity in readiness probe (#2753) (c0b5461)
- wafv2: reject non-CIDR IPSet addresses (#3511) (a40409f), closes #3328
- wafv2: validate resource names on operations (#3066) (0a57f0a)
Features
- accessanalyzer: add analyzer lifecycle (#3117) (aebed6e)
- account: add alternate contact operations (#3118) (d80734e)
- acm: enhance email validation to report approval mailboxes and omit DNS records (#3290) (8180d4b)
- acm: map CertificateExport and CertificateTransparencyLoggingPreference onto the certificate options (#3111) (6150569)
- acm: provision AWS::CertificateManager::Certificate (#3003) (38176b9)
- agentcore: expand Bedrock AgentCore control-plane coverage (#3317) (483dfb4)
- apigateway: provision AWS::ApiGateway::DomainName and BasePathMapping (#3040) (c3d977a)
- apigateway: support HTTP and HTTP_PROXY integrations on REST APIs (#3433) (96707f6)
- appintegrations: add data and event integrations (#3379) (137a39a)
- aps: implement AMP rule groups namespaces (#3330) (6eca854), closes #3329
- asl: add support for States.ArrayPartition, States.ArrayRange, States.ArrayUnique, and States.MathRandom intrinsics with comprehensive tests (#3224) (cf8466b)
- athena: add UpdateWorkGroup support (#3468) (ea5925f)
- athena: create, update and delete data catalogs (#3381) (cb6b4d8)
- athena: support ListTagsForResource for workgroups (#3242) (b988dc5)
- autoscaling: warm pools, scheduled actions, traffic sources, and process suspension (#2973) (0980114)
- batch: add UpdateComputeEnvironment and DeleteComputeEnvironment (#2857) (3b7ba5c), closes #2293
- batch: support array and multi-node parallel jobs (#3595) (74d4782)
- bcm-pricing-calculator: emulate workload estimates (#3441) (a985773)
- bedrock-agentcore: implement AgentCore Memory events (#3556) (3003f05)
- bedrock-runtime: implement ConverseStream for stub and proxy backends (#2889) (4465575)
- bedrock-runtime: stream ConverseStream incrementally (#3043) (0471d6f)
- bedrock: add guardrail lifecycle and versions (#3380) (cae8f9a)
- budgets: add full service emulation (#3165) (7a5ae96)
- cloudformation: pass EngineMode and StorageEncrypted to RDS clusters (#3482) (4471e92)
- cloudformation: provision AWS::ApiGateway::ApiKey (#3122) (cbde58f)
- cloudformation: provision AWS::ApiGateway::UsagePlan and UsagePlanKey (#3123) (3a4982c)
- cloudformation: provision AWS::AutoScaling::ScalingPolicy (#3124) (17af959)
- cloudformation: provision AWS::Backup::BackupVault (#3125) (631df1d)
- cloudformation: provision AWS::Lambda::Url (#3423) (10becc5)
- cloudformation: provision AWS::SNS::TopicPolicy (#3126) (ba3dd65)
- cloudformation: provision Route 53 hosted zones (#2722) (ab26a42)
- cloudformation: provision the AppSync resource types (#3424) (55ada9b)
- cloudformation: report a stubbed unsupported resource type instead of hiding it (#2971) (5dc0808), closes #2967
- cloudformation: support service-managed stacksets (#3055) (41022d0)
- cloudtrail: implement AddTags, RemoveTags and ListTags (#2934) (671628b), closes floci-io/floci#2297
- cloudtrail: support AdvancedEventSelectors and CloudFormation Trail provisioning (#2720) (fd3c4d9), closes #1192 #1194
- cloudwatch: implement the dashboard operations on both protocols (#2888) (e8eb4f2)
- cloudwatchlogs: add cross-account policy operations (#3089) (6a728f1)
- cloudwatch: provision AWS::CloudWatch::Dashboard (#3231) (460aa07)
- cloudwatch: store and serve metric stream definitions (#3214) (5b7c2c4)
- cognito: check the custom domain certificate in ACM and mark it in use (#3035) (d771783)
- cognitoidentity: identity pool management plane (CRUD, roles, principal-tag maps, tags) (#2977) (dd9cdc1)
- cognito: implement identity provider configuration CRUD (#2858) (0a3bc03)
- cognito: implement log delivery configuration (#2867) (b8f1e22), closes #2855
- cognito: implement managed login branding (#2869) (1e4e8b9), closes #2856
- cognito: implement SetUserPoolMfaConfig (#2831) (906717a)
- cognito: implement user MFA preferences (#2896) (82ee360)
- cognito: implement VerifyUserAttribute (#2018) (36c3ee4)
- cognito: provision AWS::Cognito::UserPoolDomain (#3005) (f3c251e)
- cognito: route custom domains by Host (#3095) (b4d80a5)
- cognito: support pending user attribute verification (#2531) (a03c4d6)
- controlcatalog: add control lookup operations (#3130) (d99675a)
- controltower: add enabled control operations (#3056) (b199894)
- core: derive ARN partition from the region (#3334) (dc61c1a)
- datasync: add the DataSync management plane (#3377) (128d3ef)
- detective: add organization member operations (#3190) (5864b01)
- docker: containers Floci launches trust the Floci CA (#3091) (024bfa0), closes #3079 #3086 #3086
- dynamodb: import tables from S3 and report new exports as IN_PROGRESS (#3138) (cbec02d)
- dynamodb: index-qualified PartiQL SELECT with ConsistentRead validation (#2953) (84ec8ae)
- dynamodb: resource policies and GSI-level OnDemandThroughput (#2976) (17e02ed)
- ec2: answer MonitorInstances and UnmonitorInstances (#3319) (8921ca1)
- ec2: back each VPC with a real Docker network in RFC 1918 space (#3272) (cf1aabc)
- ec2: Capacity Reservation CRUD (#2974) (0c33ef2)
- ec2: capture the instance file system in CreateImage, and implement Deregister/CopyImage (#3306) (a228507)
- ec2: carry the remaining launch template data fields (#3493) (0431677)
- ec2: honour AmazonProvidedIpv6CidrBlock on a VPC (#2891) (0cf3144)
- ec2: implement DescribeSpotPriceHistory (#3359) (ee23e26)
- ec2: implement instant CreateFleet (#2956) (1f87f7c)
- ec2: report instance credit specifications (#3492) (325bdfb)
- ec2: support snapshot block public access (#3490) (fe40e06)
- ec2: support standalone network interface create/attach/detach (#2843) (906af8c)
- ec2: support VPC peering connections (#2654) (14f99a5)
- ecr: prefer locally present images over the loopback registry rewrite (#3022) (23728e0)
- ecs: honor UpdateService forceNewDeployment and emit EventBridge lifecycle events (#2938) (14ca62d), closes #2557 #2557 #2557 #2557 #2557 #2557
- ecs: scope EFS volume mounts to rootDirectory and accessPointId (#3449) (543bde7), closes #2563
- elasticache: add validation for cache parameter group existence in replication group operations (#2957) (6c9cc95)
- eventbridge: run ECS tasks from classic rule targets (#3484) (cfe9f84), closes #2558
- firehose: apply the Lambda transform to buffered records (#3393) (d96516d)
- firehose: convert array, struct and map columns to Parquet (#3521) (6790024)
- firehose: convert JSON records to Parquet via the floci-duck sidecar (#3333) (9a2a893)
- firehose: validate and persist DataFormatConversionConfiguration (#3236) (8a122d2)
- firehose: validate and persist ProcessingConfiguration (#3375) (debf9fb)
- floci-core: resolve active Docker context when DOCKER_HOST is unset (#3197) (e31590b), closes #1990
- globalaccelerator: add the Global Accelerator management plane (#3378) (2e79f5c)
- glue: jobs and crawlers (#2591) (de6bf8f)
- glue: support GetPartitionIndexes (#3416) (606e7b9)
- guardduty: add member account operations (#3052) (b6489ac)
- iam: resolve resource and request tag condition keys for EC2 and S3 (#3212) (64538f7)
- iam: support DynamoDB fine-grained access control (#2926) (#3011) (6653b9a), closes #aliases
- identity-center: complete IAM Identity Center emulation (#3331) (cbfa034)
- identitystore: add full service emulation (#3159) (6264b09)
- inspector2: add organization configuration operations (#3162) (4944764)
- iot: configurable DescribeEndpoint address for published AWS IoT ports (#3202) (53a84c8)
- iot: domain configurations (#3008) (9220c05)
- iot: evaluate the SQL subset of topic rules (#3021) (d45c645)
- iot: firehose and cloudwatchLogs rule actions (#3013) (ebdf092)
- iot: MQTT over TLS listener on 8883 (#3142) (ee2f55b)
- iot: MQTT over WebSocket at /mqtt (#3150) (c4027bb), closes #3142
- iot: provision AWS::IoT::Thing, Policy and TopicRule (#3014) (dec348d)
- iot: real device certificates issued by the local CA (#3079) (c67e598), closes PKCS#10 PKCS#10
- iot: rule SQL message functions, isNull, isUndefined, IN and array literals (#3036) (b88034c)
- iot: verify device certificates on the MQTT TLS listener (#3180) (19a8536)
- kinesis: implement UpdateShardCount API (#3200) (e3766ea), closes #3064
- kms: support ImportKeyMaterial for Origin=EXTERNAL keys (#3068) (37faaa8), closes #1916
- lakeformation: add UpdateResource action (#2944) (ee24c77)
- lambda: mint EKS bearer tokens natively for the kubernetes executor (#2981) (252bfe8), closes #2919
- lambda: provision AWS::Lambda::EventInvokeConfig (#3230) (af42564)
- lambda: support self-managed Apache Kafka event source mappings (#3062) (#3082) (ee5c87d)
- macie2: add organization administration operations (#3105) (3927c66)
- marketplace-agreement: emulate AWS Marketplace Agreement API (#3339) (c99ecea)
- marketplace-catalog: emulate AWS Marketplace Catalog API (#3338) (50fa334)
- marketplace-deployment: emulate AWS Marketplace Deployment API (#3341) (48d2928)
- marketplace-discovery: emulate AWS Marketplace Discovery API (#3342) (07d6cab)
- marketplace-entitlement: emulate AWS Marketplace Entitlement API (#3340) (87f2c2d)
- marketplace-metering: emulate AWS Marketplace Metering API (#3344) (efcbc4d)
- marketplace-reporting: emulate AWS Marketplace Reporting API (#3343) (3c080e1)
- neptune: support the Terraform aws_neptune_cluster read-back contract (#3017) (a7be2dd)
- oam: emulate observability access manager (#3440) (a0fd815)
- pipes: validate ParallelizationFactor on Kinesis and DynamoDB sources (#3192) (5fd89e2)
- ram: support resource-share invitation accept/reject (#3120) (81b8127)
- rds: accept AWS IAM DB auth users on MySQL (#3395) (485b7c5)
- rds: implement CreateDBSnapshot and RestoreDBInstanceFromDBSnap… (#1894) (2869502), closes #1817
- rds: persist EngineMode and StorageEncrypted on DB clusters (#3448) (828b53c), closes #2559
- redshift-data: emulate the Amazon Redshift Data API (#3186) (b9039fe)
- redshift: emulate GetClusterCredentials and GetClusterCredentialsWithIAM (#3273) (6b17ef2)
- redshift: emulate Redshift COPY FROM s3 over Simple Query protocol (#3100) (85180a4)
- redshift: emulate Redshift UNLOAD TO s3 over Simple Query protocol (#3129) (4570bf6)
- redshift: intercept Extended Query protocol (#3474) (e9454af)
- redshift: provision AWS::Redshift::Cluster through CloudFormation (#3427) (e5bd8be)
- redshift: rewrite Redshift table DDL keywords for a PostgreSQL backend (#2947) (17ea9a9)
- redshift: wire the Simple Query DDL interceptor into the proxy (#3029) (4daba7e)
- route53: support cross-account VPC associations (#3116) (162211d)
- route53: update supported operations and add VPC association actions (#2959) (df0e7bc)
- s3: add Intelligent-Tiering configuration CRUD (#2997) (96d16de)
- s3: add object annotations support (#3324) (f9f90cf)
- s3: support bucket analytics and inventory configurations (#3213) (703744c)
- securityhub: add organization configuration operations (#3161) (9d4e71f)
- serve custom domains over TLS as soon as they are created (#3086) (67bbd2c), closes PKCS#8 PKCS#8 PKCS#1 #3035 #3035 #3095 #3095
- servicequotas: add quota request history lookup (#3054) (532e279)
- ses: implement v1 receipt filters (CreateReceiptFilter, ListReceiptFilters, DeleteReceiptFilter) (#3163) (2c6a92c)
- ses: implement v1 receipt rules with locally validated action targets (#3119) (fd665a0)
- ses: implement v1 ReorderReceiptRuleSet and CloneReceiptRuleSet (#3176) (f485122)
- ses: preserve raw message fidelity and envelope sender in the SMTP relay (#3522) (505b5d2)
- ses: support tag operations on tenant ARNs (#2832) (812911f)
- ses: support v2 dedicated IP (IP-level) and scaling/warmup APIs (#3420) (e219ea4)
- sfn: publish history events for Parallel branches and Map iterations (#3167) (fd21ac9)
- ssm: answer the public Amazon Linux AMI parameters (#3173) (8142457)
- ssm: model documents and associations with full lifecycle operations (#3057) (f00fb4c)
- ssoadmin: add permission sets and assignments (#3103) (1bf7494)
- stepfunctions: add SNS Publish service integration (#3316) (283890d)
- stepfunctions: close ASL gaps in intrinsics, Choice, StartExecution and ResultPath (#3002) (352d89f)
- stepfunctions: resolve Fail state ErrorPath and CausePath dynamically (#3302) (650914f), closes #3255
- tls: a local root CA that signs Floci's server certificate (#3078) (3c6c005)
- translate: add Amazon Translate mock service (#2879) (10192f0)
- ui: publish a console contract so any web console can be the sidecar (#3641) (a5ebda0)
- verifiedpermissions: add full service emulation (#3128) (2d51259)
Performance Improvements
- apigateway: avoid repeated root resource scans (#3404) (0a45d2e)
- build: drop KotlinPoet and ICU4J from the protobuf schema path (#2992) (21f165b)
- build: keep only the snappy JNI libraries the image will use (#2940) (4ce53b5)
- build: keep the managed policy catalog files out of the native image (#3489) (24e13f3)
- build: replace BouncyCastle with JDK crypto API as much as possible (#2988) (ffe8a92)
- build: replace quarkus-jdbc extensions with plain JDBC drivers (#3465) (569f9f5)
- docker: drop the gosu layer and two no-op native-image inputs (#3037) (b0a8dff)
- docker: shrink image by 28% using ubi9-micro (109 MB to 78 MB compressed) (#3085) (64f06e0), closes #3037
- docker: trim the compat image's CLI extras and Python build leftovers (#3108) (a6bd055)
- s3: drop unused hashes on S3Object creation (#3589) (a5ab167)