概要
AWS CDK v2.247.0 では、Application Load Balancer の JWT 検証アクション、API Gateway V2 Lambda オーソライザーへの IAM ロール指定、AWS Batch の ジョブ定義登録解除のスキップ など、日常的な構成の柔軟性を高める機能が追加されました。Alpha モジュールでは AWS Elemental MediaPackage V2 の L2 コンストラクト が新たに登場しています。加えて L1 リソース定義の更新に伴う破壊的変更と、プロトタイプ汚染に関するセキュリティ修正が含まれます。
新機能
ALB: Application Load Balancer の JWT 検証アクション (#36099)
ALB のリスナーアクションとして、JWT(JSON Web Token)の検証を行う ListenerAction.authenticateJwt() が追加されました。IdP が発行した JWT を ALB 側で検証し、バックエンドターゲットへのリクエスト転送可否を制御できます。
AuthenticateJwtOptions の主要プロパティ:
| プロパティ | 型 | 説明 |
|---|---|---|
next | ListenerAction | 検証成功後に実行する次のアクション(forward 等) |
issuer | string | JWT の発行者 URL(HTTPS 必須、最大 256 文字) |
jwksEndpoint | string | JWT 検証用の公開鍵を返す JWKS エンドポイント URL(HTTPS 必須、最大 256 文字) |
使用例:
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
declare const listener: elbv2.ApplicationListener;
declare const targetGroup: elbv2.ApplicationTargetGroup;
listener.addAction('JwtAuthAction', {
action: elbv2.ListenerAction.authenticateJwt({
// JWT の発行者(HTTPS 必須)
issuer: 'https://issuer.example.com',
// JWKS(公開鍵セット)エンドポイント(HTTPS 必須)
jwksEndpoint: 'https://issuer.example.com/jwks',
// 検証成功時に続けて実行するアクション
next: elbv2.ListenerAction.forward([targetGroup]),
}),
});
なお、本 PR では最小構成から先に提供するため、additionalClaims 引数は未対応(今後の拡張予定)となっています。
API Gateway V2: Lambda オーソライザーの IAM ロール指定 (#35706)
HTTP API 用の Lambda オーソライザー(HttpLambdaAuthorizer)で、API Gateway が Lambda を呼び出す際に使用する IAM ロール を指定できるようになりました(REQUEST オーソライザーのみ対応)。
HttpLambdaAuthorizerProps に追加されたプロパティ:
| プロパティ | 型 | 説明 | デフォルト |
|---|---|---|---|
role | iam.IRoleRef | API Gateway サービスがオーソライザー関数を呼び出す際に引き受ける IAM ロール。REQUEST オーソライザーでのみサポート | ロール指定なし(リソースベースのパーミッションを自動付与) |
従来は lambda:InvokeFunction のリソースベースのパーミッションを関数側に自動付与していましたが、role を指定するとそのパーミッション付与はスキップされ、指定されたロールが呼び出しに使われます。
使用例:
import * as iam from 'aws-cdk-lib/aws-iam';
import * as lambda from 'aws-cdk-lib/aws-lambda';
import { HttpLambdaAuthorizer } from 'aws-cdk-lib/aws-apigatewayv2-authorizers';
declare const authHandler: lambda.IFunction;
// API Gateway が引き受けるロール
const invokeRole = new iam.Role(this, 'AuthorizerInvokeRole', {
assumedBy: new iam.ServicePrincipal('apigateway.amazonaws.com'),
});
authHandler.grantInvoke(invokeRole);
const authorizer = new HttpLambdaAuthorizer('Authorizer', authHandler, {
// 新機能: API Gateway がオーソライザー関数を呼ぶ際のロール
// 指定した場合、Lambda 側へのリソースベースのパーミッション付与は行われない
role: invokeRole,
});
Batch: ジョブ定義更新時の登録解除スキップ (#36011)
AWS Batch の JobDefinition に、CloudFormation の ResourceRetentionPolicy.SkipDeregisterOnUpdate をマッピングする skipDeregisterOnUpdate プロパティが追加されました。更新時に旧リビジョンを登録解除せず残したい場合に有用です。
追加されたプロパティ:
| プロパティ | 型 | 説明 | デフォルト |
|---|---|---|---|
skipDeregisterOnUpdate | boolean | true の場合、ジョブ定義更新時に旧リビジョンを登録解除(deregister)しない | undefined(AWS Batch のデフォルト動作 = false) |
使用例(EcsJobDefinition 等、全ての JobDefinition 派生で利用可能):
import * as batch from 'aws-cdk-lib/aws-batch';
declare const container: batch.EcsContainerDefinition;
new batch.EcsJobDefinition(this, 'EcsJobDefinition', {
container,
// 新機能: 更新時に旧リビジョンの登録解除をスキップ
// true にすると以前のリビジョンは Active のまま残り、実行中のジョブを保護しやすい
skipDeregisterOnUpdate: true,
});
L1 CloudFormation リソース定義の更新 (#37410)
最新の CloudFormation Resource Schema に合わせて L1 コンストラクトが自動更新されています。本リリースには後述の 破壊的変更 に該当する変更が含まれます。
Alpha モジュール (2.247.0-alpha.0)
MediaPackage V2: 新しい L2 コンストラクト (#37279)
AWS Elemental MediaPackage V2 の L2 コンストラクトが新たに @aws-cdk/aws-mediapackagev2-alpha として追加されました。ChannelGroup / Channel / OriginEndpoint / ChannelPolicy / OriginEndpointPolicy を宣言的に構築できます。
主なコンストラクト:
| コンストラクト | 役割 |
|---|---|
ChannelGroup | チャネルとオリジンエンドポイントを束ねるトップレベルリソース |
Channel | コンテンツストリームの入口(HLS / CMAF をサポート) |
OriginEndpoint | 配信用のマニフェスト(HLS / DASH / LL-HLS など)を公開する |
ChannelPolicy | Channel に対するリソースポリシー |
OriginEndpointPolicy | OriginEndpoint に対するリソースポリシー |
基本的な使用例:
import {
ChannelGroup,
Channel,
OriginEndpoint,
InputConfiguration,
Segment,
Manifest,
HeadersCMSD,
} from '@aws-cdk/aws-mediapackagev2-alpha';
// チャネルグループ: チャネルとエンドポイントのトップレベルコンテナ
const group = new ChannelGroup(this, 'MyChannelGroup', {
channelGroupName: 'my-test-channel-group', // チャネルグループ名
});
// チャネル: 配信への入口
const channel = new Channel(this, 'MyChannel', {
channelGroup: group,
channelName: 'my-test-channel',
// 入力設定(CMAF または HLS)
input: InputConfiguration.cmaf({
// MQCS(Media Quality Confidence Score)ベースの入力切替(CMAF のみ)
inputSwitchConfiguration: {
mqcsInputSwitching: true,
},
// 出力に付与する CMSD ヘッダー
outputHeaders: [HeadersCMSD.MQCS],
}),
});
// オリジンエンドポイント: 再生クライアントへの配信ポイント
new OriginEndpoint(this, 'MyOriginEndpoint', {
channel,
originEndpointName: 'my-test-endpoint',
// セグメント設定(CMAF / TS など)
segment: Segment.cmaf(),
// マニフェスト(HLS / LL-HLS / DASH などを複数指定可能)
manifests: [
Manifest.hls({
manifestName: 'index',
}),
],
});
ファクトリメソッドによる簡潔な記述:
ChannelGroup#addChannel() と Channel#addOriginEndpoint() によって、親子関係を明示的に指定せずに宣言できます。
const group = new ChannelGroup(this, 'MyChannelGroup', {
channelGroupName: 'my-channel-group',
});
// 親 ChannelGroup からチャネルを追加
const channel = group.addChannel('MyChannel', {
channelName: 'my-channel',
input: InputConfiguration.cmaf(),
});
// 親 Channel からオリジンエンドポイントを追加
channel.addOriginEndpoint('MyEndpoint', {
originEndpointName: 'my-endpoint',
segment: Segment.cmaf(),
manifests: [Manifest.hls({ manifestName: 'index' })],
});
既存リソースのインポート:
属性または ARN からのインポートが可能です。クロスリージョンの場合は region を指定できます。
// 名前からインポート(同一リージョン想定)
const importedGroup = ChannelGroup.fromChannelGroupAttributes(this, 'ImportedGroup', {
channelGroupName: 'MyChannelGroup',
});
// ARN からインポート(名前・リージョンは ARN から抽出)
const importedGroupFromArn = ChannelGroup.fromChannelGroupArn(
this,
'ImportedGroupFromArn',
'arn:aws:mediapackagev2:us-west-2:123456789012:channelGroup/MyChannelGroup',
);
// クロスリージョン参照
const crossRegionGroup = ChannelGroup.fromChannelGroupAttributes(this, 'CrossRegionGroup', {
channelGroupName: 'MyChannelGroup',
region: 'us-west-2',
});
リソースポリシーの付与:
Channel#addToResourcePolicy() / OriginEndpoint#addToResourcePolicy() で簡潔に記述できます。初回呼び出し時にポリシーが自動作成されます。
import { PolicyStatement, Effect, ArnPrincipal } from 'aws-cdk-lib/aws-iam';
declare const channel: Channel;
channel.addToResourcePolicy(new PolicyStatement({
sid: 'AllowMediaLiveRoleToAccessEmpChannel',
principals: [new ArnPrincipal('arn:aws:iam::123456789012:role/MediaLiveAccessRole')],
effect: Effect.ALLOW,
actions: ['mediapackagev2:PutObject'],
resources: [channel.channelArn],
}));
バグ修正
aws-cdk-lib: 圧縮されたスタックトレースで名前空間付きパッケージ名が隠れる問題を修正 (#37413)
スタックトレースを読みやすくするために実施している短縮処理に、2 つの不具合がありました。
- 名前空間付きパッケージ名(例:
@aws-cdk/aws-lambda-python-alpha)の先頭要素しか認識されない - ユーザーコードを含まないほど短い場合に、表示が意味不明になる
修正前の表示:
...aws-cdk-lib, @aws-cdk...
修正後の表示:
...aws-cdk-lib, @aws-cdk/aws-lambda-python-alpha...
(no user code in 10 frames, use --stack-trace-limit to capture more)
利用側でのコード変更は不要で、Alpha モジュールを使っているアプリケーションのデバッグ体験が改善されます。深いスタックを追いたい場合は、従来どおり NODE_OPTIONS="--stack-trace-limit=100" のようにフレーム数を増やしてください。
セキュリティ: 2 つの API でのプロトタイプ汚染防止 (#37453)
以下 2 つの API においてプロトタイプ汚染(prototype pollution)の可能性があったため、それを防ぐ対策とテストが追加されました。
Fact.register()cfnResource.addOverride()
CDK の値は信頼できないソースから流入しないため現実的な攻撃ではありませんが、脆弱性レポート対応コストを減らす予防的な修正です。利用側のコード変更は不要です。
セキュリティ: brace-expansion を 5.0.3 → 5.0.5 に更新 (CVE-2026-33750) (#37379)
依存ライブラリ brace-expansion の脆弱性 CVE-2026-33750 に対応するため、バージョンを 5.0.5 に更新しました。利用側の変更は不要です。
破壊的変更
L1 リソース定義は公開されている CloudFormation Resource Schema から自動生成されており、時折実態に合わせた互換性のない変更が含まれます。本リリースには以下が含まれます。
| サービス | リソース | 変更内容 |
|---|---|---|
aws-bedrockagentcore | AWS::BedrockAgentCore::OnlineEvaluationConfig | ExecutionStatus 属性が削除 |
aws-appstream | AWS::AppStream::ImageBuilder | Name プロパティが immutable(不変)に変更 |
aws-eks | AWS::EKS::Capability | vended log type EKS_CAPABILITY_ACK_S3_LOGS が削除 |
移行時の注意:
CfnOnlineEvaluationConfig.attrExecutionStatusを参照しているコードがあれば削除してください。CfnImageBuilderのnameを Stack 更新で変更すると、置き換え(replace)が発生します。命名は初回デプロイ時に確定させるか、論理 ID を分ける運用に変更してください。EKS_CAPABILITY_ACK_S3_LOGSを vended log の出力タイプとして指定していた場合は、別のサポートされているログタイプ(例:EKS_CAPABILITY_ARGOCD_APPLICATION_LOGS,EKS_CAPABILITY_KRO_LOGS)への切り替えを検討してください。
まとめ
AWS CDK v2.247.0 は、ALB の JWT 検証・API Gateway V2 Lambda オーソライザーのロール指定・Batch のジョブ定義登録解除スキップ といった運用面の改善と、MediaPackage V2 L2 コンストラクトの新規追加(Alpha)が目玉のリリースです。
主なポイント:
- ALB JWT 検証:
ListenerAction.authenticateJwt()で IdP 連携を ALB で完結 - API GW V2 Lambda オーソライザー: 呼び出し用 IAM ロールを指定可能に(REQUEST のみ)
- Batch:
skipDeregisterOnUpdateで更新時の旧リビジョンを残せるように - Alpha: MediaPackage V2 L2: 配信基盤を CDK で宣言的に構築可能に
- L1 破壊的変更あり: bedrockagentcore / appstream / eks に該当利用がないか確認を
アップグレード時の注意:
AWS::EKS::Capabilityの vended log でEKS_CAPABILITY_ACK_S3_LOGSを使用していないか確認CfnOnlineEvaluationConfig.attrExecutionStatusの参照削除CfnImageBuilder.nameが immutable になった点に注意(更新で置き換えが発生)