aws ec2 describe-security-group-rules とは
aws ec2 describe-security-group-rules は、セキュリティグループに設定されたルールを取得するコマンド。インバウンド・アウトバウンドの両方のルールが1件1エントリとして返るため、マネジメントコンソールのルール一覧をそのままCLIから確認できる。
--filters に group-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"
}
]
}
IsEgress が true のルールがアウトバウンド、false のルールがインバウンドである。
主なフィールドの意味
| フィールド | 説明 |
|---|---|
| IsEgress | アウトバウンドルールならtrue、インバウンドルールならfalse |
| IpProtocol | プロトコル(tcp、udp、icmpなど)。全プロトコル許可の場合は-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 になる。
インバウンド・アウトバウンドのどちらかに絞り込む
--filters に IsEgress を直接指定するフィルタは無いため、--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で追加・削除する を参照。
