[メンバーズ向け]既存のAWSアカウントにセキュアアカウント設定を一部導入してみた(コスト優先)

2022.08.29

クラスメソッドのAWS請求代行サービスでは、 AWSのクラウドサービスを活用したセキュリティリスクの抑制、軽減を実現したAWSアカウントを、セキュアアカウントとして提供しています。

2022年8月時点の 弊社ポータルサイト(メンバーズポータル)を利用した、既存AWSアカウントへのセキュアカウント設定と、 AWSコスト抑制のため、対象リージョンや、利用するAWSサービスの絞り込みを実施する機会がありましたので、紹介させていただきます。

メンバーズポータル設定

メンバーズポータルサイトに管理者権限を持つユーザでログインしました。

AWSアカウント指定

対象AWSアカウントを選択しました

メンバーズサービス設定

メンバーズサービス設定 「設定する」 を選択しました

セキュリティ設定

「セキュリティ設定を選択しました

共通設定

追加料金なく利用できる共通設定は、すべて有効化しました。

  • パスワードポリシー
  • AWS Access Analyzer
  • AWS Compute Optimizer

AWSの推奨よりも強固なパスワードポリシーを設定済みの場合、デグレードを避けるため、パスワードポリシーは無効なままご利用ください。

[IAM.7] Password policies for IAM users should have strong configurations

ベーシック設定

クラスメソッドメンバーズのAWSアカウントの初期設定相当を維持するベーシック設定は、有効としました。

  • AWS CloudTrail (ベーシック設定)
  • AWS Config (ベーシック設定)

CloudTrail、Config 設定をカスタマイズしている場合、上書きによるデグレードを避けるためベーシック設定は「無効」のままご利用ください。

セキュア設定

以下の設定を有効化「保存」しました。

  • Amazon EventBridge通知設定
  • Amazon GuardDuty
  • AWS Security Hub

今回AWSコストの抑制を優先するため、以下の設定は見送りました。

  • AWS CloudTrail(セキュア設定): KMSのキー料金(1USD x リージョン)が発生
  • AWS Config(セキュア設定) : 全てのリソース記録に伴うConfig料金の増加回避
  • EBSデフォルト暗号化 : スナップショット管理コスト全般の回避。
  • Amazon Detective : 対象ログに応じた従量課金(1GB毎に2USD)回避

待機

設定したセキュア設定の反映(自動メンテナンス)まで一週間待機します。

※自動メンテナンス、2022年8月時点では、日本時間の土曜日AM2時台に実施されます。

一部セキュア設定の解除

無料期間の経過後、Security Hub のコストがAWS利用費に占める割合が多いことが確認されました。

今回、AWSコストの抑制を優先するため、未使用リージョン(東京、バージニア)以外の GuardDuty、 Security Hub については 無効化しました。

CLI

CloudShellを利用し、AWSCLを実行しました。

$ aws --version
aws-cli/2.7.25 Python/3.9.11 Linux/4.14.287-215.504.amzn2.x86_64 exec-env/CloudShell exe/x86_64.amzn.2 prompt/off
$ jq --version
jq-1.5
  • securityhub と guardduty の無効化 (東京、バージニア以外)
aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r  '.[]' \
  | grep -v -e 'ap-northeast-1' -e 'us-east-1' \
  | while read REGION 
    do
      echo "${REGION}"
      # securityhub disable
      aws --region ${REGION} securityhub disable-security-hub
      # guardduty no-enable
      aws --region ${REGION} guardduty list-detectors --query DetectorIds[*] | jq -r .[] \
      | while read DETECTORID 
      do
        aws --region ${REGION} guardduty  update-detector --detector-id ${DETECTORID} --no-enable
      done 
    done
  • 東京、バージニアリージョンの設定確認
aws ec2 describe-regions --query Regions[*].RegionName \
  | jq -r  '.[]' \
  | grep -e 'ap-northeast-1' -e 'us-east-1' \
  | while read REGION 
    do
      echo "# ${REGION}"
      echo "## securityhub"
      aws --region ${REGION} securityhub describe-hub
      echo "## guardduty"
      aws --region ${REGION} guardduty list-detectors --query DetectorIds[*] | jq -r .[] \
      | while read DETECTORID 
      do
        aws --region ${REGION} guardduty get-detector --detector-id ${DETECTORID}
      done 
    done

セキュア設定の解除

メンバーズポータルの自動メンテナンスにより、GuardDuty、 Security Hub が再設定される事を避けるため、セキュア設定のチェックを外し「保存」しました。

特定リージョンに限定して設定した GuardDuty、 Security Hub、 AWSのベストプラクティスとしては全リージョンでの利用が推奨されています。

[GuardDuty.1] GuardDuty should be enabled

月額コストが許容できる場合には、なるべく無効化しない事をおすすめします。

請求アラーム

GuardDuty、 Security Hub を利用しないリージョンで、AWSアカウントの不正利用を早期検出するため、 追加費用なく利用できる、メンバーズポータルの請求アラームとAWSコスト異常検出を設定しました。

まとめ

今回の設定対象としたAWSアカウントは CloudFront、AWS WAF、S3を利用したWeb配信用の環境でしたが、 AWS利用費の総額に占めるセキュアアカウントのコスト、1割台で利用する事ができました。

より小規模、関係者が少ないシステムで、 Security Hub の機能がオーバースペックである場合には、GuardDutyなどの通知については別途実装 (EventBridge+Chatbot等)。 セキュリティ状況を把握する利用する必要性が生じた時にSecurityHubを有効化し、オンデマンド利用するといった節約も可能と思われます。。

今回、メンバーズポータルを利用したセキュアアカウントの設定、維持コストの抑制までを紹介させていただきました。

セキュアアカウントの実際の活用、Security Hubの検出結果の確認や、実施した改善などについては、改めて紹介させて頂きたいと思います。