Amazon CloudWatch Logsの新機能「削除保護」を試してみた
Amazon CloudWatch Logs 削除保護機能を試してみた
2025年11月26日、Amazon CloudWatch Logsに新機能「削除保護(Deletion Protection)」がサポートされました。
これまで、S3バケットやRDSインスタンス、ALBなどでは削除保護機能が提供されていましたが、CloudWatch Logsには同等の機能が存在しませんでした。そのため、重要なログの保護手段としては、IAMポリシー(Deny Action)などに限られていましたが、今回のアップデートにより、ロググループ単位で明示的な保護設定が可能となります。
本記事では、この新機能をAWS CLIを用いて検証した結果を紹介します。
機能概要
削除保護が有効化されたロググループは、削除操作(DeleteLogGroup)が拒否されます。これにより、監査ログやアプリケーションの重要ログが、操作ミスやスクリプトの誤動作によって消失するリスクを防ぐことができます。
- 対象: ロググループ単位
- デフォルト: 無効(既存および新規作成時)
- 解除: 明示的に保護を無効化しない限り削除不可
Webコンソール
マネジメントコンソールを確認したところ、ロググループ作成画面に「削除保護」のチェックボックスが追加されていました。ここを有効にするだけで設定可能です。

検証環境
検証には以下の環境を東京リージョンで使用しました。AWS CLIは、本機能に対応した最新バージョンへアップデート済みです。
OS: Amazon Linux 2023
Kernel: 6.1.158-178.288.amzn2023.x86_64
AWS CLI: 2.32.6
Python: 3.13.9
$ aws --version
aws-cli/2.32.6 Python/3.13.9 Linux/6.1.158-178.288.amzn2023.x86_64 exe/x86_64.amzn.2023 prompt/off
検証1: 削除保護の有効化と挙動確認
1. ロググループの作成と保護設定
検証用のロググループを作成し、CLIから削除保護を有効化します。
# ロググループ作成
aws logs create-log-group --log-group-name /test/protection-demo
# 削除保護を有効化
aws logs update-log-group \
--log-group-name /test/protection-demo \
--deletion-protection-enabled
設定後のステータスを確認します。describe-log-groups の出力に deletionProtectionEnabled フィールドが追加されていることを確認しました。
aws logs describe-log-groups \
--log-group-name-prefix /test/protection-demo \
--query 'logGroups[].{Name:logGroupName, Protected:deletionProtectionEnabled}'
実行結果:
[
{
"Name": "/test/protection-demo",
"Protected": true
}
]
ログ上で Protected: true となっており、設定が反映されたと判断しました。
2. 削除の試行(保護あり)
この状態で、ロググループの削除を試みました。
aws logs delete-log-group --log-group-name /test/protection-demo
実行結果(エラーログ):
An error occurred (InvalidParameterException) when calling the DeleteLogGroup operation: The log group '/test/protection-demo' cannot be deleted because deletion protection is enabled.
期待通り、InvalidParameterException が発生し、削除がブロックされることを確認しました。
3. 保護の解除と削除
削除保護を無効化してから、再度削除を試みます。
# 保護を解除
aws logs update-log-group \
--log-group-name /test/protection-demo \
--no-deletion-protection-enabled
# 削除実行
aws logs delete-log-group --log-group-name /test/protection-demo
エラーが出力されず、コマンドが正常終了しました。再度 describe-log-groups を実行したところ、リソースが存在しない(空のリストが返る)ことを確認しました。
検証2: CloudFormationでの対応状況
IaC管理されている環境での利用を想定し、CloudFormation (CFn) での対応状況を調査しました。
検証テンプレート
以下のYAMLを作成し、デプロイを試みました。プロパティ名は他のAWSリソース(RDS等)の慣習から DeletionProtectionEnabled と推測して記述しました。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
ProtectedLogGroup:
Type: AWS::Logs::LogGroup
Properties:
LogGroupName: /test/cfn-protection
RetentionInDays: 7
DeletionProtectionEnabled: true # 検証箇所
結果: デプロイ失敗
デプロイを実行したところ、以下のエラーが発生しました。
Resource handler returned message: "Model validation failed (#/DeletionProtectionEnabled: #: only 1 subschema matches does not match the schema)"
また、AWS CLIでCloudFormationのリソーススキーマを確認しました。
aws cloudformation describe-type \
--type RESOURCE \
--type-name AWS::Logs::LogGroup \
--query 'Schema' \
--output text
出力されたJSONスキーマ内に DeletionProtectionEnabled というプロパティは存在しませんでした。
結論:
執筆時点では、CloudFormationは本プロパティをネイティブサポートしていません。CFn管理下のロググループに削除保護を適用する場合、以下のいずれかの対応が必要です。
- Custom Resource (Lambda) を使用してAPIをコールする。
- AWS CLI / Management Console で構築後に別途設定する
運用への適用 (Bulk Update)
既存のロググループに対しても設定が可能か確認しました。
特定プレフィックス(例: /aws/lambda/)を持つロググループすべてに削除保護を一括適用するスクリプト例は以下の通りです。
LOG_PREFIX="/aws/lambda/"
aws logs describe-log-groups --log-group-name-prefix "${LOG_PREFIX}" \
--query 'logGroups[].logGroupName' --output text | \
while read -r log_group; do
echo "Enabling deletion protection for: ${log_group}"
aws logs update-log-group \
--log-group-name "${log_group}" \
--deletion-protection-enabled
done
実行後、対象のロググループで deletionProtectionEnabled: true となっていることを確認しました。
まとめ
Amazon CloudWatch Logs の削除保護機能について検証しました。
- CLI:
update-log-group(または関連API) により、簡単に設定・解除が可能であることを確認しました。 - 挙動: 保護有効時は
DeleteLogGroupAPI が明確にエラーを返し、誤削除を防げます。 - IaC: CloudFormation は執筆時点で未対応であり、CLI等での補完が必要です。
コンプライアンス要件の厳しいシステムなどで、長期保存が必要な監査ログ、CloudWatch Logsに保持し続ける必要がある場合、ご活用ください。
記事執筆時で未サポートだったCloudFormationについては、スタック削除時の扱いなどに課題があると予想されますが、そのサポートを待ちたいと思います。







