[AWS] AWS CLIからセキュリティグループを作る

はじめに

AWSにはセキュリティグループという仮想ファイアウォールの機能があり、VPC内のインスタンスに設定することができます。今回はそのセキュリティグループの概要と、AWS CLIからのセキュリティグループの作成を実践しましょう。

セキュリティグループとは

セキュリティグループとはインスタンスの仮想ファイアウォールとして機能するものであり、インバウンドとアウトバウンドトラフィックを制御します。例えばEC2インスタンスの作成時に、一つのEC2につき最大5つまでのセキュリティグループを適用することができます。

実践・セキュリティグループ

セキュリティグループの挙動を確認するために、適当にAmazon LinuxのEC2を立ち上げます。内容はなんでもOKなのですが、注目する点は「セキュリティグループの設定」の部分です。

上記設定はポート22, 80, 443であれば世界中どこからでもアクセス可能(0.0.0.0/0)にしています。特にポート22(SSH用)は本番環境でこのような設定にはまずしないので注意してください。この内容で作成すると sample-dmz というセキュリティグループが新たに作成されて、ここで作成しているEC2に紐付いている形になります。

この新たに作成されたEC2を以下のように編集します。

# 管理者権限へ
[ec2-user@ip-10-0-54-62 ~]$ sudo -i
# とりあえずアップデート
[root@ip-10-0-54-62 ~]yum update -y
# Webサーバーとしてapacheをインストール
[root@ip-10-0-54-62 ~]yum install httpd -y
# apache起動
[root@ip-10-0-54-62 ~]service httpd start
# Starting httpd:                  [  OK  ]
# 自動再起動をONにしておく
[root@ip-10-0-54-62 ~]chkconfig httpd on
# サンプル用のhtmlを作成
[root@ip-10-0-54-62 ~]cd /var/www/html/
[root@ip-10-0-54-62 html]vim index.html
<html>
<h1>ようこそ!</h1>
</html>

ここまで完成したところで、作成されたEC2のパブリックIPへアクセスすることで、サンプルのHTMLが↓のように表示されるはずです。

インバウンドルールの変更

それでは、今回の sample-dmz セキュリティグループを編集して、ポート80の定義を消しましょう。 そしてすぐに再度、EC2のパブリックIPへアクセスするとどうなるかというと、

レスポンスが返ってこないことが確認できると思います。ここでポイントとなっていることは、セキュリティグループへ加えた変更はすぐに反映されていることです。

アウトバウンドルールの変更

上のインバウンドルールの変更を元に戻して再びアクセスできる状態にしておきます。ここで少し興味深い設定変更をしてみるのですが、セキュリティグループのアウトバウンドルールを削除してみます。アウトバウンドルールはデフォルトですべて許可されているのですが、このルールを削除するとどうなるでしょうか?

削除してからEC2のパブリックIPをアクセスしてみましょう。

何も変化がない(普通にアクセスできる)ことが確認できると思います。これがセキュリティグループの特性の一つであり、ステートフルであると言われている理由です。例えアウトバウンドルールが無くとも、インバウンドルールで許可されていれば、自動的にアウトバウンドルールも許可されます。この場合、インバウンドルールに依存しているので、ステートフルであると言えるわけです。これはサブネットのネットワークACLとは異なる挙動なので注意が必要です

複数セキュリティグループの適用

それでは、一つのEC2に複数のセキュリティグループを適用してみましょう。適当にMySQL用のセキュリティグループでも作ってみます。

既存のEC2に対して「ネットワーキング>セキュリティグループの変更」でセキュリティグループ変更画面を表示します。

そして、適用したいセキュリティグループを選択します。

これを適用後、EC2に関連付けられたセキュリティグループを確認すると、以下のように複数適用されているのが視覚的に確認できます。

AWS CLIからセキュリティグループを作る

セキュリティグループはAWS CLIからも簡単に作成することができます。

セキュリティグループの作成

作成には create-security-group コマンドを使います。レスポンスには作成されたセキュリティグループの group-id が入っています。これは編集をする上でも必要になりますので覚えておきます。

aws ec2 create-security-group --group-name sample-dmz2 --description "Sample DMZ"
# {
#     "GroupId": "sg-cfc91ecf"
# }

 

セキュリティグループの確認

上でできたセキュリティグループの内容を確認してみましょう。 describe-security-groups で確認が可能です。

aws ec2 describe-security-groups --group-id sg-cfc91ecf
# {
#     "SecurityGroups": [
#         {
#             "IpPermissionsEgress": [],
#             "Description": "Sample DMZ",
#             "IpPermissions": [],
#             "GroupName": "sample-dmz2",
#             "OwnerId": "000000000000",
#             "GroupId": "sg-cfc91ecf"
#         }
#     ]
# }

 

もちろんAWS管理コンソール上からも確認が可能です。

セキュリティグループのルール追加

では、セキュリティグループのルールを追加してみましょう。試しにSSHのポート22を許可するルールを追加します。これには authorize-security-group-ingress コマンドを使います。

aws ec2 authorize-security-group-ingress --group-id sg-cfc91ecf --protocol tcp --port 22 --cidr 0.0.0.0/0

実行できているか確認すると↓のようになります。

aws ec2 describe-security-groups --group-id sg-cfc91ecf
# {
#     "SecurityGroups": [
#         {
#             "IpPermissionsEgress": [],
#             "Description": "Sample DMZ",
#             "IpPermissions": [
#                 {
#                     "PrefixListIds": [],
#                     "FromPort": 22,
#                     "IpRanges": [
#                         {
#                             "CidrIp": "0.0.0.0/0"
#                         }
#                     ],
#                     "ToPort": 22,
#                     "IpProtocol": "tcp",
#                     "UserIdGroupPairs": [],
#                     "Ipv6Ranges": []
#                 }
#             ],
#             "GroupName": "sample-dmz2",
#             "OwnerId": "000000000000",
#             "GroupId": "sg-cfc91ecf"
#         }
#     ]
# }

管理コンソール上でも追加されているのが確認できます。

セキュリティグループの削除

作ったセキュリティグループも delete-security-group で簡単に削除可能です。

aws ec2 delete-security-group --group-id sg-cfc91ecf

まとめ

セキュリティグループの挙動について知っておくことはAWSを利用する上で欠かすことができません。役割を理解しつつ、煩雑にならないように管理しつつ、効率的に利用していく必要があります。

APN Consulting Partner
スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。