目標
AWS Configを開始し、簡単な動作確認を行う。
AWS Configとは
AWSアカウント内に存在する各種AWSリソース(EC2、EBS、セキュリティグループ、VPCなど)の構成情報を取得し、管理するサービスです。
主要な利用目的としては、以下の2点が挙げられます。
①取得したAWSリソースの構成情報が利用者によって事前定義されたルール(ElasticIPが付与されているか、暗号化ボリュームを利用しているか、必須タグを使用しているか…等)と合致しているかを評価する。
②AWSリソースの構成変更履歴(いつ、どのように作成、変更、削除が行われたか等)を記録する。
より詳しくはAWSドキュメント参考
AWS Config とは
作業の流れ
| 項番 | タイトル |
|---|---|
| 1 | Configを開始する |
| 2 | 動作確認 |
手順
1.Configを開始する
①AWSコンフィグコンソールへ移動し、今から始めるをクリック

②設定
まずはAWS Configで構成情報取得の対象とするAWSリソースを選択します。
今回はデフォルトのこのリージョンでサポートされているすべてのリソースを記録します(AWS Configでサポートされている対象リージョンの全AWSリソースが構成情報管理の対象となります)で設定します(※)。
※補足
グローバルリソース (AWS IAM リソースなど) を含めるを選択すると、IAM ユーザー、グループ、ロール、およびカスタマー管理ポリシーもAWS Configによる構成情報取得の対象となるようです。
またこのリージョンでサポートされているすべてのリソースを記録しますのチェックを外し、特定の型に対象AWSリソースを記載することで、構成情報取得の対象を絞り込むことも可能です(コストパフォーマンスに優れ、かつ注意したいAWSリソースのみに集中出来そうです)
次に取得したAWSリソース構成情報のスナップショット格納先S3バケットを設定します。
今回はバケットの作成を選び、新しくバケット作成をしてみます。
SNSと連携することで、AWSリソースの構成情報に変更があった場合、Eメール等を利用した通知を行うことができます。
今回は新規作成したSNSトピックと連携させてみます。
Amazon SNSトピックへのストリーム設定の変更と通知。
⇒トピックの作成を選択
最後に各種AWSリソースへのアクセス権を付与したIAMロールをAWS Configに付与します。
特に使用したいロールがなければ既存のAWS Configサービスにリンクされたロールを使用でOKかと思います。
終わったら次へを押下
②ルール選択
取得したAWSリソースの構成情報と照合するためのルール(※)を選択します。
ここではサンプルとしてEC2のeip-attached(EIPがEC2インスタンスに付与されているか判定)とencrypted-volumes(アタッチされているEBSボリュームが暗号化されているか判定)を選択
※補足
ルールはAWS Configセットアップ後でもカスタマイズ可能です。
ルールにはAWSがベストプラクティスに基づいて提供する「マネージドルール」(今回選択したのはこれ)と、利用者がカスタム開発する「カスタムルール」(Lambdaと連携して動作するようです)が存在します。
選択したら次へ押下
④Configダッシュボード作成確認
しばらくしたらAWS Configのダッシュボードが作成されました。
正常に結果反映されるまで数分かかりました。

⑤SNS通知のセットアップ
SNSコンソールからトピックを選択し、AWS Configと一緒に作成したSNSトピックをクリック

対象トピックにはまだサブスクリプション(※)がまだ作成されていないので新規作成します。
サブスクリプションの作成をクリック
※サブスクリプション
あるSNSトピックからのメッセージの受け取り手のこと。
httpやEメール等、様々なプロトコルを介してのトピック通知に対応している。

今回はEメールによるSNS通知を利用してみます。
受け取るメールアドレスを入力したら、サブスクリプションの作成をクリック

その後、設定したメールアドレスにメールが来るのでConfirm subscriptionをクリックしメールアドレス認証を完了させれば通知設定完了です。

2.動作確認
①AWSリソース構成情報と定義ルール間の照合機能
非準拠の定義ルールを全て準拠にしてみます。
<初期状態>
非準拠ルール: 2つ(eip-attachedとencrypted-volumesが違反)
非準拠リソース: 3つ(eip-attachedで1つのEIP、encrypted-volumesで2つのEBSボリュームが違反)

※設定ルール内容
eip-attached:EIPがEC2インスタンスに付与されているか判定
encrypted-volumes:アタッチされているEBSボリュームが暗号化されているか判定
<過程>
eip-attached⇒非準拠EIPをEC2に付与して解消を試みる

encrypted-volumes⇒非準拠2ボリュームを暗号化させます(EBSスナップショット取得して暗号化ボリューム作成)。元の非準拠の2ボリュームは削除した
各ルール詳細から再評価実行(定期的に評価は行われるが検証迅速化のため実行)

②AWSリソースの構成変更履歴確認機能
AWS Configでは対象のAWSリソースの作成、変更、削除等が行われた際に、それを構成変更履歴として残します。
試しに、ある1つのセキュリティグループの80番ポートを新たに開けてみたところ、
数分後に変更したセキュリティグループに関するSNSからのメール通知を取得出来ました。

メールのリンクをクリックすると、AWSコンソール上からどのような構成情報の変更がなされたかの詳細を確認可能です。


また、構成情報のスナップショット格納先として指定したS3バケットには各種リソースの構成情報をまとめたログファイルが格納されているのも確認できました(6時間ごとに格納しているらしい)

使い終わったら
構成情報取得が不要になった際はAWS Configコンソールの設定⇒オフにするにして余計な課金を防ぎます。

またAWS CLIを利用することでAWS Configの設定自体を削除することも可能でした(※)。
※参考にしたサイト
AWSマネジメントコンソールから消せないAWS Configの設定をAWSCLIで綺麗にする方法
# AWS Configの設定状況確認
$ aws configservice describe-delivery-channels
{
"DeliveryChannels": [
{
"snsTopicARN": "arn:aws:sns:ap-northeast-1:932699493995:config-topic",
"name": "default",
"s3BucketName": "config-bucket-932699493995"
}
]
}
# AWS Config削除実行
$ aws configservice delete-delivery-channel --delivery-channel-name default
# AWS Config削除確認
$ aws configservice describe-delivery-channels
{
"DeliveryChannels": []
}







