insightwatchのセキュリティチェックでオールグリーンを目指す(その4: CISベンチマーク最終回 ネットワーク編)

2019.08.13

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

オペレーション部 江口です。 このところ「insightwatchのセキュリティチェックでオールグリーンを目指す」という取り組みをずっとやっています。 今回でシリーズの第4回です。

第1回:

insightwatchのセキュリティチェックでオールグリーンを目指す(その1: CISベンチマーク IAM設定編)

第2回:

insightwatchのセキュリティチェックでオールグリーンを目指す(その2: CISベンチマーク ロギング編)

第3回:

insightwatchのセキュリティチェックでオールグリーンを目指す(その3: CISベンチマーク モニタリング編)

ここまでCISベンチマークの対処に取り組み、前回までで「CIS 3. Monitoring」までの対処を完了しています。 CISの残りは「4. Networking」だけとなりました。ゴールが近いですね!

最初のチェック結果

対処前のCIS 4. Networkingのチェック結果は下記の通りです。見ての通り項目は4つのみ、指摘も4.3と4.4の2つだけでした。

以下、指摘事項への対処です。

CIS 4.3 defaultセキュリティグループが全ての通信を許可していないこと

defaultセキュリティグループにはルールを設定しない、というポリシーです。 それでは利用できないではないか、と思うかもしれませんが、そもそもdefaultセキュリティグループは利用すべきではなく、必要な通信を許可したセキュリティグループをそれぞれ設定すべき、という考えのようです。間違ってdefaultセキュリティグループをアタッチしてしまった時に意図しない通信が行われないよう、ルールを削除して通信全拒否の状態にしておきましょう、ということですね。

さて、問題は全リージョンのdefaultセキュリティグループでインバウンドのルールが標準で設定されていたということです。おかげで修正が必要な場所としてがっつり全リージョンが出てきました・・・

ということで、全リージョンのdefaultセキュリティグループのルールをがっつり消すPythonスクリプトを作成して一気に削除しました。 容赦なくインバウンド/アウトバウンドの全ルールを削除するので、実行する時はくれぐれもどこかのEC2インスタンスにアタッチされていないか確認をお願いします。

#!/usr/local/bin/python3

import boto3
import json

target_group_name = 'default' #設定を変更するセキュリティグループ

#リージョン情報取得
def get_region_list():
    client = boto3.client('ec2')
    return [region['RegionName'] for region in client.describe_regions()['Regions']]

#ルール削除処理
def delete_default_sg_rules(region):
  ec2 = boto3.client('ec2', region_name=region)
  #セキュリティグループの情報の取得
  sgs = ec2.describe_security_groups()['SecurityGroups'] 
  #上記で取得したデータから、ターゲットのセキュリティグループの情報をフィルタ
  sgs = list(filter(lambda sgs: sgs['GroupName'] == target_group_name, sgs))[0] 
  ingress_rules = (sgs['IpPermissions']) #インバウンドルールの情報
  egress_rules = (sgs['IpPermissionsEgress']) #アウトバウンドルールの情報

  #インバウンドルールの削除
  for rule in ingress_rules:
    response = ec2.revoke_security_group_ingress(
      GroupId=sgs['GroupId'],
      GroupName=sgs['GroupName'],
      IpPermissions=[rule]
    )

  #アウトバウンドルールの削除
  for rule in egress_rules:
    response = ec2.revoke_security_group_egress(
      GroupId=sgs['GroupId'],
      IpPermissions=[rule]
    )

# main
if __name__ == "__main__":
  regions = get_region_list()
  for region in regions:
      print(region)
      delete_default_sg_rules(region)

CIS 4.4 必要最低限のVPCピアリング用のルーティングを追加すること

VPCピアリングを設定した際、最低限の通信のみ許可するように(例えば不要なサブネットやホストの通信は拒否するように)ルーティングを設定しましょう、というポリシーです。 この項目は、ユーザが自分で確認・評価を行って評価結果を登録する「マニュアル評価項目」となっています。

マニュアル評価項目: https://insightwatch.zendesk.com/hc/ja/articles/360021813891

この環境ではVPCピアリング自体を行なっていないので、このポリシーは該当しません。念の為ルートテーブルに余計なポリシーが含まれていないかを確認した後、「評価済み」ということで登録を実施しました。

これで、次回のチェック時はこの項目は「正常」として評価されます。

ここまでの結果

ここまでの結果で、CISベンチマークの指摘事項はなくなり、チェック結果の画面で「異常は検出されませんでした」というメッセージを見ることができました!

というわけでCISベンチマークへの対処は今回で完了となります。 しかしinsightwatchでチェックできるのは、このCISベンチマーク以外にも「AWS Checklist」と「IAM Best Practice」があります。 それらでまだ「重要」の指摘が14残っている状態となっています。

引き続きこれらの対処を行なっていこうと思います。

以上、「insightwatchのセキュリティチェックでオールグリーンを目指す」シリーズの第4回でした。