cdk-real-drift(CLI: cdkrd)の検出範囲、ベースライン管理、復旧動作、CI 統合を、使い捨て可能な AWS リソースで再現・評価するための検証リポジトリです。
本リポジトリでは、CloudFormation がテンプレートで明示されたプロパティだけを比較するのに対し、cdkrd がテンプレート未定義のプロパティや、CloudFormation スタック外で追加された子リソースをどのように扱うかを重点的に確認します。
| 項目 | 値 |
|---|---|
| 検証基準日 | 2026-07-22 |
| cdk-real-drift | 0.23.2 |
| aws-cdk-lib | 2.261.0 |
| Node.js | 22(patch versionはflake.lockで固定) |
| AWS CDK CLI | 2.1131.0 |
| 既定リージョン | ap-northeast-1 |
バージョン差による挙動変化を避けるため、依存関係は pnpm-lock.yaml で固定します。Node.js と開発ツールは project-local flake.nix / flake.lock で固定し、別バージョンの評価は独立したコミットに分けます。
検証シナリオの前提、AWS実行境界、判定方法、受け入れ条件は docs/implementation-plan.md を正とします。特に S20 はbaseline作成後、S30はbaselineがない状態から開始します。
2026-07-22 時点の実測結果は docs/results/2026-07-22.md です。記事下書きは blog#13 です。
この検証では、次の問いに回答します。
- CDK コードで宣言したプロパティの手動変更を検出できるか。
- CDK コードで宣言していないプロパティの手動変更を検出できるか。
- CloudFormation スタック外で追加された子リソースを検出できるか。
- 初回検出の Potential Drift と、ベースライン記録後の確定ドリフトを区別できるか。
record、ignore、revertが意図どおりに機能するか。- ローカル CDK コードと実リソースを比較する
--pre-deployが機能するか。 --failと--jsonを CI で安全に利用できるか。- 標準の
cdk driftとcdkrdの検出結果がどこで異なるか。
次の項目は本リポジトリの初期スコープ外です。
- cdk-real-drift が対応する全 AWS リソースタイプの網羅試験
- 本番アカウントでの自動復旧
- 複数アカウント・複数リージョンのベースライン共有
- 高頻度な定期実行や大規模スタックでの性能評価
- cdk-real-drift 本体の内部実装テスト
- CloudFormation StackSets、Nested Stack、独自リソースタイプの評価
検証スタックには、直接料金が発生しにくく、手動変更と削除が容易な次のリソースだけを作成します。
| リソース | CDK での状態 | 主な検証用途 |
|---|---|---|
| Amazon SNS Topic | DisplayName を明示 |
宣言済みプロパティのドリフト |
| IAM Role | インラインポリシーを未定義 | 未宣言プロパティのドリフト |
| EventBridge Custom Event Bus | Rule を未定義 | スタック外で追加された子リソース |
| CloudFormation Outputs | ARN・名前を出力 | 検証スクリプトからの参照 |
CDK スタックは以下のコンテキストを受け取ります。
| コンテキスト | 必須 | 既定値 | 用途 |
|---|---|---|---|
suffix |
はい | なし | リソース名の衝突回避 |
topicDisplayName |
いいえ | cdkrd-verification |
--pre-deploy 検証 |
物理名は原則として cdkrd-<resource>-<suffix> とします。suffix は英小文字、数字、ハイフンのみで、20 文字以内を推奨します。
.
├── bin/
│ └── app.ts
├── lib/
│ └── cdk-real-drift-verification-stack.ts
├── fixtures/
│ └── iam/
│ └── manual-inline-policy.json
├── scripts/
│ ├── common.sh
│ ├── deploy.sh
│ ├── export-outputs.sh
│ ├── baseline.sh
│ ├── verify-clean.sh
│ ├── scenario-declared-drift.sh
│ ├── scenario-undeclared-drift.sh
│ ├── scenario-added-resource.sh
│ ├── scenario-ignore.sh
│ ├── scenario-pre-deploy.sh
│ ├── reset.sh
│ └── destroy.sh
├── tests/
│ └── assert-cdkrd-report.mjs
├── .github/
│ └── workflows/
│ ├── test.yml
│ └── drift-check.yml
├── .cdkrd/
│ ├── baseline-*.json
│ └── ignore.yaml
├── cdk.json
├── flake.nix
├── flake.lock
├── package.json
├── pnpm-lock.yaml
├── tsconfig.json
└── README.md
lib/は AWS リソース定義だけを保持します。- 手動ドリフトの注入は
scripts/scenario-*.shに分離します。 - 各シナリオは単独で実行でき、終了時に元の状態へ戻せるようにします。
- AWS CLI の出力値をハードコードせず、CloudFormation Outputs から取得します。
.cdkrdのベースラインはレビュー対象として Git 管理します。- シナリオ中に更新したベースラインや
ignore.yamlは、シナリオ終了後に復元します。 check/record用の読み取り権限と、注入 /revert/ deploy用の書き込み権限をIAM上で分離します。- スクリプトは
set -Eeuo pipefailを使用し、予期しない失敗を握りつぶしません。 - 一時ファイルは
mktemp -dで作成したディレクトリへ保存し、trapで回収します。固定の.tmp/は使いません。
| ID | シナリオ | 変更内容 | cdk drift --fail |
cdkrd check --fail |
主な期待結果 |
|---|---|---|---|---|---|
| S10 | 宣言済みドリフト | SNS DisplayName を変更 |
1 | 1 | CFn-Declared Drift |
| S20 | 未宣言ドリフト | IAM Role にインラインポリシー追加 | 0 | 1 | CFn-Undeclared Drift |
| S30 | 追加リソース | baselineなしでEvent BusにRuleを手動追加 | 0 | 0 | 未記録時はPotential Drift |
| S31 | 追加リソース変更 | Rule を記録後に変更 | 0 | 1 | Added Resource |
| S40 | Ignore | IAM の未宣言ドリフトを無視 | 0 | 0 | .cdkrd/ignore.yaml にルール追加 |
| S50 | Pre-deploy | 実リソースに合わせてローカルコード変更 | 1 | 0 | --pre-deploy では差分なし |
| S60 | Revert | 宣言済み・未宣言ドリフトを復旧 | 0 | 0 | 再読込後に CLEAN |
| S70 | JSON / CI | 確定ドリフトを JSON 出力 | 0 または 1 | 1 | stdout が単一 JSON 配列 |
Potential Drift は未確定のため、--fail の失敗対象にならないことを明示的に確認します。
- 検証専用またはサンドボックス用 AWS アカウント
- Node.js 22
- pnpm 11.9.0
- AWS CLI v2
- jq
- AWS CDK v2 のブートストラップ済み環境
- 対象アカウントへの AWS 認証情報
- Git
本番、Management、共有開発アカウントでは実行しません。PoC Sandboxで人が実行する場合はaws-sandbox-run、エージェントが自律実行する場合は短期認証を発行するaws-agent-leaseをAWS CLI/CDKコマンドの実行境界にします。特にcdkrd revertはAWSリソースを書き換えます。
cdkrd check と cdkrd record は基本的に読み取り処理です。検証を単純化する場合は AWS 管理ポリシー ReadOnlyAccess を付与した専用ロールを使用します。
最低限、CloudFormation、Cloud Control API、STS、および対象リソースを読み取る権限が必要です。
各シナリオでは次の書き込み権限が必要です。
sns:SetTopicAttributesiam:PutRolePolicyiam:DeleteRolePolicyevents:PutRuleevents:DeleteRulecloudcontrol:UpdateResourcecloudcontrol:DeleteResourcecloudcontrol:GetResourceRequestStatus- 対象リソースタイプの更新・削除権限
- CDK デプロイと削除に必要な CloudFormation 権限
check / record用の読み取り権限と、注入 / revert / deploy用の書き込み権限はIAM上で分離します。実行時の認証先は任意のAWS_PROFILEで切り替えず、aws-sandbox-runまたはaws-agent-leaseが行うアカウントpreflightに従います。
export AWS_REGION=ap-northeast-1
export EXPERIMENT_ID=20260722-cdkrd-001
export EXPIRES_AT=2026-07-29
export SUFFIX=yourname
export STACK_NAME="CdkrdVerification-${SUFFIX}"認証先を必ず確認します。
以下のAWS CLI/CDKコマンドはpayloadの例です。実装するシナリオスクリプトは、これらをaws-sandbox-runまたはaws-agent-leaseへ渡して実行します。
aws sts get-caller-identity
aws configure get regionpnpm install --frozen-lockfile初回のみ実行します。
ACCOUNT_ID="$(aws sts get-caller-identity --query Account --output text)"
pnpm exec cdk bootstrap \
"aws://${ACCOUNT_ID}/${AWS_REGION}"pnpm exec cdk deploy "${STACK_NAME}" \
--context suffix="${SUFFIX}" \
--require-approval neversource scripts/export-outputs.sh以下の変数が設定される想定です。
TOPIC_ARNROLE_NAMEEVENT_BUS_NAME
pnpm exec cdkrd check "${STACK_NAME}" \
--strict初回は .cdkrd のベースラインがないため、テンプレートに存在しない実リソースの値が Potential Drift として表示される場合があります。
この段階では、次を確認します。
- 宣言済みプロパティに確定ドリフトがないこと
- 表示された未宣言値が AWS の既定値または意図した状態であること
- 不明な値を機械的に記録しないこと
内容を確認してから記録します。
pnpm exec cdkrd record "${STACK_NAME}"自動化検証では、対象が既知である場合に限り --yes を使用します。
pnpm exec cdkrd record "${STACK_NAME}" \
--yesgit add .cdkrd
git commit -m "test: record initial cdkrd baseline"pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail期待値は終了コード 0 と CLEAN です。
SNS Topic の DisplayName は CDK で明示的に宣言します。
aws sns set-topic-attributes \
--topic-arn "${TOPIC_ARN}" \
--attribute-name DisplayName \
--attribute-value "manual-declared-drift" \
--region "${AWS_REGION}"set +e
pnpm exec cdk drift "${STACK_NAME}" \
--fail
CDK_EXIT=$?
set -e
echo "cdk drift exit code: ${CDK_EXIT}"期待値は終了コード 1 です。
set +e
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail
CDKRD_EXIT=$?
set -e
echo "cdkrd exit code: ${CDKRD_EXIT}"期待値は次のとおりです。
- 終了コード 1
- CFn-Declared Drift
- desired が CDK で宣言した値
- actual が
manual-declared-drift
必ず先に実行計画を確認します。
pnpm exec cdkrd revert "${STACK_NAME}" \
--dry-run問題がなければ復旧します。
pnpm exec cdkrd revert "${STACK_NAME}" \
--yes復旧後に再確認します。
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail期待値は終了コード 0 と CLEAN です。
IAM Role の Policies は CDK で宣言しません。初期ベースラインを作成した後、AWS CLI でインラインポリシーを追加します。
fixtures/iam/manual-inline-policy.json:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ManualDrift",
"Effect": "Deny",
"Action": "s3:ListAllMyBuckets",
"Resource": "*"
}
]
}このポリシーはドリフトを作るための値であり、権限を追加しないようDenyにします。検証用ロールをアプリケーションからAssumeRoleして利用しません。
aws iam put-role-policy \
--role-name "${ROLE_NAME}" \
--policy-name "cdkrd-manual-policy" \
--policy-document file://fixtures/iam/manual-inline-policy.jsonset +e
pnpm exec cdk drift "${STACK_NAME}" \
--fail
CDK_EXIT=$?
set -e
echo "cdk drift exit code: ${CDK_EXIT}"期待値は終了コード 0 です。Policies がテンプレートで宣言されていないため、CloudFormation ベースのドリフト検出では対象にならないことを確認します。
set +e
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail
CDKRD_EXIT=$?
set -e
echo "cdkrd exit code: ${CDKRD_EXIT}"期待値は次のとおりです。
- 終了コード 1
- CFn-Undeclared Drift
- IAM Role の Policies に追加したポリシーが表示される
pnpm exec cdkrd revert "${STACK_NAME}" \
--dry-run
pnpm exec cdkrd revert "${STACK_NAME}" \
--yes
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail期待値は、インラインポリシーが削除され、CLEAN に戻ることです。
S30は.cdkrdのbaselineが存在しないfresh stackから開始します。S20で使ったbaselineを引き継ぎません。CDKで作成したEventBridge Custom Event Busに、AWS CLIでRuleを追加します。
export MANUAL_RULE_NAME="cdkrd-manual-rule-${SUFFIX}"
aws events put-rule \
--name "${MANUAL_RULE_NAME}" \
--event-bus-name "${EVENT_BUS_NAME}" \
--state ENABLED \
--event-pattern '{"source":["cdkrd.manual.v1"]}' \
--region "${AWS_REGION}"pnpm exec cdk drift "${STACK_NAME}" \
--fail
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail期待値は次のとおりです。
cdk drift --fail: 終了コード 0cdkrd check: Potential Drift- 未記録の Potential Drift だけであれば
--failの終了コードは 0
pnpm exec cdkrd record "${STACK_NAME}" \
--yes記録直後は CLEAN になることを確認します。
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--failaws events put-rule \
--name "${MANUAL_RULE_NAME}" \
--event-bus-name "${EVENT_BUS_NAME}" \
--state ENABLED \
--event-pattern '{"source":["cdkrd.manual.v2"]}' \
--region "${AWS_REGION}"
set +e
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail
CDKRD_EXIT=$?
set -e
echo "cdkrd exit code: ${CDKRD_EXIT}"期待値は次のとおりです。
- 終了コード 1
- Added Resource
- ベースラインに記録した Rule と実際の Rule の差分が表示される
Rule を削除します。
aws events delete-rule \
--name "${MANUAL_RULE_NAME}" \
--event-bus-name "${EVENT_BUS_NAME}" \
--region "${AWS_REGION}"この時点ではベースラインが Rule を監視しているため、Deleted として検出されます。シナリオ開始時にmktemp -dへ保存した.cdkrdのスナップショットへ戻します。git restore .cdkrdは未コミットの変更を消すため使用しません。
その後、cdkrd check --fail が CLEAN になることを確認します。
IAM Role に未宣言のインラインポリシーを追加し、その検出結果だけを無視します。
aws iam put-role-policy \
--role-name "${ROLE_NAME}" \
--policy-name "cdkrd-ignored-policy" \
--policy-document file://fixtures/iam/manual-inline-policy.json対話モードで対象を選択します。
pnpm exec cdkrd ignore "${STACK_NAME}".cdkrd/ignore.yaml に追加されたルールを確認します。
ignore:
- path: <check が表示した正確なパス>
stack: CdkrdVerification-*
account: "<AWS_ACCOUNT_ID>"
region: ap-northeast-1確認項目:
- 対象プロパティが
cdkrd checkに表示されなくなること - 同名スタックが別アカウント・別リージョンにある場合へ意図せず適用されないこと
- 無視理由を YAML コメントとして残せること
cdk driftの結果には影響しないこと
シナリオ終了後はポリシーと ignore 設定を削除します。
aws iam delete-role-policy \
--role-name "${ROLE_NAME}" \
--policy-name "cdkrd-ignored-policy"
# シナリオ開始時に保存した .cdkrd のスナップショットへ戻す実リソースの変更を CDK コードへ取り込み、デプロイ前に実リソースとローカル synth が一致することを確認します。
aws sns set-topic-attributes \
--topic-arn "${TOPIC_ARN}" \
--attribute-name DisplayName \
--attribute-value "adopt-me" \
--region "${AWS_REGION}"通常のチェックでは、デプロイ済みテンプレートとの差分として検出されます。
pnpm exec cdkrd check "${STACK_NAME}" \
--strict本リポジトリでは topicDisplayName コンテキストで切り替えます。
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--pre-deploy \
--fail \
--context topicDisplayName=adopt-me期待値は終了コード 0 です。これは、実リソースとローカル synth が一致していることを意味します。
pnpm exec cdk deploy "${STACK_NAME}" \
--context suffix="${SUFFIX}" \
--context topicDisplayName=adopt-me \
--require-approval neverデプロイ後、通常モードでも CLEAN になることを確認します。
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail検証終了後、既定値へ戻します。
pnpm exec cdk deploy "${STACK_NAME}" \
--context suffix="${SUFFIX}" \
--context topicDisplayName=cdkrd-verification \
--require-approval neverCI では対話処理を行わず、--fail と --json を使用します。
mkdir -p artifacts
set +e
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail \
--json \
> artifacts/cdkrd-report.json
EXIT_CODE=$?
set -e
jq . artifacts/cdkrd-report.json
exit "${EXIT_CODE}"検証項目:
- stdout 全体が単一の JSON 配列として
JSON.parseできること - 進捗や警告が stderr へ出力されること
- クリーン時は終了コード 0
- 確定ドリフト時は終了コード 1
- CLI 利用方法や認証などの実行失敗は、ドリフトとは別の失敗として扱われること
- Potential Drift のみの場合は
driftedに含まれず、終了コード 0 であること
tests/assert-cdkrd-report.mjs では、少なくとも次を検証します。
- ルートが配列である
- 各要素に
stack、drifted、findingsがある driftedが 0 以上の整数であるfindingsが配列である- 想定シナリオで finding の
tierとpathが一致する
.github/workflows/test.yml は AWS 認証を必要としない処理だけを実行します。
pnpm install --frozen-lockfile- TypeScript の型チェック
- lint
cdk synth- テストスクリプトの単体テスト
.github/workflows/drift-check.yml は、誤操作防止のため初期状態では workflow_dispatch のみにします。
name: drift-check
on:
workflow_dispatch:
permissions:
contents: read
id-token: write
jobs:
check:
runs-on: ubuntu-latest
environment: cdkrd-sandbox
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm
- run: pnpm install --frozen-lockfile
- uses: aws-actions/configure-aws-credentials@v6
with:
role-to-assume: ${{ secrets.AWS_ROLE_ARN }}
aws-region: ap-northeast-1
- name: Check drift
env:
STACK_NAME: ${{ vars.STACK_NAME }}
run: |
mkdir -p artifacts
pnpm exec cdkrd check "${STACK_NAME}" \
--strict \
--fail \
--json \
> artifacts/cdkrd-report.json
- uses: actions/upload-artifact@v7
if: always()
with:
name: cdkrd-report
path: artifacts/cdkrd-report.jsonCI 用 AWS ロールには読み取り権限だけを付与します。record、ignore、revert、cdk deploy は CI の定期チェックへ含めません。
定期実行へ拡張する場合も、最初は通知のみとし、自動 revert は別設計・別承認フローに分離してください。
package.json には以下の操作を定義します。
{
"packageManager": "pnpm@11.9.0",
"scripts": {
"build": "tsc --noEmit",
"synth": "cdk synth",
"deploy": "bash scripts/deploy.sh",
"destroy": "bash scripts/destroy.sh",
"baseline": "bash scripts/baseline.sh",
"check": "cdkrd check",
"check:ci": "cdkrd check --fail --strict --json",
"verify:clean": "bash scripts/verify-clean.sh",
"scenario:declared": "bash scripts/scenario-declared-drift.sh",
"scenario:undeclared": "bash scripts/scenario-undeclared-drift.sh",
"scenario:added": "bash scripts/scenario-added-resource.sh",
"scenario:ignore": "bash scripts/scenario-ignore.sh",
"scenario:pre-deploy": "bash scripts/scenario-pre-deploy.sh",
"reset": "bash scripts/reset.sh",
"test": "pnpm run build && pnpm run synth"
}
}すべてのシナリオスクリプトは以下を満たします。
EXPERIMENT_ID、EXPIRES_AT、AWS_REGION、SUFFIX、STACK_NAMEの存在を検証する。aws-sandbox-runまたはaws-agent-leaseのpreflightでアカウントとリージョンを検証する。- スタックが
*_COMPLETE状態であることを確認する。 - ベースライン作成済みか確認する。
- シナリオ開始前の
.cdkrdをmktemp -dで作ったディレクトリへ退避する。 - 予想終了コードを明示的に検証する。
- 終了時に AWS リソースと
.cdkrdを復元する。 - 復元後に
cdkrd check --fail --strict --jsonが期待したクリーン状態を返すことを確認する。 - 復元に失敗した場合は、削除すべきリソース名とコマンドを表示する。
- 検証対象スタックを明示し、引数なしの
cdkrd revertを使用しません。 - revert の前に必ず
--dry-runを実行します。 - スクリプトでは、意図的なテスト以外に
--forceを使用しません。 - 未記録リソースを削除し得る
--remove-unrecordedは初期スコープでは使用しません。 --yesは自動化された検証シナリオだけで使用します。cdkrd check --yesは解決処理を実行しないため、書き込み操作にはスタンドアロンのrecord、ignore、revertを使用します。.cdkrdの差分をレビューせずに main ブランチへマージしません。- 検証用 IAM Role をアプリケーションから AssumeRole しません。
- AWS 認証先とリージョンを各シナリオの開始時に表示します。
cdk.context.jsonが更新される可能性を考慮し、意図しない差分か確認します。
SNS Topic、IAM Role、EventBridge Event Bus と Rule 自体には、通常の検証範囲では大きな料金は発生しません。ただし、AWS の料金体系は変更される可能性があります。
本リポジトリでは次を禁止します。
- SNS メッセージの大量発行
- EventBridge イベントの大量送信
- 有料ターゲットの接続
- 長期間のリソース放置
検証終了後は必ずスタックを削除します。
シナリオで作成したスタック外リソースを先に削除します。
aws events delete-rule \
--name "cdkrd-manual-rule-${SUFFIX}" \
--event-bus-name "${EVENT_BUS_NAME}" \
--region "${AWS_REGION}"
aws iam delete-role-policy \
--role-name "${ROLE_NAME}" \
--policy-name "cdkrd-manual-policy"
aws iam delete-role-policy \
--role-name "${ROLE_NAME}" \
--policy-name "cdkrd-ignored-policy"スタックを削除します。
pnpm exec cdk destroy "${STACK_NAME}" \
--force最後に残存確認を行います。
aws cloudformation describe-stacks \
--stack-name "${STACK_NAME}" \
--region "${AWS_REGION}"ValidationError でスタックが存在しないことを確認します。
ベースラインがない状態では、テンプレート未定義の値が意図した値か、AWS が補完した値か、手動変更かを完全には判定できません。そのため、初回の Potential Drift は内容を確認してから record または ignore します。
cdk drift は CloudFormation のドリフト検出を使用します。対象リソースタイプが対応していても、テンプレートで明示していないプロパティは比較対象になりません。
record は「この未宣言状態を現時点の正として記録し、以後の変更を監視する」操作です。CDK コードで管理すべき設定を安易にベースラインへ逃がさないでください。
ignore は対象パスの変更を今後報告しません。外部コントローラーが管理する値など、明確な所有者がある場合に限定し、理由をコメントへ残します。
revertはcdkrdのうちAWSへ書き込む操作です。スタック更新中のリソース、他システムが継続的に更新する値、サービス側制約がある値では、復旧が拒否または失敗する可能性があります。
他の CloudFormation スタックが所有するリソースを、単純なスタック外追加として扱わないことが重要です。検証時も、同じ親リソースへ別スタックから子リソースを追加しません。
以下はignore、--pre-deploy、CIまで含む拡張検証の完了条件です。記事初稿に必要なMust条件はdocs/implementation-plan.mdを参照します。記事下書きは blog#13(_drafts/issue-13-cdkrd-vs-cdk-drift/)です。
- 初回の Potential Drift を確認した
- ベースラインを作成し、Git 管理した
- 宣言済みドリフトを
cdk driftとcdkrdの両方で検出した - 未宣言ドリフトを
cdkrdだけで検出した - 未記録の追加リソースが Potential Drift になることを確認した
- 記録済み追加リソースの変更が確定ドリフトになることを確認した
-
revert --dry-runの計画を確認した - 宣言済みドリフトを
revertして CLEAN に戻した - 未宣言ドリフトを
revertして CLEAN に戻した -
ignore.yamlのスコープとコメントを確認した -
--pre-deployでローカル synth と実リソースの一致を確認した - JSON 出力を機械的に検証した
- CI が確定ドリフトで失敗した
- クリーンアップ後に検証リソースが残っていない
検証結果は Issue または docs/results/YYYY-MM-DD.md に記録します。
# 検証結果
- 日付:
- 実行者:
- AWS アカウント:
- リージョン:
- Git commit:
- cdk-real-drift:
- aws-cdk-lib:
- Node.js:
- AWS CLI:
## シナリオ結果
| ID | baseline前提 | 結果 | cdk exit | cdkrd exit | Finding | coverage gap | 備考 |
|---|---|---|---:|---:|---|---|---|
| S10 | あり | PASS | 1 | 1 | CFn-Declared Drift | なし | |
| S20 | あり | PASS | 0 | 1 | CFn-Undeclared Drift | なし | |
| S30 | なし | PASS | 0 | 0 | Potential Drift | なし | |
| S31 | Rule記録済み | PASS | 0 | 1 | Added Resource | なし | |
## 想定外の挙動
- なし
## 証跡
- コマンド出力:
- JSON レポート:
- `.cdkrd` 差分:
- CloudTrail Event ID:AWS アカウント ID、ARN、物理リソース名、ポリシー内容などを公開リポジトリへ掲載する場合は、必要に応じてマスキングしてください。