AWS Config でタグ未設定を検出できる「required-tags」でサポートされていないリソースタイプを対象としたカスタムルールを作成してみた

2024.01.24

いわさです。

AWS リソースで頑張ってタグ運用することあると思うのですが、タグの付け忘れの対策を考えねばなりません。
AWS Config ではリソースに指定したタグが付与されているかチェックするマネージドルールが用意されています。

上記ブログの「前提、注意事項」を見て頂きたいのですが、このマネージドルールは便利なのですがサポートされているリソースに限りがあって、全てに対応出来るわけではありません。

ただ、このルールを使おうとするとドキュメントでサポート対象とされている以外のリソースタイプも Config ルールの設定値として追加することが出来ます。
もしかして追加すれば使えるのか?

本日はマネージドルールのrequired-tagsにリソースタイプを追加したり、カスタムポリシーを作ったりしてみたりと、全てのリソースタイプを対象に特定のタグが設定されているかチェックする方法を検証してみましたので紹介します。

required-tags 使う時にリソースタイプの追加は出来るのだが...

まずは普通にマネージドルールrequired-tagsを使ってみましょう。

マネージドルールを追加する際に、次のようにパラメータで対象タグのキーや値を指定することが出来ます。

そして、リソースタイプを指定することも出来ます。
どのリソースタイプが更新された時にルールのチェックを実行するかを指定しています。
デフォルトだと公式ドキュメントに記載されたサポートされているリソースタイプのみが選択されている状態です。

今回はサポート外のリソースタイプのひとつである API Gateway のステージをチェックしたかったので、試しにAWS ApiGateway Stageを追加してみました。

もしかして、これだけでいけたりするのか...!?

まず、EC2 インスタンスについては以下のように正常に検出されました。

API Gateway のステージは...

ダメですね。リソースタイプを追加してみても対応していません。

カスタムルールで対応させた

API Gateway ステージを対象に Config のリソースコンソールから設定項目を確認してみましたが、タグ情報は設定されていますね。
出力さえされていればルール側でどうにでも頑張れそうな雰囲気を感じます。

AWS Config のカスタムポリシーは、現在は CloudFormation Guard 構文でコンソール上でささっと作成することが出来ます。
これを使ってtagsプロパティに特定のキーが設定されているかどうかだけチェックしてやれば良さそうな気がしてきました。

まずは上記の設定項目データを対象にローカルでテストしてみましたが、最低限の実装であればこれだけで良さそうです。
Guard を使用したカスタムルールを作成してみましょう。

ただ、ちょっとこのままだと少し気になっているのが、タグの設定出来ないリソースでも検出されてしまうのではという点です。
一旦これも検証してみたいので、次のようにルールの変更範囲でリロースを選択し、対象リソースタイプにはタグ設定が可能な API Gateway ステージと、タグの設定が出来ない API Gateway REST API を設定してみました。

API Gateway リソースを作成し、ステージをデプロイします。
その時にステージへタグを設定しました。

Config の検出結果を確認してみると、API Gateway のステージが期待どおり検出されました。
良いですね。required-tagsで検出出来なかったリソースタイプも検出出来ました。

一方で、タグに対応していない API Gateway REST API も検出されてしまいました。

ルールに網羅的に対象リソースを記載するのはちょっと大変かなぁと思い、今回はルールの対象リソースタイプでコントロールする方向で考えてみました。
具体的には、required-tagsと同じように検出したいリソースタイプを次のように指定した使い方を前提にしてしまいます。

ここで指定した場合は期待どおり API Gateway REST API でも検出されなくなりました。

さいごに

本日は AWS Config で特定タグの未設定を検出出来る「required-tags」マネージドルールでサポートされていないリソースタイプを対象としたカスタムルールを作成してみました。

対象リソースを全て設定しなければいけないのはいまいちだなぁと思いつつ、required-tags でサポートされていないリソースも特定タグが設定されているかは簡単にチェック出来そうなので、このルールをベースに運用出来るか考えてみたいと思います。