AWS CLIで説明付きのルールをセキュリティグループに追加する

2021.06.07

データアナリティクス事業本部の鈴木です。

今回は、AWS CLIから説明付きのルールをセキュリティグループに追加する方法に詳しくなったので、記事を書きました。

背景

AWS CLIとシェルスクリプトを使って、セキュリティグループに既にあるインバウンドルール(で許可するIP)を更新したいことがあり、以下のような方法を考えました。

  1. 更新対象のルールは"説明"に、ある固定の文字列が入っている。
  2. スクリプトは"説明"を手掛かりに、該当するルールを削除する。
  3. スクリプトは新しいルールを新しく作り直す。このとき、"説明"に同じ固定の文字列を入れる。

後で説明するように、"説明"はルールが作られた目的などが後で分かりやすいようにするためのオプション機能です。これを使って、許可するIPを更新するルールがどれか見分けようと思いました。

しかし、3つ目の「CLIで説明を付けてルールを作る方法」が、意外と情報が少なく苦戦したので、本記事でシェアしたいと思います。

先に結論

インバウンドルールは、説明をaws ec2 authorize-security-group-ingressコマンドの--ip-permissionsオプションで指定できる。

aws ec2 authorize-security-group-ingress \
    --group-id sg-xxxxxxxxxxxxxxxxx \
    --ip-permissions IpProtocol=tcp,FromPort=xxxx,ToPort=yyyy,IpRanges='[{CidrIp=x.x.x.x/x,Description="Description"}]'

アウトバウンドルールは、説明をaws ec2 authorize-security-group-egressコマンドで、同様に指定できる。

aws ec2 authorize-security-group-egress \
    --group-id sg-xxxxxxxxxxxxxxxxx \
    --ip-permissions IpProtocol=tcp,FromPort=xxxx,ToPort=yyyy,IpRanges='[{CidrIp=x.x.x.x/x,Description="Description"}]'

セキュリティグループのルールの説明とは?

セキュリティグループのルールには、オプション機能で、後で分かりやすいように説明を追加できます。

例えば、AWSマネジメントコンソールからセキュリティグループのインバウンドルールを確認すると、以下の赤枠の箇所に説明の欄があります。 コンソールから見えるルールの説明

マネジメントコンソールから見られるだけではなく、AWS CLIのaws ec2 describe-security-groupsコマンドでも取得することが可能です。 describe-security-groupsのドキュメントによると、IpRangesキーのバリューとしてルールのDescriptionが入っていることが分かります。

上記ガイドで、記事執筆時点に掲載されているサンプル(「Example 1」のOutput)を引用します。ハイライトした箇所がルールの説明です。

{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ],
                    "UserIdGroupPairs": [],
                    "PrefixListIds": []
                }
            ],
            "Description": "My security group",
            "Tags": [
                {
                    "Value": "SG1",
                    "Key": "Name"
                }
            ],
            "IpPermissions": [
                {
                    "IpProtocol": "-1",
                    "IpRanges": [],
                    "UserIdGroupPairs": [
                        {
                            "UserId": "123456789012",
                            "GroupId": "sg-903004f8"
                        }
                    ],
                    "PrefixListIds": []
                },
                {
                    "PrefixListIds": [],
                    "FromPort": 22,
                    "IpRanges": [
                        {
                            "Description": "Access from NY office",
                            "CidrIp": "203.0.113.0/24"
                        }
                    ],
                    "ToPort": 22,
                    "IpProtocol": "tcp",
                    "UserIdGroupPairs": []
                    }
            ],
            "GroupName": "MySecurityGroup",
            "VpcId": "vpc-1a2b3c4d",
            "OwnerId": "123456789012",
            "GroupId": "sg-903004f8",
        }
    ]
}

今回はこのように説明が設定されたルールを、AWS CLIを使って既存のセキュリティグループに追加したいです。

やり方

ルールにはインバウンドとアウトバウンドがありますが、まずはインバウンドルールに絞って説明します。

インバウンドルールはaws ec2 authorize-security-group-ingressコマンドで作成できますが、--ip-permissions引数で説明を指定することができます。

authorize-security-group-ingressのドキュメントを確認してみます("Examples"セクションの"Add a rule with a description"から引用)。

aws ec2 authorize-security-group-ingress \
    --group-id sg-1234567890abcdef0 \
    --ip-permissions IpProtocol=tcp,FromPort=3389,ToPort=3389,IpRanges='[{CidrIp=203.0.113.0/24,Description="RDP access from NY office"}]'

--ip-permissionsオプションに渡す値のうち、IpRangesに記載すれば、CLIでもルールに説明を付けることができるのが分かります。

やってみる

まず、インバウンドルールの作成から行います。VPC内の適当な範囲からのHTTPS通信を許可するようなインバウンドルールを作成します。ちなみに、FromPortとToPortは許可するポートの範囲のはじめと終わりです。

aws ec2 authorize-security-group-ingress \
    --group-id sg-xxxxxxxxxxxxxxxxx \
    --ip-permissions IpProtocol=tcp,FromPort=433,ToPort=433,IpRanges='[{CidrIp=10.0.0.0/24,Description="This is description"}]'

コマンドを実行してみます。

インバウンドルールの追加

登録できました。

また、インバウンドに比べると頻度が少ないと思いますが、アウトバウンドルールの作成も行っておきます。アウトバウンドルールの作成は、authorize-security-group-egressで行うことができました。同じようにやってみましょう。

aws ec2 authorize-security-group-egress \
    --group-id sg-xxxxxxxxxxxxxxxxx \
    --ip-permissions IpProtocol=-1,FromPort=-1,ToPort=-1,IpRanges='[{CidrIp=0.0.0.0/0,Description="This is description"}]'

アウトバウンドルールの追加

こちらも無事ルールを追加することができました。IpProtocol、FromPortおよびToPortに-1を指定することで、全範囲を指定しています。

最後に

この記事の内容で、CLIから既存のルールの説明を取得したり、新しく説明を付けてルールを作成したりすることができるようになりました。

ルールを個別に見分けるためには、説明がとても役立ちそうなので、皆さんもぜひ使ってみてください!