Firewall Manager で使ってないセキュリティグループを監視

## やりたいこと

SGが増えてきたので整理したい。まずは使ってないSGをリストアップしたい。

## 環境

* AWSアカウントA : Firewall Managerの親、Organizationの親
* AWSアカウントB : Firewall Managerの子、Organizationの子

※ Organizationの親とFirewall Managerの親は別々のAWSアカウントでも構いませんが、Organizationに参加しているアカウントがFirewall Managerの対象になります。
※ AWSアカウントA,BでAWS Configを有効にしておく
※ 両AWSアカウントで既にSGがいくつか作成されている

## シナリオ

* 使ってないSG(リソースにアタッチされてない)のリストアップ
* 同じルールが書かれたSGのリストアップ

アカウントBで「アタッチされてないSG」 or 「同じルールが設定されているSG」を監視しリストアップします。
これらは不要なSGなので見つけたいですよね。自動的なアクションも行えますが今回はやりません。

## 手順

### Firewall Manager の Administrator アカウント登録

AWSのマネコンからFirewall Managerをクリックし、[Get Started]をクリックし、「Administrator account ID」を入力し[Set administrator account]をクリックする。

![スクリーンショット 0002-10-30 10.18.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/2559a31f-5a53-323b-5cf5-6323958d8182.png)

少し待ちます

### Security policy の作成

左メニューの"Security policies"をクリックし、真ん中上辺りのリージョンで[Asia Pacific(Tokyo)]を選択し、右上の[Create policy]をクリック

![スクリーンショット 0002-10-30 10.24.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/7db339c3-e7a5-710f-b4e8-b087b8168cb7.png)

Policy typeは"Security group"にチェックを入れ、Security group policy typeは"Auditing and cleanup of unused and redundant security groups"にチェックを入れ、Regionは東京にし、右下の[Next]をクリックする

"Auditing and cleanup of unused and redundant security groups"は、日本語だと、「未使用および冗長なセキュリティグループの監査とクリーンアップ (AWS組織全体で未使用の冗長なセキュリティグループを見つけて管理します。)」ということで、そのままですが、使ってないSGや同じ内容のSGの検知監査ができます。一旦クリーンアップは置いておきます。今回の目的を果せそうなのでこちらを選択。

![スクリーンショット 0002-10-30 10.49.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f20c1e6c-68ae-7263-795b-8aaa4b04fd50.png)

ポリシーの各値を入力

* ポリシー名：test-policy1
* ポリシールール：2つにチェック
  * ☑Security group within this policy scope must be used by at least one resource
  * ☑Security groups within this policy scope must be unique
* ポリシーアクション:
  * ☑Identify resources that don't comply with the policy rules, but don't auto remediate
  * □Auto remediate any noncompliant resources.

それぞれ日本語だと

* ポリシーリー：2つにチェック
   * ☑このポリシースコープ内のセキュリティグループは、少なくとも1つのリソースで使用する必要があります
     * (リソースにアタッチされてないものを検出したいのでチェックいれます) 
   * ☑このポリシースコープ内のセキュリティグループは一意である必要があります
     * (重複したルールのSGを検出したいのでチェック入れます)
* ポリシー：
   * ☑ポリシールールに準拠していないが自動修復しないリソースを特定する
     * (検出だけしたいのでチェックを入れます)
   * □非準拠のリソースを自動修正します。
     * (今回自動修正しないのでチェックオフ)

※「Auto remediate any noncompliant resources」は、例えばアタッチされてないSGを検知すると自動で削除されます。設定には注意が必要です。

![スクリーンショット 0002-10-30 10.54.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/c45a2f02-4944-3201-bb95-9da3077ab3b4.png)

![スクリーンショット 0002-10-30 10.54.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a8503ce7-a2b4-838d-c012-58f0a8a6f488.png)

Organization配下のアカウント全部を対象にし
Security Groupを対象リソースにし
タグなどでフィルタせず全てのSGを対象にします

![スクリーンショット 0002-10-30 12.55.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/4c742174-84b6-2829-d10e-27d884712bb5.png)

タグ情報は入れずに、次のサマリページもそのままで[Create policy]

### 検出確認

反映されるまで少し待ちます。

作成したSecurity policy(test-policy1)をクリックします。私の環境ではアカウントが4つあったので4つ表示されています。
Statusが"Noncompliant"になってるものが、このポリシールールに引っかかったものがあることを示しています。AWSアカウントBをクリックします。下から2つ目のNoncompliantになってるものです。

![スクリーンショット 0002-10-30 13.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/0fe53c51-db2e-33b8-83fb-e2af7c09bf3d.png)

ルールに引っかかったSGが表示されています。Violation reasonが「SECURITY_GROUP_UNUSED」なので、アタッチされてないSGであることがわかります。

![スクリーンショット 0002-10-30 13.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/0788e5c7-7b38-ea93-d8f3-37dc7798753d.png)

実際このSG IDは、AWSアカウントBに存在しリソースへのアタッチがされていませんでした。

![スクリーンショット 0002-10-30 13.50.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a066281c-096c-f63e-54b7-ddea9705e420.png)

![スクリーンショット 0002-10-30 13.51.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/758c784b-493b-0a3e-2ed8-edd5852c1775.png)

一度ここで表示されたSGは削除します。以後また別のシナリオで試します。

### 新しくSG作って検出確認

* SG1：EC2にアタッチ済。ルールは22ポート許可
* SG2：未アタッチ。ルールは22ポート許可

既にアタッチされているSG1と同じルールのSG2を新しく作成し、アタッチしないでおきます。元のSG1はアタッチされてますが新規作成したSG2はまだアタッチしてないので、期待値としては、"アタッチされていない警告"と"重複したルールであるという警告"がでることです。

先程のSG1がsshで0.0.0.0/0への許可ルールだったので、同じルールでtmp01という名前のSG2を作成

![スクリーンショット 0002-10-30 16.01.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/9334dbfd-b80c-e51e-bbcb-2437cf0820b7.png)

少し待ちます。
結果は以下のように"重複したルールがある警告"である"SECURITY_GROUP_REDUNDANT"のみでした。

![スクリーンショット 0002-10-30 16.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/487ecf14-b64c-6412-6998-03b04172a4c9.png)

ルールの重複がないSG3(tmp02)を作成してみました。アタッチはしません。

![スクリーンショット 0002-10-30 16.29.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/582426a9-e3d9-d5bb-10db-0d2ae953c43b.png)

少し待ちます。
結果は以下のように"アタッチされてない警告"である"SECURITY_GOROUP_UNUSED"が出てます

![スクリーンショット 0002-10-30 16.34.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/44997f0a-1c04-a331-028c-b2592b928139.png)

ルール重複があるSGで、アタッチされてたSG1もデタッチしどちらもデタッチした状態にしてみました。
結果はREDUNDANTのエラーのみで、UNUSEDより優先してREDUNDANTが出ていることがわかります。(どちらのエラーも出てほしい気がする・・)

![スクリーンショット 0002-10-30 16.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/129b469b-4904-2663-4c64-9ea6d053c129.png)

### エラー表示パターン

SGが1つがアタッチされ、もう1つもアタッチされ重複があると
=>redundant。これはわかる

SGが1つがアタッチされ、もう1つがアタッチされてなく重複があると
=>redundant。これはredundantが優先されunusedは出ないような仕様のようです。

重複のないSGでアタッチされてない状態
=>unused。これはわかりやすい

SGがどちらもデタッチ状態で、重複したルールのSGは
=>redundant。これはredundantが優先されunusedは出ないような仕様のようです。


## その他

* SettingsにSNSでの通知設定があるが、細かい設定はなくまだSecurity policyごとに通知はできない
* エラーの内容でどのSGと重複しているなどの情報がほしい
* 重複と未使用のエラーがどちらも該当する場合、重複のエラーが優先され未使用が出ないが、両方でてほしい