aws ec2 describe-security-group-rules とは

aws ec2 describe-security-group-rules は、セキュリティグループに設定されたルールを取得するコマンド。インバウンド・アウトバウンドの両方のルールが1件1エントリとして返るため、マネジメントコンソールのルール一覧をそのままCLIから確認できる。

--filtersgroup-id を指定すると、対象のセキュリティグループに設定された全ルールを取得できる。

$ aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=sg-0123456789abcdef0
{
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-0123456789abcdef0",
            "GroupId": "sg-0123456789abcdef0",
            "GroupOwnerId": "123456789012",
            "IsEgress": true,
            "IpProtocol": "tcp",
            "FromPort": 443,
            "ToPort": 443,
            "CidrIpv4": "0.0.0.0/0",
            "Description": "HTTPS to anywhere",
            "Tags": [],
            "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0123456789abcdef0"
        },
        {
            "SecurityGroupRuleId": "sgr-0aabbccddeeff0011",
            "GroupId": "sg-0123456789abcdef0",
            "GroupOwnerId": "123456789012",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 3306,
            "ToPort": 3306,
            "ReferencedGroupInfo": {
                "GroupId": "sg-0fedcba9876543210",
                "UserId": "123456789012"
            },
            "Description": "MySQL from app servers",
            "Tags": [],
            "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0aabbccddeeff0011"
        },
        {
            "SecurityGroupRuleId": "sgr-0fedcba9876543210",
            "GroupId": "sg-0123456789abcdef0",
            "GroupOwnerId": "123456789012",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 443,
            "ToPort": 443,
            "CidrIpv4": "0.0.0.0/0",
            "Description": "HTTPS from anywhere",
            "Tags": [],
            "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0fedcba9876543210"
        }
    ]
}

IsEgresstrue のルールがアウトバウンド、false のルールがインバウンドである。

主なフィールドの意味

フィールド説明
IsEgressアウトバウンドルールならtrue、インバウンドルールならfalse
IpProtocolプロトコル(tcpudpicmpなど)。全プロトコル許可の場合は-1
FromPort / ToPort許可するポート範囲。ICMPの場合はタイプ・コードが入り、全プロトコル許可(IpProtocol-1)の場合は-1が入る
CidrIpv4 / CidrIpv6送信元・送信先のCIDR
PrefixListId許可対象がプレフィックスリストの場合のID
ReferencedGroupInfo許可対象が他のセキュリティグループの場合、参照先の情報
Descriptionルールに設定された説明文

table形式でインバウンド・アウトバウンドをまとめて確認する

出力全体を確認すると情報量が多いため、--query でプロトコル・ポート・方向だけに絞り込むとルールを一覧しやすい。Direction 列に IsEgress を割り当てておくと、インバウンド・アウトバウンドを一目で判別できる。

$ aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=sg-0123456789abcdef0 \
  --query 'SecurityGroupRules[].{Direction:IsEgress,Protocol:IpProtocol,From:FromPort,To:ToPort,Source:CidrIpv4,Description:Description}' \
  --output table
----------------------------------------------------------------------------------
|                           DescribeSecurityGroupRules                           |
+-------------------------+------------+-------+-----------+------------+--------+
|       Description       | Direction  | From  | Protocol  |  Source    |  To    |
+-------------------------+------------+-------+-----------+------------+--------+
|  HTTPS to anywhere      |  True      |  443  |  tcp      |  0.0.0.0/0 |  443   |
|  MySQL from app servers |  False     |  3306 |  tcp      |  None      |  3306  |
|  HTTPS from anywhere    |  False     |  443  |  tcp      |  0.0.0.0/0 |  443   |
+-------------------------+------------+-------+-----------+------------+--------+

--output table を指定すると表形式で確認できる。列はキー名のアルファベット順で並ぶ点に注意する。送信元が他のセキュリティグループを参照しているルールは CidrIpv4 を持たないため、Source 列が None になる。

インバウンド・アウトバウンドのどちらかに絞り込む

--filtersIsEgress を直接指定するフィルタは無いため、--query で絞り込む。インバウンドのみ確認する場合は IsEgress==`false` を指定する。

$ aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=sg-0123456789abcdef0 \
  --query 'SecurityGroupRules[?IsEgress==`false`]'
[
    {
        "SecurityGroupRuleId": "sgr-0aabbccddeeff0011",
        "GroupId": "sg-0123456789abcdef0",
        "GroupOwnerId": "123456789012",
        "IsEgress": false,
        "IpProtocol": "tcp",
        "FromPort": 3306,
        "ToPort": 3306,
        "ReferencedGroupInfo": {
            "GroupId": "sg-0fedcba9876543210",
            "UserId": "123456789012"
        },
        "Description": "MySQL from app servers",
        "Tags": [],
        "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0aabbccddeeff0011"
    },
    {
        "SecurityGroupRuleId": "sgr-0fedcba9876543210",
        "GroupId": "sg-0123456789abcdef0",
        "GroupOwnerId": "123456789012",
        "IsEgress": false,
        "IpProtocol": "tcp",
        "FromPort": 443,
        "ToPort": 443,
        "CidrIpv4": "0.0.0.0/0",
        "Description": "HTTPS from anywhere",
        "Tags": [],
        "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0fedcba9876543210"
    }
]

アウトバウンドのみ確認する場合は IsEgress==`true` を指定する。

$ aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=sg-0123456789abcdef0 \
  --query 'SecurityGroupRules[?IsEgress==`true`]'
[
    {
        "SecurityGroupRuleId": "sgr-0123456789abcdef0",
        "GroupId": "sg-0123456789abcdef0",
        "GroupOwnerId": "123456789012",
        "IsEgress": true,
        "IpProtocol": "tcp",
        "FromPort": 443,
        "ToPort": 443,
        "CidrIpv4": "0.0.0.0/0",
        "Description": "HTTPS to anywhere",
        "Tags": [],
        "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0123456789abcdef0"
    }
]

送信元・送信先が他のセキュリティグループの場合

送信元(インバウンド)や送信先(アウトバウンド)にIPアドレスではなく別のセキュリティグループを指定しているルールでは、CidrIpv4 の代わりに ReferencedGroupInfo へグループIDが入る。

$ aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=sg-0123456789abcdef0 \
  --query 'SecurityGroupRules[?ReferencedGroupInfo!=null]'
[
    {
        "SecurityGroupRuleId": "sgr-0aabbccddeeff0011",
        "GroupId": "sg-0123456789abcdef0",
        "GroupOwnerId": "123456789012",
        "IsEgress": false,
        "IpProtocol": "tcp",
        "FromPort": 3306,
        "ToPort": 3306,
        "ReferencedGroupInfo": {
            "GroupId": "sg-0fedcba9876543210",
            "UserId": "123456789012"
        },
        "Description": "MySQL from app servers",
        "Tags": [],
        "SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0aabbccddeeff0011"
    }
]

ReferencedGroupInfo.GroupId に参照元のセキュリティグループIDが入る。参照元のセキュリティグループに所属するリソースとの通信が許可されている。

ルールの追加・削除方法は 【AWS CLI】セキュリティグループのルールをCLIで追加・削除する を参照。