けこのアプリ開発奮闘記

アプリ開発で得た知見を共有していきます。なるべく文章が堅くならないように意識しています。

【AWS】デフォルトVPCがやばいって話

茶番

翔泳社 AWSではじめるインフラ構築入門』を熟読中...

www.shoeisha.co.jp

けこ「EC2って元からネットワークに繋がってるよね。なんでこの本EC2の前にVPC作ってるの?デフォルトじゃあかんのか」
けこ「(検索中...)」
けこ「あかん、これはあかん。セキュリティガバガバや!(冷や汗)」

AWS EC2の初期設定はやばい

デフォルトのVPC

AWS公式によると...

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/default-vpc.html

デフォルト VPC を作成するとき、Amazon 側で次の設定を行います。

  1. サイズ /16 の IPv4 CIDR ブロック (172.31.0.0/16) の VPC を作成する。これは、最大 65,536 個のプライベート IPv4 アドレスを提供します。
  2. アベイラビリティーゾーンに、サイズ /20 のデフォルトサブネットを作成する。この場合は、サブネットあたり最大 4,096 個のアドレスが作成され、その中のいくつかは Amazon が使用するように予約されています。
  3. インターネットゲートウェイを作成して、デフォルト VPC に接続する。
  4. すべてのトラフィック (0.0.0.0/0) をインターネットゲートウェイにポイントさせるルートをメインルートテーブルに追加します。
  5. デフォルトのセキュリティグループを作成し、デフォルト VPC に関連付ける。
  6. デフォルトのネットワークアクセスコントロールリスト (ACL) を作成し、デフォルト VPC に関連付ける。
  7. デフォルト VPC を備えた AWS アカウントに、デフォルトの DHCP オプションセットを関連付けます。

まぁ3まではいいか...となりました。4が特にやばいです。

デフォルトのセキュリティグループ

インバウンドルールはセキュリティグループID(一意)で同じセキュリティグループのインスタンスのみ全ポートで通信可能 。すべてです、やばいです。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/default-custom-security-groups.html

セキュリティグループが同じ場合でしょ?ダイジョブダイジョブ。と私も思いましたが怪しいパッケージを入れてしまうかもしれませんし、ウイルスが感染したインスタンスがが他のインスタンスにウイルスを送り付ける...なんてシナリオも考えられます。 どの入門書を見ても弊社のインフラ担当マンに聞いてみても、セキュリティルールは最低限に絞るべきと書いています。Webサーバなら80番と443番だけ解放していればいいわけです。

インバウンドルールは最低限にする必要があります。必ずポートを絞りましょう。

アウトバウンドルールは必要な通信までブロックしてしまう可能性があり、十分な検証を行った後で問題ないならブロックしても良いという意見が見受けられました。Webサーバのように不特定多数と通信する場合はオープンで良いですが、DBサーバのような特定のWebサーバとしか通信しないインスタンスなら絞りましょう。

教訓

デフォルトが便利だからって甘んじてはいけない。
便利の裏には脆弱性が潜んでいる、踏み台攻撃に利用されないためにインバウンドルールはしっかり絞ろう。
アウトバウンドルールは場合による。不特定多数と通信する場合は変更なし、IP制限やポート制限をするなら絞るべき。
弊社ではしっかり制限してあります。この間は開発環境とstg環境の権限の差異によってS3からのデータが取れなくて難儀しました…セキュリティって難しいですね。