コマンドラインからの操作-AWS CLI -part4 securitygroup

こんにちは 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についてご紹介しました。