What's Changed
New Contributors
- @bpmiranda3099 made their first contribution in #2594
[1.5.38] — 2026-11-05
Added
- RDS — IAM database authentication for PostgreSQL and Aurora PostgreSQL — a role granted
rds_iamcould not log in with a token fromgenerate_db_auth_token. With IAM database authentication enabled it now logs in with one, checked as for MySQL (withAUTH=truealso the token andrds-db:connect); other users keep password authentication. Reported by @kharabasz. - Cognito — refresh token rotation — a client with
RefreshTokenRotationENABLEDnow gets a new refresh token fromGetTokensFromRefreshTokenand/oauth2/token. Reusing a replaced token outsideRetryGracePeriodSecondsanswersRefreshTokenReuseException, andREFRESH_TOKEN_AUTHanswersUnsupportedOperationExceptionfor such a client. Contributed by @toby6578. - Cognito — the
CustomEmailSendertrigger —LambdaConfig.CustomEmailSenderwas stored and never invoked. It now receives invitation, sign-up, resend, forgot-password and email OTP messages with AWS's event, the code encrypted as an AWS Encryption SDK message under the pool'sKMSKeyID, so it decrypts through MiniStack's KMS. Contributed by @toby6578. - Cognito — managed login branding —
CreateManagedLoginBranding,DescribeManagedLoginBranding,DescribeManagedLoginBrandingByClient,UpdateManagedLoginBrandingandDeleteManagedLoginBrandingansweredInvalidAction. A branding is now kept per app client with AWS's checks in AWS's order, andAWS::Cognito::ManagedLoginBrandingdeploys in CloudFormation. Contributed by @toby6578. - ALB — the
authenticate-oidcsigning key is served — the PEM key that signsx-amzn-oidc-datais now served bykidonpublic-keys.auth.elb.<region>.amazonaws.com/<kid>and/_ministack/elb/public-keys/<kid>; an unknownkidanswers 403AccessDenied. Reported by @boesing.
Changed
- botocore 1.43.124 — the pinned botocore, whose models MiniStack reads for request and response shapes, moves from 1.43.106 to 1.43.124.
Fixed
- S3 and S3 Tables — Object Lock, multipart and metadata tokens — with
PERSIST_STATE=1andS3_PERSIST=1, retention and legal holds now survive a restart.CompleteMultipartUploadanswersInvalidPartOrder,MalformedXMLandInvalidPartfor out-of-order, empty or ETag-less part lists. S3 Tables keeps oneversionTokenper table and answersConflictExceptionfor a stale one. - Cognito — refreshes, codes and invitations —
GetTokensFromRefreshTokennow requires a confidential client's secret and refuses an expired token ("Refresh Token has expired").AdminCreateUserRESENDissues a new temporary password, sign-up and reset codes go where AWS sends them, and destinations mask ask***@e***. Contributed by @toby6578. - ALB —
authenticate-oidcrefreshes the access token — the session kept an expired access token for its whole timeout. It now refreshes the token and user claims from the IdP, signs the user in again when it cannot, and passesAuthenticationRequestExtraParams. Reported by @boesing. - ALB — the data plane finds load balancers in every account and region — a request by
DNSName,<name>.alb.localhostor/_alb/<name>/found only the default account's load balancers and fell through to S3. Every account and region is now searched, preferring the request's own. Contributed by @kharabasz. - ALB —
/_alb/<name>/selects the load balancer whatever theHost— aHostnaming another load balancer won and kept the/_alb/<name>/prefix on the path. The path now selects the load balancer andHostonly feeds its listener rules. Reported by @skialpine. - EventBridge —
PutEventsthrough a global endpoint —EndpointIdwas ignored. Endpoints now get anEndpointIdandEndpointUrl,PutEventsdelivers in the primary region with the endpoint ARN inresourcesand replicates to the secondary bus, andCreateEndpointandUpdateEndpointmake AWS's checks. Reported by @kharabasz. - Core — SigV4a requests run as the signing account with
AUTHunset — a SigV4a (AWS4-ECDSA-P256-SHA256) request, such asPutEventswithEndpointId, ran as000000000000. Its access key now names the account as a SigV4 one does. Contributed by @kharabasz. - ACM — certificate
Options—RequestCertificatedroppedOptions; they are now stored with AWS's defaults (ENABLEDlogging,DISABLEDexport).UpdateCertificateOptionskeeps members not sent, and both operations answer AWS'sSerializationException,ValidationExceptionandInvalidStateException. Contributed by @kharabasz. - EFS — file system policies and creation tokens —
PutFileSystemPolicyadded anIdand a randomSid; policies now come back in AWS's canonical form and malformed ones answerInvalidPolicyException. A reusedCreationTokenanswers 409FileSystemAlreadyExists. Contributed by @kharabasz. - Auto Scaling —
SpotInstancePools, filters and deletes —SpotInstancePoolsnow defaults to 2 only forlowest-priceand is refused with any other strategy; updates keep unsentMixedInstancesPolicymembers. Describe calls apply theirFiltersand name lists, and deleting a group with instances needsForceDelete. Contributed by @kharabasz. - API Gateway — imported OpenAPI documents keep
ANYmethods and parameters —ImportRestApi,PutRestApiand anAWS::ApiGateway::RestApiBodyskippedx-amazon-apigateway-any-methodand an operation'sparameters. They now become anANYmethod andmethod.request.*parameters. Contributed by @mishukdutta-cz. - Lambda — MiniStack's failures and handler errors as AWS reports them — MiniStack's own failures answered 200 with a "Mock response"; they now answer 500
ServiceException. Local handler and init errors carry the runtime's error document (Runtime.ImportModuleError,Runtime.HandlerNotFound, ...), with the exception's own type. - Lambda — exiting runtimes and Docker networks — a runtime that exits answers
Runtime.ExitError"Runtime exited with error: exit status N". A containerised MiniStack withoutDOCKER_NETWORKstarts Lambda containers on its own network instead of the unreachable default bridge. Reported by @kharabasz. - Lambda — the local Node shim has
ListTagsCommandandLambda.send()— Amplify Gen 2 deploys failed withListTagsCommand is not a constructorunderLAMBDA_EXECUTOR=local. Both now exist, matching@aws-sdk/client-lambda. Contributed by @bpmiranda3099. - ECS and RDS — images from MiniStack's ECR and Aurora volumes — on the containerd image store, ECS tasks pinned to a digest failed "pull access denied for sha256"; they now run, and Lambda, AgentCore and CodeBuild images load from MiniStack's ECR too. With
RDS_PERSIST=0, Aurora storage volumes are labelled and removed. Reported by @kharabasz. - Docker-backed services — taken host ports are skipped — a containerised MiniStack saw ports other containers publish as free, so RDS, ElastiCache, OpenSearch, EKS, MWAA and DocumentDB containers failed "port is already allocated". Those ports are now skipped and a lost race retries the next port. Reported by @kharabasz.
- DSQL, DocumentDB and MWAA — tenants and volumes — DSQL clusters are kept per account and region, DocumentDB container names carry account and region so one tenant can't replace another's, and
MWAA_PERSIST/DSQL_PERSISTvolumes are labelled and removed with their resource. - AppSync, API Gateway domains and CloudFormation signals — reached from any account — API-key GraphQL requests, AppSync Events, custom domains and wait-condition signals found only the default account's resources. They now run in the owner's account and region.
- Error codes and statuses are AWS's — SNS, ElastiCache, DocumentDB and CloudWatch used shape names as wire codes (SNS now
InvalidParameter,ResourceNotFound). CloudTrail, Transfer, Backup and Bedrock errors are 400, OpenSearchResourceNotFoundExceptionis 409, and IoT and Firehose internal errors are 500. - Requests keep what they send — about 40 services, among them ALB, Auto Scaling, EC2, ECS, RDS, ElastiCache, DynamoDB and Glue, dropped create and update parameters. They are now stored, returned and updatable, network and gateway load balancers get
net/andgwy/ARNs, and updates keep or replace what AWS does (SSMPutParameterpolicies, RDS pending changes; Kinesis resharding closes parent shards). - Responses carry AWS's members and pages — responses are trimmed to botocore's output shapes, without internal members or
nulls. List and Describe calls honour page sizes and return the token, omitted on the last page. SES v2GetEmailIdentity, SSMPolicies, Cloud MapDiscoverInstancesand BedrockGetGuardrailmatch AWS. - IAM, CloudControl and WAFv2 — attaching a policy that does not exist answers
NoSuchEntity, CloudControl uses the type's primary identifier, andListResourcesForWebACLfilters byResourceType, defaulting toAPPLICATION_LOAD_BALANCER. - Query and XML responses escape
&and<— Auto Scaling, ALB and EC2 values such as a tagR&Dmade every later Describe for the account unparseable. They are now escaped.
Security
- Aurora DSQL — the backend Postgres is no longer on every interface — with
DSQL_STRICT=1each cluster's trust-auth Postgres was published on0.0.0.0. It is now unpublished on MiniStack's network, or127.0.0.1only for a host-run MiniStack. Contributed by @toby6578. - EventBridge —
DescribeConnectionno longer returns secrets — it returned the storedApiKeyValue, OAuthClientSecretand basic-authPassword, which AWS never returns. - Containers follow MiniStack's binding — RDS, ElastiCache, OpenSearch, MWAA, EKS, DocumentDB and ECS task ports were published on every interface even with MiniStack bound to
127.0.0.1; they now follow it.