AWSのEC2セキュリティーグループ設定のおすすめ

Amazon Web Services

AWSを安全に利用するにあたってはIAMの管理が大切なことはもちろんですが、EC2インスタンスを活用していくなかで重要なのはセキュリティーグループの設定でしょう

前回、Linuxでiptablesを使って制御する場合の記事を書きましたが、これでは1台1台の設定が必要になりますので「後でちゃんとしよう」と後回しにしていつの間にかそのままになってしまう可能性もあります。
また、コマンドを叩かないと設定が見えないのでサーバーにログインする必要もあり、台数が増えれば増えるほど管理者は煩雑になってきます
そうなってくると「どうせ似たような設定で運用するからコピペでしてしまえ」となると使ってもいないサービスのポートを開放していることによって思わぬ落とし穴に落ちることになるかもしれません

AWSではセキュリティグループという考え方でポートの制御をしてくれます。変更作業が簡単なので是非活用してみてください

おすすめの設定方法は『必要な用途で切り分ける』という方法です
EC2インスタンスの数が少ないときは1台1台にまとめて設定していてもいいですが、増えてくると上述の通り管理が大変になってきますので用途別に細かく分けてしまった方が便利です
最初にちょっと大変な思いをするか、後で頑張り倒すかという違いです

それでは必要な用途で切り分ける考え方と設定です

ポート開放の用途は

・サービス(HTTPやFTPなど)
・接続元(グローバルやローカルなど)

一般的にはこれくらいだと思います

サービスでの用途は

・HTTP(HTTPSも)サーバー
・FTPサーバー
・DB(MySQLやPostgreSQL)サーバー
・MAIL(SMTPやPOP、IMAP)サーバー
・RDP(Windowsサーバーをリモート操作する場合)

接続元の用途は

・グローバル
・ローカル(社内やデータセンター)
・任意(外部業者など)

それではセキュリティグループの追加をしていきます
EC2ダッシュボードを開いて『セキュリティーグループ』をクリック
EC2のセキュリティグループを設定する手順001

『セキュリティーグループの作成』をクリック
EC2のセキュリティグループを設定する手順002

用途を細かく設定していきます
EC2のセキュリティグループを設定する手順003

例)

・SSH_Local_Accept ← SSHへの社内からの接続
・SSH_Other01_Accept ← SSHへの外部委託会社からの接続
・HTTP_Global_Accept ← HTTPへの全開放
・HTTP_Local _Accept ← HTTPへの社内からの接続
・HTTP_Other01_Accept ← HTTPへの外部委託会社からの接続
・HTTPS_Global_Accept ← HTTPSへの全開放
・HTTPS_Local _Accept ← HTTPSへの社内からの接続
・HTTPS_Other01_Accept ← HTTPSへの外部委託会社からの接続
・FTP_Local _Accept ← FTPへの社内からの接続
・FTP_Other01_Accept ← FTPへの外部委託会社からの接続

こんな感じで、グローバル接続しなくていいSSHやFTPなどは設定を最初から入れないようにしておきます
そうすることによって別の担当者が間違って設定してしまうリスクも減らせます
外部委託の会社が固定IPではない場合には全開放で対応しがちですが、その都度変更するなどしてリスクを減らすことも大切だと思います

設定を入れ終わったら、Nameで工夫しましょう
サービスごとに頭に番号をつけるなどすれば並び替えた際に分かりやすくできます
私の場合は3文字で表現しています
頭2文字がサービスによって分類わけ。最後の1文字で接続の種別を判別できるようにしています

最後の1文字が

・0 ← グローバル接続系 注意が必要
・1 ← 社内接続
・2 ← 外部委託先

EC2のセキュリティグループを設定する手順004

こうして作ったセキュリティグループをEC2インスタンスに設定すると
EC2のセキュリティグループを設定する手順005

となり、どのインスタンスに何を許可しているのか、どこから許可しているのかが一目で理解できるようになりますし、接続元IPの変更時や緊急でSSHのポートを全部閉じた方がいい場合などに瞬時に切り替えできるようにもなります