こんにちは。
middleと申します。
前回に引き続き、壁の話をお送りしたいと思います。
どうぞよろしくお願いいたします。
★今回のお題
セキュリティグループの開けてはいけないポートを開けてしまった時、検知したい
その1 背景〜使用するサービス選択
その2 AWS Configとは ←本日はこちら
その3 カスタムルール作成①
その4 カスタムルール作成②
その5 AWS Config設定〜まとめ
★AWS Configとは
AWS Config は、AWS リソースの設定を評価、監査、審査できるようにするサービスです。Config では、AWS リソースの設定が継続的にモニタリングおよび記録されるため、必要な設定に対する記録された設定の評価を自動的に実行できます。Config を使用すると、AWS リソース間の設定や関連性の変更を確認し、詳細なリソース設定履歴を調べ、社内ガイドラインで指定された設定に対する全体的なコンプライアンスを確認できます。これにより、コンプライアンス監査、セキュリティ分析、変更管理、運用上のトラブルシューティングを簡素化できます。
(公式サイトより引用)
AWSリソースの設定をルールに基づきチェック(評価)してくれるサービスということで、まさに今回のお題にうってつけです。
ルールに則している場合は「準拠」、反対にルールに違反している場合には「非準拠」と評価されます。
そしてそのルールですが、あらかじめAWS側で用意されている「マネージドルール」と、自分で作成する「カスタムルール」の2種類にわかれます。
「セキュリティグループの開けてはいけないポートが開いていない」というルールはマネージドルールとして用意がないので、これをLambdaで作成する必要がある、というわけです。
また、カスタムルールと一口に言っても、フォーマットがありほとんどデフォルトで使えるようなものもあれば、一から書かないといけない場合もあります。
残念ながら今回は後者です。
ただ、githubで参考になりそうなものがいくつか公開されています。
これらを拝見してどうにかすれば、きっとカスタムルールくらいちょちょいのちょいでしょう。
★ルールの流れ
githubで拝見したルールを参考に、こんな感じで考えました。
①
開けていいポート定義
②
削除済みリソース
→ルール適用の対象外にする
③
セキュリティグループ以外のリソース
→ルール適用の対象外にする
④
開いているポート範囲が「すべて」だった場合
→非準拠 ※要検討
⑤
開いているポートが、開けていいポート(①で定義したポート)に該当しなかった場合
→非準拠
⑥
それ以外
→準拠
上記の通り、「開けていいポート」以外が開いていたらNG、というカスタムルールを作ります。
実のところgithubに「開けてはいけないポート」が開いてたらNG、というルールがあったのですが、私のこだわり(後述)でこちらを利用するのはやめたのでした。
②に関しては、参考にしたものがこのように削除済みリソースについての評価を入れていたので、真似です。
(検証はしておらず憶測で恐縮ですが、削除済みリソースも評価されてしまうのではないかと)
④に関しては次回記載します。
★こだわり(余談)
「開けてはいけないポート」と「開けていいポート」の数を比較した場合、圧倒的に前者が多いことが予想されました。
例えば現在80番ポートのみ開けていいとしたら、「開けてはいけないポート」は「0番〜79番」、「81番〜65535番」です。
ここで仮に、「22番ポートも開けてOK」となった場合どうでしょう。
「開けてはいけないポート」は「0番〜21番」、「23番〜79番」、「81番〜65535番」になります。
★開けてはいけないポートの遷移
開けていいポートが「80番」の時
→「0番〜79番」、「81番〜65535番」
開けていいポートが「22番と80番」に変更された時
→「0番〜21番」、「23番〜79番」、「81番〜65535番」
めんどくさい……(私だけでしょうか)
つまり運用(ポート定義)が煩雑? になってしまうという懸念です。
個人的な感覚ですが、「開けていいポート」が「80番」から「22番と80番」になる方が、圧倒的に楽だと思ったわけです。
★開けていいポートの遷移
開けていいポートが「80番」の時
→「80番」
開けていいポートが「22番と80番」に変更された時
→「22番と80番」
言ってしまえば好みです。
★言語選択
AWS Lambdaで関数を書くにあたり、8月8日現在、以下の言語に対応しています。
・Node.js
・Python
・Java
・C#
・Go
Q: AWS Lambda がサポートする言語は何ですか?
AWS Lambda では、Node.js (JavaScript)、Python、Java (Java 8 互換)、C# (.NET Core)、および Go で記述されたコードがサポートされています。ネイティブライブラリも含め、コードには既存のライブラリを含めることができます。詳しくは、Node.js、Python、Java、C#、および Go の使用に関するドキュメントをご覧ください。
(公式サイトより引用)
今回はPythonを選択してみました。
どうせどの言語も未経験なのでこの際何でもOKなのですが、参考にするのがPythonで書かれていたので、こちらでトライです。
一旦以上です。
Lambda関数がどうなったかは次回お送りします。
よろしくお願いいたします。