CT.EC2.PV.1
コントロールの説明
暗号化されていない EBS ボリュームからのスナップショット作成を禁止します。
なお、Security Hub CSPM には「未暗号化ボリュームからのスナップショット作成」を直接チェックするコントロールは存在しません([EC2.3] はアタッチ済みボリュームの暗号化チェック、[EC2.7] はデフォルト暗号化設定のチェック)。検知ではなく予防で対策するには、本コントロールまたは同等のカスタム SCP が必要です。
検証の流れ
flowchart LR
A[1. 事前準備] --> B[2. 未暗号化EBSから<br>スナップショット作成成功]
B --> C[3. CT.EC2.PV.1<br>有効化]
C --> D[4. 既存スナップショット<br>維持を確認]
C --> E[5. 未暗号化EBSから<br>スナップショット作成拒否]
C --> F[5. 暗号化EBSから<br>スナップショット作成成功]
D & E & F --> G[6. CT.EC2.PV.1<br>無効化]
G --> H[7. 未暗号化EBSから<br>スナップショット作成成功]
結果
- コントロールの有効化前、未暗号化 EBS ボリュームからスナップショットを正常に作成できることを確認できた。
- コントロールの有効化後、未暗号化 EBS ボリュームからのスナップショット作成が拒否されることを確認できた。
- 有効化前に作成済みの未暗号化スナップショットについては、有効化後も削除されず維持されることを確認できた。
- 暗号化済み EBS ボリュームからのスナップショット作成は、有効化後も問題なく実行できることを確認できた。
- 拒否時、「explicit deny in a service control policy」というメッセージが表示されるため、SCP による制御であることを確認できた。
1. 事前準備
EBS のデフォルト暗号化設定がオフであることを確認する。
aws ec2 get-ebs-encryption-by-default{
"EbsEncryptionByDefault": false
}暗号化なしの EBS ボリュームを作成する。
aws ec2 create-volume \
--availability-zone ap-northeast-1a \
--size 1 \
--volume-type gp3 \
--no-encrypted \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=ct-ec2-pv1-unencrypted}]' \
--query '{VolumeId:VolumeId,Encrypted:Encrypted,State:State}'{
"VolumeId": "vol-0e7464e7f16450db9",
"Encrypted": false,
"State": "available"
}2. コントロール有効化前の確認
未暗号化 EBS ボリュームからスナップショットを作成する。
aws ec2 create-snapshot \
--volume-id <ボリューム ID> \
--description "ct-ec2-pv1-test-before" \
--tag-specifications 'ResourceType=snapshot,Tags=[{Key=Name,Value=ct-ec2-pv1-before}]' \
--query '{SnapshotId:SnapshotId,VolumeId:VolumeId,Encrypted:Encrypted,State:State}'スナップショットが正常に作成されることを確認する。
{
"SnapshotId": "snap-0571f0fd7866359ba",
"VolumeId": "vol-0e7464e7f16450db9",
"Encrypted": false,
"State": "completed"
}ステップ 4 で「有効化後も既存のスナップショットが維持されるか」を確認するため、このスナップショットは削除せずに残しておく。
3. 対象の予防コントロールを有効化(例外設定なし)
Control Tower の管理アカウントで、対象の OU にコントロールが有効になっていないことを確認する。
aws controltower list-enabled-controls \
--target-identifier <OU の ARN>{
"enabledControls": []
}コントロールを有効化する。
aws controltower enable-control \
--control-identifier arn:aws:controlcatalog:::control/97hes2glndlye96adkdcdeef4 \
--target-identifier <OU の ARN>{
"arn": "arn:aws:controltower:ap-northeast-1:<管理アカウント ID>:enabledcontrol/<enabledcontrol ID>",
"operationIdentifier": "<オペレーション ID>"
}有効化が完了するまで待機する。
aws controltower get-control-operation \
--operation-identifier <オペレーション ID>{
"controlOperation": {
"operationType": "ENABLE_CONTROL",
"status": "SUCCEEDED",
"statusMessage": "Operation was successful."
}
}4. 有効化後の挙動確認
有効化前に作成済みの未暗号化スナップショットが、有効化後も維持されていることを確認する。
aws ec2 describe-snapshots \
--snapshot-ids <スナップショット ID> \
--query 'Snapshots[0].{SnapshotId:SnapshotId,VolumeId:VolumeId,Encrypted:Encrypted,State:State}'{
"SnapshotId": "snap-0571f0fd7866359ba",
"VolumeId": "vol-0e7464e7f16450db9",
"Encrypted": false,
"State": "completed"
}5. 新規操作は制限(拒否)されることの確認
コントロール有効化後、未暗号化 EBS ボリュームからスナップショットの作成を試みる。
aws ec2 create-snapshot \
--volume-id <未暗号化ボリューム ID> \
--description "ct-ec2-pv1-test-after"以下のようなエラーが返り、操作が拒否されることを確認する。
An error occurred (UnauthorizedOperation) when calling the CreateSnapshot operation:
You are not authorized to perform this operation.
User: arn:aws:sts::<Workload のアカウント ID>:assumed-role/<ロール名>/<ユーザー名>
is not authorized to perform: ec2:CreateSnapshot on resource:
arn:aws:ec2:ap-northeast-1:<Workload のアカウント ID>:volume/<ボリューム ID>
with an explicit deny in a service control policyなお、暗号化済みの EBS ボリュームからであれば、問題なくスナップショットを作成できることも合わせて確認する。
aws ec2 create-volume \
--availability-zone ap-northeast-1a \
--size 1 \
--volume-type gp3 \
--encrypted \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=ct-ec2-pv1-encrypted}]' \
--query '{VolumeId:VolumeId,Encrypted:Encrypted,State:State}'{
"VolumeId": "vol-097c4a3b0a097c8e4",
"Encrypted": true,
"State": "available"
}aws ec2 create-snapshot \
--volume-id <暗号化ボリューム ID> \
--description "ct-ec2-pv1-encrypted-test" \
--query '{SnapshotId:SnapshotId,VolumeId:VolumeId,Encrypted:Encrypted,State:State}'{
"SnapshotId": "snap-065343157c1af1ecb",
"VolumeId": "vol-097c4a3b0a097c8e4",
"Encrypted": true,
"State": "completed"
}6. 対象の予防コントロールを無効化
検証完了後、コントロールを無効化する。
aws controltower disable-control \
--control-identifier arn:aws:controlcatalog:::control/97hes2glndlye96adkdcdeef4 \
--target-identifier <OU の ARN>{
"operationIdentifier": "<オペレーション ID>"
}ステータスが無効になるまで待機する。
aws controltower get-control-operation \
--operation-identifier <オペレーション ID>{
"controlOperation": {
"operationType": "DISABLE_CONTROL",
"status": "SUCCEEDED",
"statusMessage": "Operation was successful."
}
}7. 制限解除の確認
コントロール無効化後、再び未暗号化 EBS ボリュームからスナップショットの作成を試みる。
aws ec2 create-snapshot \
--volume-id <未暗号化ボリューム ID> \
--description "ct-ec2-pv1-test-after-disable" \
--query '{SnapshotId:SnapshotId,VolumeId:VolumeId,Encrypted:Encrypted,State:State}'スナップショットが正常に作成され、制限が解除されたことを確認する。
{
"SnapshotId": "snap-00d0f47c9ef41515b",
"VolumeId": "vol-0e7464e7f16450db9",
"Encrypted": false,
"State": "completed"
}8. クリーンアップ
検証で作成したリソースをすべて削除する。
# スナップショットを削除
aws ec2 delete-snapshot --snapshot-id <スナップショット ID>
# EBS ボリュームを削除
aws ec2 delete-volume --volume-id <ボリューム ID>