ALB now verifies JWT (JSON Web Tokens) natively. Tokens from generic OIDC providers or your own IdP can be validated at the load balancer layer — without a Lambda authorizer.
ListenerAction.authenticateJwt()issuer, jwksEndpoint, nextiss, exp (also nbf, iat if present)additionalClaims is not supported in this initial implementation (will be added as needed).
Follow-up PR #37494 adds authenticateJwtWithCognito() and an allowHttpsOutbound option.
// HTTPS listener with JWT verification → forward on success const listener = lb.addListener('Listener', { protocol: elbv2.ApplicationProtocol.HTTPS, port: 443, certificates: [certificate], defaultAction: elbv2.ListenerAction.authenticateJwt({ issuer: 'https://issuer.example.com', jwksEndpoint: 'https://issuer.example.com/.well-known/jwks.json', next: elbv2.ListenerAction.forward([myTargetGroup]), }), });
S3 general purpose buckets now support ABAC (Attribute-Based Access Control). Flip the bucket-level switch and manage access by tags.
BucketProps.abacStatus — a booleantrue → "Enabled" / false → "Disabled"aws:ResourceTag / aws:PrincipalTag — outside CDK's scope.
// Enable ABAC on the bucket const bucket = new s3.Bucket(this, 'Bucket', { abacStatus: true, encryption: s3.BucketEncryption.KMS, }); // Canonical ABAC deny: block access unless the caller's // project tag matches the bucket's project tag. bucket.addToResourcePolicy(new iam.PolicyStatement({ effect: iam.Effect.DENY, principals: [new iam.AnyPrincipal()], actions: ['s3:ListBucket', 's3:GetObject', 's3:PutObject'], resources: [bucket.bucketArn, bucket.arnForObjects('*')], conditions: { StringNotEquals: { 'aws:ResourceTag/project': '${aws:PrincipalTag/project}', }, }, }));
NLBs now get a security group automatically when none is specified
— which also means connections finally works out of the box.
nlb.connections.allowFrom(...) was a silent no-op — the loop iterated over an empty SG list, so no rule was added and no error raised
@aws-cdk/aws-elasticloadbalancingv2:
networkLoadBalancerWithSecurityGroupByDefault
cdk init).
Existing stacks are unaffected unless the flag is opted in — doing so will add
a SecurityGroups property to the template diff.
// cdk.json — opt into the new default { "context": { "@aws-cdk/aws-elasticloadbalancingv2:networkLoadBalancerWithSecurityGroupByDefault": true } } // Application code stays the same — SG is auto-created const nlb = new elbv2.NetworkLoadBalancer(this, 'NLB', { vpc, // no securityGroups: a default SG is generated }); // connections now actually adds an SG rule // (was a silent no-op without the flag) nlb.connections.allowFrom(other, ec2.Port.tcp(443));
A site that analyzes every aws-cdk PR daily and generates an AI-written summary — so you never miss what shipped.