AWS CLIを使用したセキュリティグループの操作~マネコンの操作の制限を超える事例3選~
AWS CLIを使用したセキュリティグループの操作
セキュリティグループはAWSの仮想プライベートクラウド(VPC)内でのネットワークトラフィックのフィルタリングを行うためのツールです。ここでは、AWS CLIを使用してセキュリティグループを操作する方法を示します。
1. 基本操作
利用可能なVPCの一覧を表示:
aws ec2 describe-vpcs --query "Vpcs[*].{ID:VpcId,CidrBlock:CidrBlock,State:State}" --output table
特定のVPCを変数に格納:
上記のコマンドで表示されるVPCの一覧から、特定のVPCのIDを選択して以下のコマンドを実行します。
VPC_ID="ここにコピーしたVPCのIDを貼り付け"
セキュリティグループの作成:
aws ec2 create-security-group --group-name SecurityGroup1 --description "First security group" --vpc-id $VPC_ID
aws ec2 create-security-group --group-name SecurityGroup2 --description "Second security group" --vpc-id $VPC_ID
セキュリティグループの一覧表示:
aws ec2 describe-security-groups --query "SecurityGroups[*].{Name:GroupName,ID:GroupId,Description:Description}" --output table
インバウンドルールの追加:
- SecurityGroup1にすべてのIPからのHTTP (
port 80
) トラフィックを許可:
aws ec2 authorize-security-group-ingress --group-name SecurityGroup1 --protocol tcp --port 80 --cidr 0.0.0.0/0
- SecurityGroup2にすべてのIPからのHTTPS (
port 443
) トラフィックを許可:
aws ec2 authorize-security-group-ingress --group-name SecurityGroup2 --protocol tcp --port 443 --cidr 0.0.0.0/0
- SecurityGroup1とSecurityGroup2に、すべてのIPからのSSH (
port 22
) トラフィックを許可:
aws ec2 authorize-security-group-ingress --group-name SecurityGroup1 --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress --group-name SecurityGroup2 --protocol tcp --port 22 --cidr 0.0.0.0/0
インバウンドルールの一覧表示:
特定のセキュリティグループのインバウンドルールを表示するには、以下のコマンドを使用します。※結果を一時的なファイルにリダイレクトしてから、そのファイルを cat で表示
aws ec2 describe-security-groups --group-names SecurityGroup1 --query "SecurityGroups[*].IpPermissions" --output table > temp_output1.txt
cat temp_output1.txt
aws ec2 describe-security-groups --group-names SecurityGroup2 --query "SecurityGroups[*].IpPermissions" --output table > temp_output2.txt
cat temp_output2.txt
インバウンドルールの削除:
- SecurityGroup1からすべてのIPからのHTTP (
port 80
) トラフィックのルールを削除:
aws ec2 revoke-security-group-ingress --group-name SecurityGroup1 --protocol tcp --port 80 --cidr 0.0.0.0/0
- SecurityGroup2からすべてのIPからのHTTPS (
port 443
) トラフィックのルールを削除:
aws ec2 revoke-security-group-ingress --group-name SecurityGroup2 --protocol tcp --port 443 --cidr 0.0.0.0/0
- SecurityGroup1とSecurityGroup2から、すべてのIPからのSSH (
port 22
) トラフィックのルールを削除:
aws ec2 revoke-security-group-ingress --group-name SecurityGroup1 --protocol tcp --port 22 --cidr 0.0.0.0/0
aws ec2 revoke-security-group-ingress --group-name SecurityGroup2 --protocol tcp --port 22 --cidr 0.0.0.0/0
2. 応用: CLIの特有の操作
2つのセキュリティグループのインバウンドルールの比較
用途: 異なる環境(例: 本番環境とステージング環境)でのセキュリティグループの設定の違いを迅速に確認する際に役立ちます。
メリット: 手動での比較よりも迅速かつ正確に差分を特定できる。
2つのセキュリティグループのインバウンドルールを比較するには、以下の手順を使用します。
- それぞれのセキュリティグループのインバウンドルールをファイルに出力します。
aws ec2 describe-security-groups --group-names SecurityGroup1 --query "SecurityGroups[*].IpPermissions" --output json > sg1_rules.json
aws ec2 describe-security-groups --group-names SecurityGroup2 --query "SecurityGroups[*].IpPermissions" --output json > sg2_rules.json
diff
コマンドを使用して、2つのファイルの差分を比較します。
diff sg1_rules.json sg2_rules.json
この diff
コマンドの結果は、2つのセキュリティグループのインバウンドルール間の違いを示しています。異なる行がコンソールに表示されるため、どのルールが異なるのかを簡単に確認できます。
$ diff sg1_rules.json sg2_rules.json
4c4
< "FromPort": 80,
---
> "FromPort": 22,
13c13
< "ToPort": 80,
---
> "ToPort": 22,
17c17
< "FromPort": 22,
---
> "FromPort": 443,
26c26
< "ToPort": 22,
---
> "ToPort": 443,
セキュリティグループ1(sg1_rules.json)がHTTPとSSHのトラフィックを許可しているのに対し、セキュリティグループ2(sg2_rules.json)がSSHとHTTPSのトラフィックを許可していることを示しています。
複数のセキュリティグループのインバウンドルールを追加
用途: 複数のセキュリティグループに同じルールを迅速に適用する際に役立ちます。
メリット: 一つ一つのセキュリティグループに対してマネジメントコンソールを使って手動でルールを追加するよりも効率的。
以下の手順で複数のセキュリティグループに同時にインバウンドルールを追加できます。
- セキュリティグループの一覧表示:
aws ec2 describe-security-groups --query "SecurityGroups[*].{Name:GroupName,ID:GroupId,Description:Description}" --output table
- 対象となるセキュリティグループIDのリストを作成:※sg-xxxxxxxxxはセキュリティーグループの一覧表示されたIDを入力する。2つでも3つでも4つでも複数sg-xxxxxxxxx追加できる。
SECURITY_GROUPS=("sg-xxxxxxxxx" "sg-xxxxxxxxx")
- 各セキュリティグループにインバウンドルールを追加:
for sg in "${SECURITY_GROUPS[@]}"; do
aws ec2 authorize-security-group-ingress --group-id $sg --protocol tcp --port 80 --cidr 192.168.1.0/24 # HTTP
aws ec2 authorize-security-group-ingress --group-id $sg --protocol tcp --port 443 --cidr 192.168.1.0/24 # HTTPS
aws ec2 authorize-security-group-ingress --group-id $sg --protocol tcp --port 22 --cidr 192.168.1.0/24 # SSH
done
特定のIPアドレスを含むルールの検索
用途: 特定のIPアドレスや範囲を使用しているセキュリティグループを迅速に特定する際に役立ちます。例えば、不審なトラフィックの原因を特定したり、特定のIPアドレスがどのセキュリティグループで許可されているかを調べる際に使用します。
メリット: 複数のセキュリティグループの中から特定のIPアドレスを含むルールを持つものを迅速に検索できる。
特定のIPアドレス(例: '192.168.1.0/24')を含むセキュリティグループのルールを検索する方法を以下に示します。
aws ec2 describe-security-groups --query "SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, '192.168.1.0/24')]].{Name:GroupName,ID:GroupId}"
[
{
"Name": "SecurityGroup1",
"ID": "sg-xxxxxxxxx"
},
{
"Name": "SecurityGroup2",
"ID": "sg-xxxxxxxxx"
}
]
Discussion