#01Self Introduction
// who am I
profile

Kazuho Cryer-Shinozuka AWS CDK Top Contributor  ·  AWS Community Builder

@badmintoncryer   X  /  GitHub  /  Speaker Deck
APJ Community Leaders Award 2025

CDK Activity

Pull Requests 222
Merged 188(85%)
Reviews on others' PRs 140
AWS CDK Top Contributor (50+ PRs)

Community

  • AWS Community Builder · DevTools2024–
  • APJ Community Leaders Awards2025
  • aws-cdk Community Reviewer
  • Speaker · Blogger · OSS Contributor
#02JWT Verification on ALB
feat(elasticloadbalancingv2) NEW · #36099

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.

Background

  • Previously required Cognito integration or a Lambda authorizer
  • AWS shipped JWT support for service-to-service / machine-to-machine use cases

New API

  • ListenerAction.authenticateJwt()
  • Required: issuer, jwksEndpoint, next
  • Mandatory claims: iss, exp (also nbf, iat if present)
Note: HTTPS listener required — attaching to HTTP throws at synth time. 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]),
  }),
});
#03Attribute-Based Access Control on S3
feat(s3) NEW · #36229

S3 general purpose buckets now support ABAC (Attribute-Based Access Control). Flip the bucket-level switch and manage access by tags.

Background

  • S3 launched per-bucket ABAC mode — must be enabled at bucket level
  • Previously inaccessible from CDK L2; only L1 escape hatch worked

New API

  • BucketProps.abacStatus — a boolean
  • true → "Enabled"  /  false → "Disabled"
Note: This only flips the bucket-side switch. Actual authorization still requires IAM conditions like 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}',
    },
  },
}));
#04NLB Security Group by Default
feat(elasticloadbalancingv2) BEHAVIOR · #34675

NLBs now get a security group automatically when none is specified — which also means connections finally works out of the box.

Background

  • NLB security group support was added later; CDK kept "no SG" as default for backward compatibility
  • An NLB created without an SG cannot have one attached later (CFN limitation)
  • 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

Feature Flag

@aws-cdk/aws-elasticloadbalancingv2:
networkLoadBalancerWithSecurityGroupByDefault

Rollout: Enabled by default for new projects (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));
#05One More Thing — CDK Daily Summary
side project LIVE

A site that analyzes every aws-cdk PR daily and generates an AI-written summary — so you never miss what shipped.

CDK Daily Summary architecture
EventBridge → Bedrock Agent (Mastra) → S3 → CloudFront → Next.js

What it does

  • Runs at 09:00 JST every day; analyzes the last 24 hours of PRs
  • Amazon Bedrock Agent categorizes & summarizes each PR
  • Date picker to browse historical reports
  • Tool-call cap to prevent agent loops

Stack

AWS CDK Bedrock Mastra EventBridge Scheduler S3 CloudFront Next.js 15