やりたいこと
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]をクリックする。
少し待ちます
Security policy の作成
左メニューの"Security policies"をクリックし、真ん中上辺りのリージョンで[Asia Pacific(Tokyo)]を選択し、右上の[Create policy]をクリック
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の検知監査ができます。一旦クリーンアップは置いておきます。今回の目的を果せそうなのでこちらを選択。
ポリシーの各値を入力
- ポリシー名: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を検出したいのでチェック入れます)
- ☑このポリシースコープ内のセキュリティグループは、少なくとも1つのリソースで使用する必要があります
- ポリシー:
- ☑ポリシールールに準拠していないが自動修復しないリソースを特定する
- (検出だけしたいのでチェックを入れます)
- □非準拠のリソースを自動修正します。
- (今回自動修正しないのでチェックオフ)
- ☑ポリシールールに準拠していないが自動修復しないリソースを特定する
※「Auto remediate any noncompliant resources」は、例えばアタッチされてないSGを検知すると自動で削除されます。設定には注意が必要です。
Organization配下のアカウント全部を対象にし
Security Groupを対象リソースにし
タグなどでフィルタせず全てのSGを対象にします
タグ情報は入れずに、次のサマリページもそのままで[Create policy]
検出確認
反映されるまで少し待ちます。
作成したSecurity policy(test-policy1)をクリックします。私の環境ではアカウントが4つあったので4つ表示されています。
Statusが"Noncompliant"になってるものが、このポリシールールに引っかかったものがあることを示しています。AWSアカウントBをクリックします。下から2つ目のNoncompliantになってるものです。
ルールに引っかかったSGが表示されています。Violation reasonが「SECURITY_GROUP_UNUSED」なので、アタッチされてないSGであることがわかります。
実際このSG IDは、AWSアカウントBに存在しリソースへのアタッチがされていませんでした。
一度ここで表示されたSGは削除します。以後また別のシナリオで試します。
新しくSG作って検出確認
- SG1:EC2にアタッチ済。ルールは22ポート許可
- SG2:未アタッチ。ルールは22ポート許可
既にアタッチされているSG1と同じルールのSG2を新しく作成し、アタッチしないでおきます。元のSG1はアタッチされてますが新規作成したSG2はまだアタッチしてないので、期待値としては、"アタッチされていない警告"と"重複したルールであるという警告"がでることです。
先程のSG1がsshで0.0.0.0/0への許可ルールだったので、同じルールでtmp01という名前のSG2を作成
少し待ちます。
結果は以下のように"重複したルールがある警告"である"SECURITY_GROUP_REDUNDANT"のみでした。
ルールの重複がないSG3(tmp02)を作成してみました。アタッチはしません。
少し待ちます。
結果は以下のように"アタッチされてない警告"である"SECURITY_GOROUP_UNUSED"が出てます
ルール重複があるSGで、アタッチされてたSG1もデタッチしどちらもデタッチした状態にしてみました。
結果はREDUNDANTのエラーのみで、UNUSEDより優先してREDUNDANTが出ていることがわかります。(どちらのエラーも出てほしい気がする・・)
エラー表示パターン
SGが1つがアタッチされ、もう1つもアタッチされ重複があると
=>redundant。これはわかる
SGが1つがアタッチされ、もう1つがアタッチされてなく重複があると
=>redundant。これはredundantが優先されunusedは出ないような仕様のようです。
重複のないSGでアタッチされてない状態
=>unused。これはわかりやすい
SGがどちらもデタッチ状態で、重複したルールのSGは
=>redundant。これはredundantが優先されunusedは出ないような仕様のようです。
その他
- SettingsにSNSでの通知設定があるが、細かい設定はなくまだSecurity policyごとに通知はできない
- エラーの内容でどのSGと重複しているなどの情報がほしい
- 重複と未使用のエラーがどちらも該当する場合、重複のエラーが優先され未使用が出ないが、両方でてほしい