セキュリティグループのルールは authorize-security-group-ingress / authorize-security-group-egress で追加し、revoke-security-group-ingress / revoke-security-group-egress で削除する。現在のルールを確認する方法は 【AWS CLI】セキュリティグループのインバウンド・アウトバウンドルールをCLIで確認する
を参照。
インバウンドルールを追加する
authorize-security-group-ingress の --ip-permissions にプロトコル・ポート・送信元を指定してインバウンドルールを追加する。
$ aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--ip-permissions 'IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges=[{CidrIp=0.0.0.0/0,Description="HTTPS from anywhere"}]'
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0123456789abcdef0",
"GroupId": "sg-0123456789abcdef0",
"GroupOwnerId": "123456789012",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 443,
"ToPort": 443,
"CidrIpv4": "0.0.0.0/0",
"Description": "HTTPS from anywhere",
"SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0123456789abcdef0"
}
]
}
追加したルールの SecurityGroupRuleId がレスポンスに含まれる。このIDは後述のルール削除で使う。
アウトバウンドルールを追加する
アウトバウンドルールは authorize-security-group-egress で追加する。オプションの構文は authorize-security-group-ingress と同じである。
$ aws ec2 authorize-security-group-egress \
--group-id sg-0123456789abcdef0 \
--ip-permissions 'IpProtocol=tcp,FromPort=5432,ToPort=5432,IpRanges=[{CidrIp=10.0.1.0/24,Description="PostgreSQL to db subnet"}]'
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0fedcba9876543210",
"GroupId": "sg-0123456789abcdef0",
"GroupOwnerId": "123456789012",
"IsEgress": true,
"IpProtocol": "tcp",
"FromPort": 5432,
"ToPort": 5432,
"CidrIpv4": "10.0.1.0/24",
"Description": "PostgreSQL to db subnet",
"SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0fedcba9876543210"
}
]
}
送信元・送信先に別のセキュリティグループを指定する
CIDRの代わりに UserIdGroupPairs へ参照先のセキュリティグループIDを指定すると、IPアドレスではなく特定のセキュリティグループに所属するリソースからの通信を許可できる。
$ aws ec2 authorize-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--ip-permissions 'IpProtocol=tcp,FromPort=3306,ToPort=3306,UserIdGroupPairs=[{GroupId=sg-0fedcba9876543210,Description="MySQL from app servers"}]'
{
"Return": true,
"SecurityGroupRules": [
{
"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",
"SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0aabbccddeeff0011"
}
]
}
ルールIDを指定して削除する
ルールを削除するには revoke-security-group-ingress / revoke-security-group-egress を使う。--security-group-rule-ids には describe-security-group-rules
で取得した SecurityGroupRuleId を指定する。プロトコルやポートを指定し直す必要がなく、確実に対象のルールだけを削除できる。
$ aws ec2 revoke-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--security-group-rule-ids sgr-0123456789abcdef0
{
"Return": true,
"RevokedSecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0123456789abcdef0",
"GroupId": "sg-0123456789abcdef0",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 443,
"ToPort": 443,
"CidrIpv4": "0.0.0.0/0",
"Description": "HTTPS from anywhere"
}
]
}
アウトバウンドルールも同様に revoke-security-group-egress へ --security-group-rule-ids を指定して削除する。
$ aws ec2 revoke-security-group-egress \
--group-id sg-0123456789abcdef0 \
--security-group-rule-ids sgr-0fedcba9876543210
{
"Return": true,
"RevokedSecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0fedcba9876543210",
"GroupId": "sg-0123456789abcdef0",
"IsEgress": true,
"IpProtocol": "tcp",
"FromPort": 5432,
"ToPort": 5432,
"CidrIpv4": "10.0.1.0/24",
"Description": "PostgreSQL to db subnet"
}
]
}
プロトコル・ポート・送信元を指定して削除する
ルールIDが分からない場合は --ip-permissions にプロトコル・ポート・送信元を指定して削除できる。セキュリティグループを参照するルールの場合、describe-security-group-rules では ReferencedGroupInfo.GroupId に入っていた値を、revoke-security-group-ingress では UserIdGroupPairs へそのまま指定する。
$ aws ec2 revoke-security-group-ingress \
--group-id sg-0123456789abcdef0 \
--ip-permissions 'IpProtocol=tcp,FromPort=3306,ToPort=3306,UserIdGroupPairs=[{GroupId=sg-0fedcba9876543210}]'
{
"Return": true,
"RevokedSecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0aabbccddeeff0011",
"GroupId": "sg-0123456789abcdef0",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 3306,
"ToPort": 3306,
"ReferencedGroupId": "sg-0fedcba9876543210",
"Description": "MySQL from app servers"
}
]
}
レスポンス中の参照先セキュリティグループのフィールド名は、describe-security-group-rules の ReferencedGroupInfo(オブジェクト)とは異なり ReferencedGroupId(文字列)である点に注意する。
