こんにちは。AWS CLIが好きな福島です。
はじめに
今回は、Security Hubでチェックされるリソースの削除保護の対応方法について、ブログに記載いたします。
Security Hubでチェックされるのは以下の3つ(ELB.6,RDS.7,RDS.8)になりますが、今回はおまけでEC2の削除保護についても記載しております。
削除保護について
AWSでは、誤った削除を防ぐために削除保護の機能が付いているサービスがあります。
設定も簡単にできるため、本番環境など重要なリソースについては、本機能を有効化しておくことをお勧めいたします。
各サービスごとの削除保護について
ではここから各サービスごとの削除保護の対応方法について記載いたします。
EC2の削除保護について
EC2は削除保護ではなく、終了保護という項目になります。
また停止保護と似た名前もあるため、注意が必要です。
GUI
対象のインスタンスを右クリックし、「終了保護を変更」を押下します。
有効化にチェックを付け、OKを押下します。
CLI
- 終了保護の設定を確認するコマンド
aws ec2 describe-instances --query "Reservations[].Instances[].[Tags[?Key=='Name'] | [0].Value,InstanceId]" --output text | while read line do result=$(aws ec2 describe-instance-attribute \ --attribute disableApiTermination \ --instance-id $(echo $line | awk '{print $2}') \ --query "[DisableApiTermination.Value]" --output text) echo $line $result done | column -t
◆実行結果例
# aws ec2 describe-instances --query "Reservations[].Instances[].[Tags[?Key=='Name'] | [0].Value,InstanceId]" --output text | while read line > do > result=$(aws ec2 describe-instance-attribute \ > --attribute disableApiTermination \ > --instance-id $(echo $line | awk '{print $2}') \ > --query "[DisableApiTermination.Value]" --output text) > echo $line $result > done | column -t fk-linux-jira i-xxxxxxxxxxxxxxxxx True fk-windows i-xxxxxxxxxxxxxxxxx False fk-linux i-xxxxxxxxxxxxxxxxx False #
⇒Trueが返ってきた場合、終了保護が有効になっています。
- 終了保護を有効化するコマンド
aws ec2 modify-instance-attribute \ --disable-api-termination \ --instance-id [対象のインスタンスID]
RDSの削除保護について
GUI
対象のRDSをチェックし、「変更」を押下します。
「削除保護の有効化」をチェックし、「続行」を押下します。
「次回の定期メンテナンス期間中に適用」にチェックを付け、「インスタンスの変更」を押下します。 ※削除保護の設定は即時に変更されます。(再起動は発生しません。)
CLI
- RDSの削除保護を確認するコマンド
aws rds describe-db-instances \ --query "DBInstances[].[DBInstanceIdentifier,DeletionProtection]" \ --output text
◆実行結果例
# aws rds describe-db-instances \ > --query "DBInstances[].[DBInstanceIdentifier,DeletionProtection]" \ > --output text fk-jira False fk-test-aurora-instance-1 False fk-test-rds True #
⇒Trueが返ってきた場合、終了保護が有効になっています。
- RDSの削除保護を有効化するコマンド
aws rds modify-db-instance \ --db-instance-identifier [対象のRDS識別子] \ --deletion-protection \ --no-apply-immediately
Auroraの削除保護について
GUI
対象のAuroraを選択し、「変更」を押下します。
「削除保護の有効化」をチェックし、「続行」を押下します。
「次回の定期メンテナンス期間中に適用」にチェックを付け、「クラスターの変更」を押下します。 ※削除保護の設定は即時に変更されます。(再起動は発生しません。)
CLI
- Auroraの削除保護を確認するコマンド
aws rds describe-db-clusters \ --query "DBClusters[].[DBClusterIdentifier,DeletionProtection]" \ --output text
◆実行結果例
# aws rds describe-db-clusters \ > --query "DBClusters[].[DBClusterIdentifier,DeletionProtection]" \ > --output text fk-test-aurora True #
⇒Trueが返ってきた場合、終了保護が有効になっています。
- Auroraの削除保護を有効化するコマンド
aws rds modify-db-cluster \ --db-cluster-identifier [対象のAurora識別子] \ --deletion-protection \ --no-apply-immediately
ALBの削除保護について
GUI
対象のELB上で右クリックし、「属性の編集」を押下します。 削除保護にチェックを付けます。
CLI
- ELBの削除保護設定を確認するコマンド
for elb_arn in $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text) do elb_arn_esc=$(echo ${elb_arn#*/} | sed 's/\//\\\//g') aws elbv2 describe-load-balancer-attributes \ --load-balancer-arn $elb_arn \ --query "Attributes[]" \ --output text | sed -e s/^/$elb_arn_esc,/g -e 's/\t/,/g' done | grep deletion_protection.enabled
◆実行結果例
# for elb_arn in $(aws elbv2 describe-load-balancers --query "LoadBalancers[].LoadBalancerArn" --output text) > do > elb_arn_esc=$(echo ${elb_arn#*/} | sed 's/\//\\\//g') > aws elbv2 describe-load-balancer-attributes \ > --load-balancer-arn $elb_arn \ > --query "Attributes[]" \ > --output text | sed -e s/^/$elb_arn_esc,/g -e 's/\t/,/g' > done | grep deletion_protection.enabled app/fk-test-alb-001/xxxxxxxxxxx,deletion_protection.enabled,false app/fk-test-alb-002/xxxxxxxxxxx,deletion_protection.enabled,false #
⇒Trueが返ってきた場合、終了保護が有効になっています。
- 削除保護を有効化するコマンド
aws elbv2 modify-load-balancer-attributes \ --load-balancer-arn [ALBのARN] \ --attributes Key=deletion_protection.enabled,Value=true
終わりに
今回はSecurity Hubでチェックされる削除保護関連の対応方法について記載いたしました。
今後も、Security Hubでチェックされる項目の対応方法についてまとめていきたいと思います。
どなたかのお役に立てれば幸いです。