AWS Config を使ってTagのチェックを行う。

# はじめに
AWSを運用していていつも悩まされるのはTagの付け忘れです。
時間が経ってしまうと何のインスタンスかいちいちログインして調べないと分からない場合もたまに。。。
そういったTagの付け忘れをいち早く検知するためにAWS Configを使ってみました。


# AWS Configとは
AWSリソースのレポジトリ情報を取得し、リソースの設定履歴、構成変更を管理したり、取得した構成情報を元に、現在のシステムがあるべき状態になっているかを評価することができるサービスです。

## サポートされているリソース
現在、サポートされているリソースは[こちら](https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/resource-config-reference.html#supported-resources)を参照してください。

## 料金
はじめの10ルールまでは「１リージョン、１ヶ月、アクティブなConfig Rule 1つあたり、2.00USD」だそうです。(2018-07-17現在)
料金については日々変動するため正確な費用を知りたい場合は[サービス料金ページ](https://aws.amazon.com/jp/config/pricing/)で確認してください。
また、AWS Configを使うにあたり、追加料金が発生する可能性があるので、細かく費用を気にする場合はその点は注意です。
> ー AWS公式ページより
設定のスナップショットおよび設定履歴ファイルは指定した S3 バケットに送信され、Amazon Simple Notification Service (SNS) によって設定変更通知が送信されます。標準の Amazon S3 および Amazon SNS の料金が適用されます。カスタムルールは AWS Lambda を使用して作成します。標準の AWS Lambda の料金が適用されます。
別途記載がない限り、表示されている料金には VAT、GST、売上税その他取引に対して適用される一切の税金および関税は含まれません。


# 設定
今回利用するルールは [required-tags](https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/required-tags.html)というルールです。
指定したタグがリソースにあるかどうか、もしくは指定した値かどうかの確認を行うことができます。

## ルール追加
まずは **AWS Config** サービスへ移動し、「ルールの追加」をクリックします。
<img width="1250" alt="スクリーンショット 2018-07-15 13.27.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/676a7ec5-4f6e-3e67-fd90-3d9ca5b08310.png">

##### ・ルールの追加
「required-tags」を選択します。
<img width="1057" alt="スクリーンショット 2018-07-15 13.28.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/e12b6020-8639-d693-bd26-1c6a6e9b5281.png">

名前を入力します。(今回はデフォルト)
<img width="1059" alt="スクリーンショット 2018-07-15 13.31.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/034acdcc-3914-426f-a7f6-760f3c37f9e4.png">


##### ・トリガー
変更範囲は「リソース」を選択し、リソースに「EC2:Instance」を選びます。
※ここは必要に応じて対象リソースを調整してください。
<img width="1053" alt="スクリーンショット 2018-07-15 13.31.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/aee38dcf-242c-1474-1ac6-3974230541f9.png">

##### ・ルールのパラメータ
今回は「tag1Key」に「Name」を設定します。
ここでNameタグが付与されているかどうかチェックするよう指定しています。
<img width="1049" alt="スクリーンショット 2018-07-15 13.31.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/5723e393-74a9-8609-2021-eb97044c8782.png">

「保存」をクリックして設定は完了です。
<img width="1050" alt="スクリーンショット 2018-07-15 13.35.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/d8f57003-8581-b23b-3bdb-d4f2f1fcc82c.png">

コンプライアンスが「評価中」から変わったらチェック完了です。


# 結果
コンプライアンスチェックが完了し、準拠していない場合は以下のように表示されます。
ルール名をクリックするとより詳細情報へと移動します。
<img width="1058" alt="スクリーンショット 2018-07-15 22.37.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/4754041e-d10a-bde3-ae67-192aa86dafc6.png">

評価の詳細を見ると1つが「準拠」でもう１つが「非準拠」になっています。
<img width="1046" alt="スクリーンショット 2018-07-15 22.38.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/b6e09a32-c6d2-82d3-8df0-0bae57b4e8a4.png">

EC2サービスへ移動し、非準拠となっているのを確認するとNameタグが付いていないインスタンスでした。
<img width="1061" alt="スクリーンショット 2018-07-15 22.51.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/e710165e-5c44-8ef6-1c1e-8976f2af25cf.png">

次にNameタグを付けて再評価してみます。
適当に値はconfigにしておきます。
<img width="1061" alt="スクリーンショット 2018-07-15 23.20.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/66bcd243-b526-8519-85e9-ad452d7ddc50.png">

設定したら「再評価」をクリックします。ただ、評価したばっかでクリックするとエラーとなる場合があるので時間を置くか「結果の削除」をクリックしてやり直してみてください。
<img width="1040" alt="スクリーンショット 2018-07-15 23.21.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/c3ac6256-dbf2-bc09-01fa-e4823a931709.png">

評価が完了すると先ほど「非準拠」だったのが「準拠」に変わりました
<img width="1020" alt="スクリーンショット 2018-07-16 21.46.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/f6023c45-9e94-b720-0da7-1890454286a8.png">


# Valueの指定
今度はNameタグに「config」という値が設定されているかをチェックします。
まずはルールの編集の鉛筆マークをクリックします。
<img width="1057" alt="スクリーンショット 2018-07-16 21.53.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/30aada3c-c046-a1ee-0a60-2a2373fa4939.png">

「tag1Value」に「config」と入力して「保存」をクリックします。
<img width="802" alt="スクリーンショット 2018-07-16 21.53.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/012123e7-da8c-801e-03a3-b4c48feb73cf.png">

先ほどと同様に「再評価」が完了すると以下のように表示されました。
<img width="1024" alt="スクリーンショット 2018-07-16 21.55.04.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/9f53d5b9-026b-2c5b-3743-59a05fa38dc8.png">

今度は先ほどのインスタンスではなくNameタグに「test」と入力された方が「非準拠」となりました。
先ほどはTagが付与されていない場合のみでしたが、tag1Valueで指定することでNameタグに「config」という値以外を非準拠とすることもできます。

さらに、複数のValueパターンを指定したい場合、カンマ区切りで設定することで可能になります。
<img width="1058" alt="スクリーンショット 2018-07-17 8.56.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/82090/de571786-69c0-a617-ab6f-26b6be86d413.png">

Nameタグでの活躍は低そうですが、サービス単位や部署ごとで分けたい場合などはServicesタグやCategoryタグなどの付与を必須とし、入力値も指定することで呼称なども統一できて良いと思います。


# おわりに
Nameタグを付け忘れたり、スペルミスなどで誤った値を付けてしまっていたら後で気づくのは難しいと思います。
そこで、AWS Configを使ってTag管理することで、インスタンスにNameタグが付いているか、カテゴリ分けができているかをチェックしてくれるので便利です。