【セキュアアカウント切り戻し手順】AWS Configベーシック設定への切り戻し手順のご案内

クラスメソッドメンバーズご利用のお客様に提供しているセキュアアカウントサービスの設定切り戻し手順をご案内いたします。
2023.07.21

当エントリではクラスメソッドメンバーズが提供しているセキュアアカウントサービスにてAWS Configのクラスメソッド基準のベーシック設定(アカウントお渡し時の初期設定)への切り戻し手順についてご案内いたします。

セキュアアカウントとは

クラスメソッドでは、セキュリティに関するベストプラクティスをまるっと施した状態のAWSアカウントをお客様に提供しております。
クラスメソッドメンバーズご利用の全てのお客様がご利用可能ですので、この機会にご検討ください。

セキュアアカウントのアーキテクチャ

セキュアアカウントでは下記の設定が施されています。

各設定の詳細は下記記事や仕様書をご参照ください。

今回の切り戻し対象のサービス

今回はセキュアアカウントにて全リージョン有効化されているAWS Configのベーシック設定への切り戻し手順を紹介いたします。

AWS Configとは

AWS Configは、AWSリソースの構成と変更を追跡および管理するためのフルマネージドサービスです。
リソースの設定の監査、変更の追跡、およびリソースの設定の変更を自動的に通知することで、セキュリティとコンプライアンスの維持を支援します。

構成監査: AWS Configは、設定の監査を行い、リソースの設定が特定の要件に準拠しているかどうかを評価します。
AWS Configルールを使用して、セキュリティのベストプラクティスやコンプライアンス要件に基づいて、リソースの設定を定期的に監査することができます。

変更追跡: AWS Configは、リソースの構成情報のスナップショットを取得し、構成変更を自動的に追跡します。
これにより、リソースの変更履歴や過去の設定を確認することができます。
変更イベントの詳細なログを取得することで、問題のトラブルシューティングやセキュリティインシデントの調査が容易になります。

自動通知とリアルタイムの監視: AWS Configは、Amazon SNSやAmazon CloudWatch Eventsと統合することができ、変更や非準拠リソースを検出した場合に自動的に通知を受けることができます。
これにより、リアルタイムで状態の変化やセキュリティリスクに対処することができます。

コンプライアンス評価: AWS Configは、設定監査の結果を評価し、リソースが特定のコンプライアンス基準に準拠しているかどうかを評価します。
AWS Configルールを使用して、AWSベストプラクティスや業界規制に準拠しているかどうかを確認できます。

データの保存と分析: AWS Configは、設定の履歴を保存し、AWS CloudTrailと統合することで変更イベントと連携します。
また、AWS Configが取得したデータをAmazon S3やAmazon Athenaなどのサービスと統合して分析やクエリを実行することも可能です。

料金について

AWS Configをベーシック設定に戻したいという理由の一つとして、想定より料金が高くなってしまった可能性が高いのではないでしょうか?
AWS Configは従量課金のサービスですが、構成変更が多い環境では課金タイミングが多く発生し、想定よりも大きい請求が発生してしまう可能性のあるサービスです。
AWS Configの料金形態を確認し、どのタイミングで課金が発生しているかを認識することが大切かと思います。下記の表の金額は2023/07のものとなっております。

  • AWS構成

AWS アカウントに記録された構成アイテムごとに、AWS をお支払いいただきます。構成アイテムは、リソースに構成変更または関係変更が発生するたびに記録されます。リソースは、AWS、サードパーティ、またはカスタム リソースである可能性があります。関係は、リソースが AWS アカウント内の他のリソースにどのように関連するかを定義します。

その結果、新しいリソースが作成されない場合でも (セキュリティ グループが Amazon Elastic Compute Cloud [EC2] インスタンスにアタッチされている場合など)、構成アイテムを記録できます。
AWS Config Pricingから引用

リソースの追加・変更や、構成の変更があった場合に、各リージョンごとに$0.003かかります。
リソースの変更時に各リージョン以外にグローバルリージョンにも変更が記録されるリソースがあるため、思ったより料金が上がってしまう一因となっています。

  • AWS Configルール

AWS Configルールの料金は、Configルールの評価数によって料金が変動します。

Configルールの評価とは、前項のAWS構成で記録対象になっているリソースに対して、設定されているConfigルールを基準として準拠・非準拠の判定を自動で行うことです。
Configを有効にした際に自動で設定されるAWS管理のルールとユーザーが作成し設定するカスタムルールに加え、Security Hubなどを連携した際に追加されるカスタムルールもありますので、構成管理と並んでコスト上がりやすい部分かと思います。

AWS Config ルールの評価 価格
最初の 100,000 件のルール評価 リージョンごとのルール評価ごとに$0.001
次の 400,000 ルール評価 (100,001 ~ 500,000) リージョンごとのルール評価あたり$0.0008
500,001 件以上のルール評価 リージョンごとのルール評価ごとに$0.0005

AWS Config Pricingから引用

  • 適合パック(コンフォーマンスパック)

AWS Configには、適合パック(コンフォーマンスパック)という、AWS Config ルールと修復アクションをパッケージ化できる機能があります。  

適合パックについても、前述したAWS Configルールの料金形態と同じで、適合パック内で行われたルール評価に対してコストが発生します。
ただし、修復アクションで使用されるLambda等のコストについてはそれぞれのサービス内でコストが発生しますので、適合パックを使用する際は連動しているサービスのコストも確認していただければと思います。

適合パックの評価 価格
最初の 100,000 件の適合パック評価 リージョンごとの適合パック評価ごとに$0.001
次の 400,000 件の適合パック評価 (100,001 ~ 500,000) リージョンごとの適合パック評価あたり$0.0008
500,001 以上の適合パック評価 リージョンごとの適合パック評価ごとに$0.0005

AWS Config Pricingから引用

適合パックについては、イメージしづらいと感じる人もいると思いますので、下記のブログを参考にしていただければと思います。

  • その他の費用について

その他、保存したログの量や通知について、Amazon S3やAmazon SNS等の連携しているサービスの利用費が追加されます。
ログをAmazon S3に保存しておくことで、急にAWS Configのコストが上がってしまった場合、保存されたログをAmazon Athenaで解析し、コストを上げているリソースを特定することもできます。

前提

ベーシック設定とセキュア設定の記録除外するリソースタイプの差異について

セキュア設定はサポートされているすべてのリソースタイプを記録いたします。

ベーシック設定はクラスメソッドが選定した、一部のリソースタイプを除外して記録いたします。
ベーシック設定で記録から除外されるリソースについての詳細は、クラスメソッドメンバーズポータル(以下CMP)の作成されるAWSリソース — メンバーズサービス仕様書(※CMPログイン要)をご確認ください。
東京、バージニア北部、オレゴン、その他のリージョンで除外するリソースタイプに差異があるので注意してください。

また、グローバルリソースについては、ベーシック・セキュア共に東京リージョンのみの記録となっております。

注意

AWS Configをセキュア設定からベーシック設定に切り戻すと、Security Hubの一部のコントロールが検知できなくなることに注意してください。
Security Hubの結果検出に必要なAWS Configのリソース一覧は下記に記載されております。
コントロール検出結果の生成に必要な AWS Config リソース - AWS Security Hub

オプトイン無効化作業

セキュアアカウント設定の切り戻し作業を行う際は、クラスメソッドメンバーズポータルサイトのセキュア設定をご確認いただき、オプトインが有効化されている場合は無効化していただく必要があります

セキュア設定のオプトインが有効化状態では毎週土曜日にてメンテナンスが入り、セキュア設定の状態が維持(上書き)されるため、無効化する必要がございます。
また、セキュア設定のオプトインが無効の状態でも毎週土曜日のメンテナンスが実施されなくなりますが、設定自体はそのままとなるため手動切り戻し作業を行う必要がございます。

メンバーズポータルサイトから対象のアカウントIDを選択します。

下記画面から、メンバーズサービス設定を選択します。

新しくタブが開かれるので、セキュリティ設定を選択します。

セキュア設定項目にて、「AWS Config」の項目を無効化にて保存します。
ベーシック設定項目にも「AWS Config」がありますが、ベーシック設定とセキュア設定の両方が有効化されている場合、セキュア設定が優先されますのでご注意ください。

切り戻し手順

セキュアアカウント設定になっているConfigはサポートされているすべてのリソースを記録するようになっているため、一部のリソースを記録除外する設定に切り戻しを行います。

切り戻し手順の選択方法

本記事では切り戻し手順をクラスメソッドメンバーズポータル(CMP)から行う方法と、CloudShellから行う方法の二種類ご紹介します。
それぞれのメリットと想定パターンを記載しますので、切り戻し手順の選択の参考にしてください。

[クラスメソッドメンバーズポータル(CMP)から行う方法]

  • ベーシック設定に自動で切り戻しをしたい
  • 切り戻し作業のみなら権限設定が不要(※現在の状態確認をCloudShellで実施する場合は必要)

[CloudShellから行う方法]

  • 東京リージョンは切り戻しを行わないなど、特定のリージョンを切り戻し対象から除外したい
  • ベーシック設定の記録除外リソースに、任意の除外リソースを追加したい

切り戻し作業者に必要なIAM権限

今回の切り戻し作業を行うために、作業者に必要なポリシーは以下となります。

[クラスメソッドメンバーズポータル(CMP)から行う方法]

  • AWS_ConfigRole
  • AWSCloudShellFullAccess

[CloudShellから行う方法]

  • AWS_ConfigRole
  • AWSCloudShellFullAccess

上記のAWSマネージドポリシーに加え、下記の許可を持つカスタムポリシーが必要です。
Resourseの"123456789012"は該当のアカウントIDに置き換えてください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::123456789012:role/cm-config-role-all-regions"
        }
    ]
}

現在のステータスを確認する

CloudShellを開き以下コマンドを入力してください(CloudShellの使い方はこちら)。

  • AWS Configのステータス確認コマンド(全リージョン版)
    AWS Configが有効になっているかを全てのリージョンに対して確認するコマンドは下記です。

    aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
    | while read region; do
    	  echo "##### AWS Config Status in ${region}"
    	  aws --region ${region} configservice describe-configuration-recorder-status
    done

  • AWS Configが記録しているリソースタイプ一覧確認コマンド(全リージョン版)
    AWS Configが記録しているリソースタイプを全てのリージョンに対して確認するコマンドは下記です。

    aws ec2 describe-regions --query "Regions[].[RegionName]" --output text \
    | while read region; do
    	  echo "##### AWS Config Rule in ${region}"
    	  aws --region ${region} configservice describe-configuration-recorders
    done

クラスメソッドメンバーズポータル(CMP)からの切り戻し

メンバーズポータルサイトから対象のアカウントIDを選択します。

下記画面から、メンバーズサービス設定を選択します。

新しくタブが開かれるので、セキュリティ設定を選択します。

ベーシック設定項目にて、「AWS Config」の項目を有効化にし、保存します。
セキュア設定項目にも「AWS Config」がありますが、ベーシック設定とセキュア設定の両方が有効化されている場合、セキュア設定が優先されますのでご注意ください。

翌土曜日に設定が上書きされ、セキュア設定からクラスメソッド基準のベーシック設定(アカウントお渡し時の初期設定)に切り戻されます。

CloudShellからの切り戻し

[手順1]

クラスメソッドメンバーズポータル(以下CMP)の仕様書から、ベーシック設定で記録除外リソースタイプ一覧をそれぞれjsonファイルとしてローカルに作成・保存してください。
作成されるAWSリソース — メンバーズサービス仕様書(※CMPログイン要)
仕様書に記載されているリソース以外で、記録除外リソースタイプを追加したい場合はjsonファイルに追記してください。  

リージョン ファイル名
東京(ap-northeast-1) aws-config-basic_ap-northeast-1.json
バージニア北部(us-east-1) aws-config-basic_us-east-1.json
オレゴン(us-west-2) aws-config-basic_us-west-2.json
その他 aws-config-basic_other-regions.json

[手順2]

該当のAWSアカウントにログインし、切り戻し作業をするロールからCloudShellを開いてください(CloudShellの使い方はこちら)。
CloudShellに[手順1]で作成したファイルを配置します。

[手順3]

各リージョンの現在の設定を確認します。
必要に応じて、出力値を保存しておいてください。

東京リージョン(ap-northeast-1)の確認コマンド

aws configservice describe-configuration-recorders --region ap-northeast-1

バージニア北部リージョン(us-east-1)リージョンの確認コマンド

aws configservice describe-configuration-recorders --region us-east-1

オレゴンリージョン(us-west-2)の確認コマンド

aws configservice describe-configuration-recorders --region us-west-2

その他のリージョンの確認コマンド

declare -a skip_regions=("ap-northeast-1" "us-east-1" "us-west-2")
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
  skip=false

  for skip_region in "${skip_regions[@]}"; do
    if [[ "${region}" == "${skip_region}" ]]; then
      skip=true
      break
    fi
  done

  if [[ "${skip}" == true ]]; then
    echo "##### AWS Config Rule in ${region} Skip"
  else
    echo "##### AWS Config Rule in ${region}"
    aws --region ${region} configservice describe-configuration-recorders
  fi
done

[手順4]

下記のコマンドを順に実行します。
コマンド内の”123456789012”は該当のAWSアカウントのIDに置き換えてください。

東京リージョン(ap-northeast-1)の切り戻しコマンド

aws --region "ap-northeast-1" configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/cm-config-role-all-regions --recording-group file://aws-config-basic_ap-northeast-1.json

バージニア北部リージョン(us-east-1)の切り戻しコマンド

aws --region "us-east-1" configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/cm-config-role-all-regions --recording-group file://aws-config-basic_us-east-1.json

オレゴンリージョン(us-west-2)の切り戻しコマンド

aws --region "us-west-2" configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/cm-config-role-all-regions --recording-group file://aws-config-basic_us-west-2.json

その他のリージョンの切り戻しコマンド

declare -a skip_regions=("ap-northeast-1" "us-east-1" "us-west-2")
for region in $(aws ec2 describe-regions --query "Regions[].RegionName" --output text); do
  skip=false

  for skip_region in "${skip_regions[@]}"; do
    if [[ "${region}" == "${skip_region}" ]]; then
      skip=true
      break
    fi
  done

  if [[ "${skip}" == true ]]; then
    echo "##### AWS Config Restore settings in ${region} Skip"
  else
    echo "##### AWS Config Restore settings in ${region}"
    aws --region ${region} configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::123456789012:role/cm-config-role-all-regions --recording-group file://aws-config-basic_other-regions.json
  fi
done

[手順5]

[手順3]の確認コマンドを実行し、設定が上書きされたことを確認してください。

【おまけ】再度有効化したい場合

クラスメソッドメンバーズポータル(CMP)からセキュア設定を再有効します。 メンバーズポータルサイトから対象のアカウントIDを選択します。

下記画面から、メンバーズサービス設定を選択します。

新しくタブが開かれるので、セキュリティ設定を選択します。

セキュア設定項目にて、「AWS Config」の項目を有効化にし、保存します。
ベーシック設定項目にも「AWS Config」がありますが、ベーシック設定とセキュア設定の両方が有効化されている場合、セキュア設定が優先されますのでご注意ください。