AWS Configの高度なクエリのサンプルSQLで使えそうな物を調べてみた

AWS Configの高度なクエリ機能についてくるサンプルSQLから使えそうなものを抜粋して紹介してみました。どんな事ができるの?って雰囲気が知りたい方向けです。
2019.03.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

先日AWS Configで高度なクエリを発行する機能が追加されました。概要や使い方は下記をご参照ください。

[新機能]AWS Configに現在のリソース設定をSQLで取得できる高度なクエリ機能が追加されました

この機能により、普段データが確認しづらいAWS Configの活用が捗ります。

リリースと合わせてサンプルSQLが提供されていたので、どのようなものがあるのか調べてみました。どんな事ができるの?って雰囲気が知りたい方向けに主要なものを抜粋していきます。

サンプルSQLを抜粋

個人的に面白いと感じたり、有用そうだと思ったものを抜粋していきます。

SecurityGroupの関連リソース取得

List all resources that are related to security group "sg-12345"というサンプルSQLでは指定したIDのSecurityGroupが紐付いているリソースの一覧が表示されます。

クエリは下記の内容です。

SELECT
    resourceId,
    resourceName,
    resourceType,
    relationships
WHERE
    relationships.resourceId = 'sg-12345'

WHERE句のsg-idを任意のものに変更して実行すると確認できます。実際の結果は下記のようになります。

ここで私が役に立つと思ったのは複数のリソースタイプにまたがってリスト化できるところです。

例えばSecurityGroupを削除しようと思ったとき、関連付けしているリソースがないかを確認しますが、だいたいEC2とかだけ確認して他は忘れがちです。

上記クエリ結果で見れるようにENIやLaunchConfigなど、関連するものを一覧で取得できるので、確認漏れを防ぐことが可能です。

ちなみに、このクエリ実はSecurityGroup以外のリソースIDでも同じようにクエリできるので、環境が複雑なときに削除前にこれを実行するのは有用だと思います。

指定期間に作成されたIAM Userの取得

List all IAM users created between date "2018-12-01T00:00" and date "2019-02-28T00:00"というサンプルSQLでは指定した期間に作成されたIAM Userの一覧が取得できます。

クエリは下記の内容です。

SELECT
    resourceName,
    resourceId,
    resourceType,
    resourceCreationTime
WHERE
    resourceType = 'AWS::IAM::User'
    AND resourceCreationTime BETWEEN '2018-12-01T00:00'
    AND '2019-02-28T00:00'

これは文字通りの機能であんまり必要性を感じないかもしれませんが、resourceType = 'AWS::IAM::User' ANDを削除することにより期間中に作成された各種リソース一覧を取得できます。

これも従来だとCloudTrailを頑張ってコンソール上で探していたり、Athenaで確認しました。前者は様々なCloudTrailの管理画面で複数リソースタイプを跨いでフィルターしたりすることができず、Athenaでは準備に時間がかかったり、クエリ範囲によっては結構な料金がかかりました。

AWS Configの高度なクエリ機能は追加料金無しで利用できるため、より簡単に安くなった形です。

EC2のインスタンスタイプ毎のカウント

Count EC2 instances, group by instance typeというサンプルSQLではインスタンスタイプ毎の台数の一覧が取得できます。

クエリは下記の内容です。

SELECT
    configuration.instanceType,
    COUNT(*)
WHERE
    resourceType = 'AWS::EC2::Instance'
GROUP BY
    configuration.instanceType

これは単純にCOUNTで様々な集計を取ることができるのが有用です。EC2ではインスタンスタイプ以外にAMI ID、VPC、Subnet毎に出せたりします。

他にも集計関数としてはAVGMAXMINSUMが使えるとのことで夢が広がりますね。

まとめ

AWS Configの高度なクエリ機能についてくるサンプルSQLを抜粋してみました。なんとなくどんなことができるかはわかったかなーと思います。

すっごい地味ですけど、地味に嬉しい感じですね。

今までマネジメントコンソールで確認しづらかった複数のリソースに跨った情報取得などにはいいと思いますので、是非活用してみてはいかがでしょうか?