こんにちは nakada です。
CLIシリーズのpart4です。今回はsecurity groupを操作するコマンドをご紹介します。
目次
環境
$ aws --version aws-cli/1.7.44 Python/2.7.9 Linux/3.14.48-33.39.amzn1.x86_64 $ jq -V jq-1.4
security groupの操作
security groupの作成
security groupの作成には下記コマンドを使用します。 inbound,outboundのルール追加は別のコマンドを使用して設定します。
aws ec2 create-security-group [--dry-run | --no-dry-run] --group-name --description [--vpc-id] [--cli-input-json] [--generate-cli-skeleton]
最初にsecurity groupを作成します。 実行結果
$ aws ec2 create-security-group --group-name test-ssh --vpc-id vpc-xxxxxxxx --descript ion ssh-grp { "GroupId": "sg-xxxxxxxx" }
次に作成したsecuritygrpoupに対して、ルールを追加したり、削除したりします。
inboundルールの追加
inboundルールの追加には次のコマンドを使用します。 aws ec2 authorize-security-group-ingress [--dry-run | --no-dry-run] [--group-name] [--group-id] [--ip-permissions] [--protocol] [--port] [--cidr] [--source-group] [--group-owner] [--cli-input-json] [--generate-cli-skeleton]
さっき作成したsecuritygroupを確認してみます。
$ aws ec2 describe-security-groups |jq -r '.SecurityGroups[] | select(.GroupName == "test-ssh" ) | .GroupId' sg-xxxxxxxx
次の条件を追加していきます。 今回は次の設定を追加します。 ・ssh(22) ・cider 192.168.1.0/24 ・port 22 ・protocol tcp
実行結果
$ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissions' [] $ aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx --cidr 192.168.1.0/24 --port 22 --protocol tcp $ $ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissions' [ { "PrefixListIds": [], "FromPort": 22, "IpRanges": [ { "CidrIp": "192.168.1.0/24" } ], "ToPort": 22, "IpProtocol": "tcp", "UserIdGroupPairs": [] } ]
ルールを追加する場合も同じ
$ aws ec2 authorize-security-group-ingress --group-id sg-xxxxxxxx --cidr 192.168.1.0/24 --port 443 --protocol tcp $ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissions' [ { "PrefixListIds": [], "FromPort": 443, "IpRanges": [ { "CidrIp": "192.168.1.0/24" } ], "ToPort": 443, "IpProtocol": "tcp", "UserIdGroupPairs": [] }, { "PrefixListIds": [], "FromPort": 22, "IpRanges": [ { "CidrIp": "192.168.1.0/24" } ], "ToPort": 22, "IpProtocol": "tcp", "UserIdGroupPairs": [] } ]
outboundルールの追加
使用するコマンド aws ec2 authorize-security-group-egress [--dry-run | --no-dry-run] --group-id [--ip-permissions] [--protocol] [--port] [--cidr] [--source-group] [--group-owner] [--cli-input-json] [--generate-cli-skeleton]
outboundはデフォルトで全通過になっています。 今回は新しいルールを追加したあとにデフォルトのルールを削除してみます。 追加設定 ・cider 0.0.0.0/0 ・port 443 ・protocol tcp
ちなみにコマンドを実行しているEC2インスタンスに割り当てているsecurity groupにて、デフォルトのルール先に削除してしまうと、通信が外に出ていけなくなるので、aws cli コマンドから操作できなくなるので、気を付けてください。
$ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissionsEgress' [ { "IpProtocol": "-1", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "UserIdGroupPairs": [], "PrefixListIds": [] } ] $ aws ec2 authorize-security-group-egress --group-id sg-xxxxxxxx --cidr 0.0.0.0/0 --port 443 --protocol tcp $ aws ec2 revoke-security-group-egress --group-id sg-xxxxxxxx --cidr 0.0.0.0/0 --protocol -1 $ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissionsEgress' [ { "PrefixListIds": [], "FromPort": 443, "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "ToPort": 443, "IpProtocol": "tcp", "UserIdGroupPairs": [] } ] ###全通過設定を追加する場合 $ aws ec2 authorize-security-group-egress --group-id sg-xxxxxxxx --cidr 0.0.0.0/0 --protocol -1 $ aws ec2 describe-security-groups --filters "Name=group-name,Values=test-ssh" | jq '.SecurityGroups[].IpPermissionsEgress' [ { "PrefixListIds": [], "FromPort": 443, "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "ToPort": 443, "IpProtocol": "tcp", "UserIdGroupPairs": [] }, { "IpProtocol": "-1", "IpRanges": [ { "CidrIp": "0.0.0.0/0" } ], "UserIdGroupPairs": [], "PrefixListIds": [] } ]
ルールの削除
追加したルールを削除したい場合は 次のコマンドを使用する。 ・inbound の場合 aws ec2 revoke-security-group-ingress [--dry-run | --no-dry-run] [--group-name] [--group-id] [--ip-permissions] [--protocol] [--port] [--cidr] [--source-group] [--group-owner] [--cli-input-json] [--generate-cli-skeleton] ・outbundの場合 aws ec2 revoke-security-group-egress [--dry-run | --no-dry-run] [--group-name] [--group-id>] [--ip-permissions] [--protocol] [--port] [--cidr] [--source-group] [--group-owner] [--cli-input-json] [--generate-cli-skeleton]
実行してみます。 ciderやprotocolをちゃんと指定します。
$ aws ec2 revoke-security-group-ingress --group-id sg-xxxxxxxx --cidr 192.168.1.0/24 --protocol tcp --port 443 $ aws ec2 revoke-security-group-egress --group-id sg-xxxxxxxx --cidr 0.0.0.0/0 --protocol tcp --port 443
今回はsecurity groupについてご紹介しました。