AWS Config Rulesでグローバルリソースを複数リージョンでチェックするとどうなるか確認してみた

こんにちは、臼田です。

みなさん、コンプライアンスチェックしてますか?(挨拶

今回はAWS Config Rulesを使ってマルチリージョンでグローバルリソースをチェックしたらどうなるか確認してみました。

どゆこと?

AWS Config Rulesはリソースのコンプライアンス状況をチェックして、想定から外れていたら通知してくれるサービスです。ついでに自動的に是正もできます。

例えばセキュリティグループが社内規定より広く公開されていたら自動的に閉じる、などです。

そのような動作は下記を確認してください。

セキュリティグループのSSH全開放をAWS Configで自動修復したら3分くらいで直ったからみんな使ってほしい件

で、Config RulesでチェックするリソースはEC2等のリージョンにあるリソースとIAM等のグローバルリソースの両方を対象にできるのですが、Config Rules自体リージョン毎に有効化しています。

なので、複数のリージョンでIAM等のグローバルリソースをチェックしたら、複数のチェックやアラートがあるのか確かめてみました。

やってみた

今回はバージニアと東京にConfig Rulesを作成してみます。

まず各リージョンでSNSを用意しておきます。通知の確認をするためです。メールで通知を受け取れるようにしておきます。SNS TopicのARNを控えておきます。

続いてアクションで利用するSSM Automation用Roleを作成します。下記を参考にsns:Publishを許可したRoleを作成します。RoleのARNを控えておきます。

SSM Automationを実行するIAM Roleを作成してみた

Config Rulesを作成します。Config Rulesの作成画面に移動してIAMと入力して検索します。今回は簡単にできそうなiam-group-has-users-checkを利用します。これはIAM Groupに1つでもユーザが追加されているかをチェックするルールです。空のグループを許さないということです。検証にもってこいですね。

ルールの作成画面では、上部の設定はそのままに下部の修復アクションを設定していきます。通常だと修復のためのアクションに繋ぎますが、今回はSNS通知までが目的です。アクションをAWS-PublishSNSNotificationにして、自動修復を選びます(非準拠になったら自動的に修復アクション=SNS通知する)。再試行は必要ないですが、最低1にする必要があるので1に。リソースIDパラメータをMessageに入れる必要は無いですが、Messageを考えるのが手間だったので設定しています。通常はIDをAutomationドキュメントに引き継ぐ設定で利用します。あとはAutomationAssumeRoleに先程作成したSSMからSNS通知するためのIAM RoleのARNを入れ、TopicARNにSNS TopicのARNを入力して作成します。

両方のリージョンで作成したら、ユーザが空のIAM Groupを作成します。

すると通知が2件来ました。

ということで、グローバルリソースを複数のリージョンでコンプライアンスチェックすると、通知(アクション)が重複することがわかりました。

ちなみに、今回は対象のリージョンのConfigの設定で、両方とも「グローバルリソース(AWS IAM リソースなど)を含める」にチェックを入れた状態の場合にアクションが重複しましたが、これを1つのリージョンに絞ることにより片方だけになりました。

つまり、グローバルリソースをチェックする場合には元々Configの設定で、グローバルリソースの情報を記録しておく必要があります。

通常ではグローバルリソースを記録するのは1つのリージョンに寄せるため、そのリージョンでのみグローバルリソースをチェックする構成になるでしょう。

まとめ

おそらく重複するかな?という考えはありましたが実際にやってみて動作に確信が持てました。

グローバルリソースをチェックするときはConfigの設定とズレがないように気をつけましょう。