AWS CLI でセキュリティグループを設定するときは、create-security-group で作成し、authorize-security-group-ingress でインバウンドルールを追加、describe-security-group-rules で確認、revoke-security-group-ingress で削除します。 ルールの中身だけを書き換えたいときは modify-security-group-rules が使えます。

この記事では、作成からグループ削除までの一連の流れを、実際に実行した出力つきで順番にたどります。短い書き方(--protocol --port --cidr)と --ip-permissions の JSON 書式の対応、用途別のコピペ用コマンド表、0.0.0.0/0 で開いているルールを探す --query、エラー文と直し方まで1ページにまとめました。

確認環境:Ubuntu 24.04、AWS CLI 1.46.1。AWS の API をローカルで再現するツール(moto 5.2.3)で実行しています。掲載するコマンドは、実際の AWS でそのまま使える形で書いています。

セキュリティグループ操作の早見表

やりたいこと コマンド 要点
グループを作る aws ec2 create-security-group --group-name 名前 --description 説明 --vpc-id VPC 返ってくる GroupId を以後の操作で使う
インバウンドを追加 aws ec2 authorize-security-group-ingress --group-id SG --protocol tcp --port 443 --cidr 0.0.0.0/0 説明や IPv6 を付けるなら --ip-permissions
アウトバウンドを追加 aws ec2 authorize-security-group-egress ... 引数の形は ingress と同じ
ルールを一覧で確認 aws ec2 describe-security-group-rules --filters Name=group-id,Values=SG 1ルール1行。ルール ID(sgr-…)がわかる
グループ単位で確認 aws ec2 describe-security-groups --group-ids SG IpPermissions にポートごとにまとまる
ルールを書き換える aws ec2 modify-security-group-rules --group-id SG --security-group-rules ... ルール ID を指定して中身を置き換える
インバウンドを削除 aws ec2 revoke-security-group-ingress --group-id SG --security-group-rule-ids sgr-… 追加時と同じ引数でも消せる
アウトバウンドを削除 aws ec2 revoke-security-group-egress ... 既定の「全許可」を外すときにも使う
グループを削除 aws ec2 delete-security-group --group-id SG 使用中・参照中のものは先に外す

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「AWS CLIでセキュリティグループ設定|ルール追加・削除・確認」

セキュリティグループのルールの基本

セキュリティグループは、インスタンスなどに出入りする通信を「許可するルール」の集まりです。公式ドキュメントで確認できる基本は次のとおりです。

項目 内容
書けるルール 許可のみ(拒否ルールは書けない)
作成直後のインバウンド ルールなし(何も入ってこられない)
作成直後のアウトバウンド すべての通信を許可するルールが1つ
ルールの構成 プロトコル、ポート範囲、送信元(または宛先)、説明(任意・255文字まで)
送信元に書けるもの IPv4/IPv6 の CIDR、別のセキュリティグループの ID、プレフィックスリストの ID
反映 ルールを変えると、そのグループを付けているリソースすべてに自動で反映

作成からグループ削除までを通しで実行する

1. セキュリティグループを作る

VPC の ID を変数に入れてから作成します。--query で GroupId だけを受け取っておくと、次のコマンドにつなげやすくなります。

VPC_ID=vpc-2ca69521e9cd280bc   # 自分の VPC の ID に置き換える

aws ec2 create-security-group \
  --group-name web-sg \
  --description "web server" \
  --vpc-id $VPC_ID \
  --tag-specifications 'ResourceType=security-group,Tags=[{Key=Name,Value=web-sg}]' \
  --query '{GroupId:GroupId}'
{
    "GroupId": "sg-0013fdefaf448453b"
}

名前から ID を引き直したいときは、--filters で VPC と名前を指定します。

SG_ID=$(aws ec2 describe-security-groups \
  --filters Name=vpc-id,Values=$VPC_ID Name=group-name,Values=web-sg \
  --query 'SecurityGroups[0].GroupId' --output text)
echo $SG_ID
sg-0013fdefaf448453b

作成直後の状態を見ると、インバウンドは空、アウトバウンドは全許可(プロトコル -1、宛先 0.0.0.0/0) になっています。

aws ec2 describe-security-groups --group-ids $SG_ID \
  --query 'SecurityGroups[0].{In:IpPermissions,Out:IpPermissionsEgress[].[IpProtocol,IpRanges[0].CidrIp]}'
{
    "In": [],
    "Out": [
        [
            "-1",
            "0.0.0.0/0"
        ]
    ]
}

2. インバウンドルールを追加する(短い書き方)

もっとも短い形は --protocol・--port・--cidr の3つです。HTTPS(443番)をどこからでも受け付ける例です。

aws ec2 authorize-security-group-ingress \
  --group-id $SG_ID --protocol tcp --port 443 --cidr 0.0.0.0/0
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-d957b8e8c2c50072b",
            "GroupId": "sg-0013fdefaf448453b",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 443,
            "ToPort": 443,
            "CidrIpv4": "0.0.0.0/0",
            "Tags": []
        }
    ]
}

追加されたルールには sgr- で始まるルール ID が付きます。 変更や削除でこの ID を使うので、控えておくと便利です。公式リファレンスの出力例には、このほか GroupOwnerId(所有アカウントの ID)なども載っています。

3. JSON 書式(--ip-permissions)で追加する

説明(Description)を付けたい、IPv6 を書きたい、複数のルールを一度に入れたい、というときは --ip-permissions を使います。SSH(22番)を特定の IP アドレスだけに許可し、説明を付ける例です。

aws ec2 authorize-security-group-ingress --group-id $SG_ID \
  --ip-permissions '[{"IpProtocol":"tcp","FromPort":22,"ToPort":22,"IpRanges":[{"CidrIp":"203.0.113.10/32","Description":"office"}]}]' \
  --query 'SecurityGroupRules[].[SecurityGroupRuleId,IpProtocol,FromPort,CidrIpv4,Description]' --output text
sgr-6f1ac7dfaf7b0b70f   tcp 22  203.0.113.10/32 office

同じ内容を、AWS CLI の省略記法(キー=値をカンマでつなぐ形)でも書けます。引用符が少なく、1行で書きやすい形です。

aws ec2 authorize-security-group-ingress --group-id $SG_ID \
  --ip-permissions 'IpProtocol=tcp,FromPort=80,ToPort=80,IpRanges=[{CidrIp=0.0.0.0/0,Description=http}]' \
  --query 'SecurityGroupRules[].[SecurityGroupRuleId,IpProtocol,FromPort,CidrIpv4,Description]' --output text
sgr-abf7a1a2766d640b5   tcp 80  0.0.0.0/0   http

ルールが増えてきたら、JSON をファイルに書いて file:// で渡すと読みやすくなります。次のファイルは、8080番を2つのサブネットから、443番を IPv6 の全アドレスから許可します。

[
  {
    "IpProtocol": "tcp", "FromPort": 8080, "ToPort": 8080,
    "IpRanges": [
      {"CidrIp": "10.0.1.0/24", "Description": "app-a"},
      {"CidrIp": "10.0.2.0/24", "Description": "app-b"}
    ]
  },
  {
    "IpProtocol": "tcp", "FromPort": 443, "ToPort": 443,
    "Ipv6Ranges": [{"CidrIpv6": "::/0", "Description": "https-v6"}]
  }
]
aws ec2 authorize-security-group-ingress --group-id $SG_ID \
  --ip-permissions file://rules.json

短い書き方と JSON 書式の対応

短い書き方 --ip-permissions のキー 補足
--protocol tcp IpProtocol tcp / udp / icmp。すべてのプロトコルは -1
--port 443 FromPort と ToPort に同じ値 単一ポート
--port 8000-8080 FromPort=8000、ToPort=8080 範囲
--cidr 203.0.113.10/32 IpRanges=[{CidrIp=...}] IPv4
(短い書き方なし) Ipv6Ranges=[{CidrIpv6=...}] IPv6
--source-group sg-… UserIdGroupPairs=[{GroupId=...}] 別グループ参照
(短い書き方なし) 各要素の Description ルールの説明

説明なしの IPv4 ルールを1本だけ入れるなら短い書き方、それ以外は --ip-permissions、と使い分けると迷いません。

4. ルールを確認する

describe-security-group-rules は1ルールを1行で返します。--query で列を選び、--output table で表にします。

aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=$SG_ID \
  --query 'SecurityGroupRules[].[SecurityGroupRuleId,IsEgress,IpProtocol,FromPort,ToPort,CidrIpv4||CidrIpv6,Description]' \
  --output table
------------------------------------------------------------------------------------------
|                               DescribeSecurityGroupRules                               |
+------------------------+--------+------+-------+-------+------------------+------------+
|  sgr-278ea1fa215d3e0e7 |  True  |  -1  |  -1   |  -1   |  0.0.0.0/0       |  None      |
|  sgr-d957b8e8c2c50072b |  False |  tcp |  443  |  443  |  0.0.0.0/0       |  None      |
|  sgr-6f1ac7dfaf7b0b70f |  False |  tcp |  22   |  22   |  203.0.113.10/32 |  office    |
|  sgr-abf7a1a2766d640b5 |  False |  tcp |  80   |  80   |  0.0.0.0/0       |  http      |
|  sgr-8a7857b8e4b4f3e98 |  False |  tcp |  8080 |  8080 |  10.0.1.0/24     |  app-a     |
|  sgr-88e61dd4ddeb63ccb |  False |  tcp |  8080 |  8080 |  10.0.2.0/24     |  app-b     |
|  sgr-ba1693f3d6ac0c5b7 |  False |  tcp |  443  |  443  |  ::/0            |  https-v6  |
+------------------------+--------+------+-------+-------+------------------+------------+

2列目の IsEgress が True の行がアウトバウンド、False の行がインバウンドです。CidrIpv4||CidrIpv6 は「IPv4 がなければ IPv6 を表示する」という JMESPath の書き方です。

インバウンドだけに絞るときは、?!IsEgress で条件を付けます。

aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=$SG_ID \
  --query 'SecurityGroupRules[?!IsEgress].[FromPort,ToPort,IpProtocol,CidrIpv4||CidrIpv6]' --output text
443 443 tcp 0.0.0.0/0
22  22  tcp 203.0.113.10/32
80  80  tcp 0.0.0.0/0
8080    8080    tcp 10.0.1.0/24
8080    8080    tcp 10.0.2.0/24
443 443 tcp ::/0

一方、describe-security-groups は 同じプロトコル・ポートのルールを1つの要素にまとめて 返します。443番を取り出すと、IPv4 と IPv6 が同じ要素に入っているのがわかります。

aws ec2 describe-security-groups --group-ids $SG_ID \
  --query 'SecurityGroups[0].IpPermissions[?FromPort==`443`]'
[
    {
        "IpProtocol": "tcp",
        "FromPort": 443,
        "ToPort": 443,
        "UserIdGroupPairs": [],
        "IpRanges": [
            {
                "CidrIp": "0.0.0.0/0"
            }
        ],
        "Ipv6Ranges": [
            {
                "Description": "https-v6",
                "CidrIpv6": "::/0"
            }
        ],
        "PrefixListIds": []
    }
]
コマンド 返る形 向いている場面
describe-security-group-rules 1ルール1件(ルール ID つき) 一覧表、変更・削除の対象探し
describe-security-groups ポートごとにまとめた IpPermissions グループ全体の把握、--ip-permissions の元データとして再利用

5. ルールを変更する(modify-security-group-rules)

送信元の IP アドレスが変わった、説明を直したい、というときは、ルール ID を指定して中身を置き換えます。まず22番のルール ID を取り出します。

RULE_ID=$(aws ec2 describe-security-group-rules \
  --filters Name=group-id,Values=$SG_ID \
  --query 'SecurityGroupRules[?FromPort==`22`].SecurityGroupRuleId' --output text)
echo $RULE_ID
sgr-6f1ac7dfaf7b0b70f

送信元を 198.51.100.0/24 に、説明を new-office に書き換えます。

aws ec2 modify-security-group-rules --group-id $SG_ID \
  --security-group-rules "SecurityGroupRuleId=$RULE_ID,SecurityGroupRule={IpProtocol=tcp,FromPort=22,ToPort=22,CidrIpv4=198.51.100.0/24,Description=new-office}"
{
    "Return": true
}
aws ec2 describe-security-group-rules --security-group-rule-ids $RULE_ID \
  --query 'SecurityGroupRules[].[SecurityGroupRuleId,FromPort,ToPort,CidrIpv4,Description]' --output text
sgr-6f1ac7dfaf7b0b70f   22  22  198.51.100.0/24 new-office

ルール ID はそのままで、送信元と説明だけが変わりました。 SecurityGroupRule には、変えない項目(プロトコルやポート)も含めて、変更後の姿をまるごと書きます。

6. ルールを削除する(revoke)

削除の指定方法は3つあります。どれも成功すると Return が true で返ります。

# (a) 追加したときと同じ引数で消す
aws ec2 revoke-security-group-ingress --group-id $SG_ID \
  --protocol tcp --port 80 --cidr 0.0.0.0/0 --query Return

# (b) ルール ID で消す
aws ec2 revoke-security-group-ingress --group-id $SG_ID \
  --security-group-rule-ids $RULE_ID --query Return

# (c) 追加に使った JSON ファイルで消す
aws ec2 revoke-security-group-ingress --group-id $SG_ID \
  --ip-permissions file://rules.json --query Return
true
true
true

削除後の一覧です。443番(IPv4)のインバウンドと、既定のアウトバウンドだけが残りました。

----------------------------------------------------------------------
|                     DescribeSecurityGroupRules                     |
+------------------------+--------+------+------+------+-------------+
|  sgr-278ea1fa215d3e0e7 |  True  |  -1  |  -1  |  -1  |  0.0.0.0/0  |
|  sgr-d957b8e8c2c50072b |  False |  tcp |  443 |  443 |  0.0.0.0/0  |
+------------------------+--------+------+------+------+-------------+
指定方法 向いている場面
同じ引数(--protocol など) 追加コマンドが手元に残っているとき
ルール ID 一覧から選んで確実に1本だけ消したいとき
JSON ファイル まとめて追加したルールを、まとめて戻したいとき

7. アウトバウンドを絞る

アウトバウンドも同じ形で操作できます。既定の全許可を外し、443番だけを許可する例です。

# 既定の全許可を外す
aws ec2 revoke-security-group-egress --group-id $SG_ID \
  --ip-permissions 'IpProtocol=-1,IpRanges=[{CidrIp=0.0.0.0/0}]' --query Return

# 443 番だけを許可する
aws ec2 authorize-security-group-egress --group-id $SG_ID \
  --protocol tcp --port 443 --cidr 0.0.0.0/0 \
  --query 'SecurityGroupRules[].[SecurityGroupRuleId,IsEgress,IpProtocol,FromPort,CidrIpv4]' --output text
true
sgr-9192bf939f202b85d   True    tcp 443 0.0.0.0/0

8. セキュリティグループを削除する

不要になったグループは delete-security-group で削除します。

aws ec2 delete-security-group --group-id $SG_ID

削除済みの ID にもう一度同じコマンドを実行すると、次のように InvalidGroup.NotFound が返ります。削除できたかどうかの確認にもなります。

An error occurred (InvalidGroup.NotFound) when calling the DeleteSecurityGroup operation: The security group 'sg-0013fdefaf448453b' does not exist

用途別のコピペ用コマンド一覧

$SG_ID は設定先のグループ、$WEB_SG_ID は送信元として参照するグループの ID です。ここでは新しく作った2つのグループ(設定先 sg-6a90b93352792a7cb、参照先 sg-3e97535a993c9c43f)で、すべて実行して確かめています。

用途 コマンド(先頭に aws ec2 authorize-security-group-ingress --group-id $SG_ID を付ける)
SSH(自分の IP だけ) --protocol tcp --port 22 --cidr 203.0.113.10/32
HTTP --protocol tcp --port 80 --cidr 0.0.0.0/0
HTTPS --protocol tcp --port 443 --cidr 0.0.0.0/0
MySQL(別グループから) --protocol tcp --port 3306 --source-group $WEB_SG_ID
PostgreSQL(別グループから) --protocol tcp --port 5432 --source-group $WEB_SG_ID
ポート範囲 --protocol tcp --port 8000-8080 --cidr 10.0.0.0/16
DNS(UDP) --protocol udp --port 53 --cidr 10.0.0.0/16
ICMP すべて(ping など) --protocol icmp --port -1 --cidr 10.0.0.0/16
HTTPS(IPv6) --ip-permissions 'IpProtocol=tcp,FromPort=443,ToPort=443,Ipv6Ranges=[{CidrIpv6=::/0}]'
説明つき --ip-permissions 'IpProtocol=tcp,FromPort=22,ToPort=22,IpRanges=[{CidrIp=198.51.100.7/32,Description=admin-home}]'
別グループ参照+説明 --ip-permissions "IpProtocol=tcp,FromPort=6379,ToPort=6379,UserIdGroupPairs=[{GroupId=$WEB_SG_ID,Description=from-web}]"

上の11本を順に実行したときに返ってきたルールです(プロトコル、開始ポート、終了ポート、送信元の順)。3306・5432・6379番の送信元には、参照先のグループ ID が入っています。

tcp 22  22  203.0.113.10/32
tcp 80  80  0.0.0.0/0
tcp 443 443 0.0.0.0/0
tcp 3306    3306    sg-3e97535a993c9c43f
tcp 5432    5432    sg-3e97535a993c9c43f
tcp 8000    8080    10.0.0.0/16
udp 53  53  10.0.0.0/16
icmp    -1  -1  10.0.0.0/16
tcp 443 443 ::/0
tcp 22  22  198.51.100.7/32
tcp 6379    6379    sg-3e97535a993c9c43f

自分の IP アドレスだけを許可するときは /32 を付けます。データベースのポートは CIDR ではなく別グループ参照にしておくと、アプリ側のサーバーが増えてもルールを書き足さずに済みます。

0.0.0.0/0 で開いているルールを探す

全グループを対象に、どこからでも入れるインバウンドルールを一覧にします。IPv4 の 0.0.0.0/0 と IPv6 の ::/0 の両方を拾います。

aws ec2 describe-security-group-rules \
  --query 'SecurityGroupRules[?!IsEgress && (CidrIpv4==`0.0.0.0/0` || CidrIpv6==`::/0`)].[GroupId,SecurityGroupRuleId,IpProtocol,FromPort,ToPort,CidrIpv4||CidrIpv6]' \
  --output table
-------------------------------------------------------------------------------------
|                            DescribeSecurityGroupRules                             |
+-----------------------+-------------------------+------+------+------+------------+
|  sg-0013fdefaf448453b |  sgr-d957b8e8c2c50072b  |  tcp |  443 |  443 |  0.0.0.0/0 |
|  sg-0013fdefaf448453b |  sgr-abf7a1a2766d640b5  |  tcp |  80  |  80  |  0.0.0.0/0 |
|  sg-0013fdefaf448453b |  sgr-ba1693f3d6ac0c5b7  |  tcp |  443 |  443 |  ::/0      |
+-----------------------+-------------------------+------+------+------+------------+

(手順 6 で削除する前の状態で実行した結果です。)

グループ名だけ知りたいときは、サーバー側で絞り込む --filters が手軽です。

aws ec2 describe-security-groups \
  --filters Name=ip-permission.cidr,Values=0.0.0.0/0 \
  --query 'SecurityGroups[].[GroupId,GroupName]' --output text
sg-0013fdefaf448453b    web-sg

SSH(22番)が 0.0.0.0/0 で開いているグループだけを探す式です。上の例では22番を特定の IP アドレスに限定していたので、結果は0件(何も表示されない)でした。

aws ec2 describe-security-groups \
  --query 'SecurityGroups[?IpPermissions[?contains(IpRanges[].CidrIp, `0.0.0.0/0`) && FromPort==`22`]].[GroupId,GroupName]' \
  --output text

エラー文と直し方

InvalidPermission.Duplicate(同じルールがすでにある)

同じルールをもう一度追加すると返ります。

aws ec2 authorize-security-group-ingress \
  --group-id $SG_ID --protocol tcp --port 443 --cidr 0.0.0.0/0
An error occurred (InvalidPermission.Duplicate) when calling the AuthorizeSecurityGroupIngress operation: The specified rule already exists

目的の状態にはすでになっているので、設定としては完了しています。コロンより後ろのメッセージ部分は環境や版によって文面が変わることがあるため、判定には括弧の中のエラーコードを使います。スクリプトの中で繰り返し実行する場合は、このエラーだけを「登録済み」として扱うと、何度流しても同じ結果になります。

aws ec2 authorize-security-group-ingress \
  --group-id $SG_ID --protocol tcp --port 443 --cidr 0.0.0.0/0 2>&1 \
  | grep -q InvalidPermission.Duplicate && echo "既に登録済みです"
既に登録済みです

説明や送信元を変えたい場合は、追加し直すのではなく modify-security-group-rules を使います。なお公式リファレンスには、CIDR を正規化した結果が既存ルールと同じになる場合(例:100.68.0.18/18 と 100.68.0.0/18)も重複として扱われる、と書かれています。

InvalidGroup.NotFound(グループが見つからない)

aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 --protocol tcp --port 443 --cidr 0.0.0.0/0
An error occurred (InvalidGroup.NotFound) when calling the AuthorizeSecurityGroupIngress operation: The security group 'sg-0123456789abcdef0' does not exist
確かめること 方法
ID の打ち間違い・変数が空 echo $SG_ID で中身を見る
リージョンが違う --region や AWS_DEFAULT_REGION を確認する
作成直後 公式のエラーコード一覧には、作ったばかりの ID がまだ行き渡っていない場合にも起きるとある。少し待って再実行する

InvalidPermission.NotFound(消そうとしたルールがない)

revoke の引数が、登録されているルールと一致しないときに返ります。

An error occurred (InvalidPermission.NotFound) when calling the RevokeSecurityGroupIngress operation: The specified rule does not exist in this security group

ポート・プロトコル・CIDR のどれかが少し違うことが多いので、describe-security-group-rules でルール ID を調べ、--security-group-rule-ids で消すのが確実です。

InvalidGroup.Duplicate(同じ名前のグループがある)

同じ名前で create-security-group をもう一度実行すると、InvalidGroup.Duplicate が返ります。同じ VPC の中では、グループ名を重ねて使えません。既存のグループをそのまま使うか、別の名前にします。

DependencyViolation(使用中・参照中で削除できない)

公式リファレンスによると、delete-security-group は次のどれかに当てはまると DependencyViolation で止まります。

  • インスタンスまたはネットワークインターフェイスに関連付けられている
  • 同じ VPC の別のセキュリティグループのルールから参照されている
  • VPC の関連付けがある

直し方は、依存しているものを先に探して外し、そのあとで削除する ことです。探すコマンドは次の2つです。

# このグループを送信元として参照しているグループを探す
aws ec2 describe-security-groups \
  --filters Name=ip-permission.group-id,Values=$SG_ID \
  --query 'SecurityGroups[].[GroupId,GroupName]' --output text
sg-24a6b5f295fe41113    db-sg

(web-sg を送信元にしたルールを持つ db-sg を別に作って実行した結果です。)

# このグループを付けているネットワークインターフェイスを探す
aws ec2 describe-network-interfaces \
  --filters Name=group-id,Values=$SG_ID \
  --query 'NetworkInterfaces[].[NetworkInterfaceId,Description,Attachment.InstanceId]' --output text

参照しているグループが見つかったら、そのグループ側の該当ルールを revoke で消します。ネットワークインターフェイスが見つかったら、インスタンス側のセキュリティグループを別のものに付け替えてから削除します。

エラーコードのまとめ

エラーコード 起きる操作 直し方
InvalidPermission.Duplicate authorize 登録済み。変更なら modify を使う
InvalidPermission.NotFound revoke ルール ID を調べて指定する
InvalidGroup.NotFound 全般 ID・リージョンを確認する
InvalidGroup.Duplicate create 別の名前にするか既存を使う
DependencyViolation delete 参照元ルールと関連付けを先に外す

よくある質問

Q. --cidr と --ip-permissions は同時に使えますか? A. 1回のコマンドではどちらか一方で書きます。説明・IPv6・複数ルールが必要になったら --ip-permissions にまとめるのがおすすめです。

Q. ルールを変えたら、インスタンスの再起動は必要ですか? A. 不要です。公式リファレンスには、ルールの変更は関連付けられたインスタンスへできるだけ早く伝わる(わずかな遅れが出ることがある)と書かれています。

Q. 拒否ルールは書けますか? A. セキュリティグループに書けるのは許可ルールだけです。許可していない通信は通りません。

Q. describe-security-groups と describe-security-group-rules はどちらを使えばよいですか? A. ルール ID が必要な変更・削除や一覧表づくりには describe-security-group-rules、グループ全体を JSON で把握したいときは describe-security-groups が向いています。

まとめ

  • 作成は create-security-group、追加は authorize、削除は revoke、書き換えは modify-security-group-rules の4つを覚えれば一通り操作できる
  • 短い書き方(--protocol --port --cidr)は説明なしの IPv4 ルール向け。説明・IPv6・複数ルールは --ip-permissions
  • 確認は describe-security-group-rules を表形式で。ルール ID(sgr-…)がわかり、変更・削除につなげられる
  • データベースのポートは別グループ参照(--source-group) にすると、サーバーの増減に強い
  • 0.0.0.0/0 と ::/0 で開いたルールは --query で定期的に一覧にする
  • InvalidPermission.Duplicate は登録済みの合図、DependencyViolation は参照元と関連付けを先に外す

参考・出典

  • AWS CLI Command Reference: authorize-security-group-ingress(https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-security-group-ingress.html)
  • AWS CLI Command Reference: modify-security-group-rules(https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-security-group-rules.html)
  • AWS CLI Command Reference: delete-security-group(https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-security-group.html)
  • Amazon VPC User Guide: Security group rules(https://docs.aws.amazon.com/vpc/latest/userguide/security-group-rules.html)
  • Amazon EC2 API Reference: Error codes(https://docs.aws.amazon.com/AWSEC2/latest/APIReference/errors-overview.html)

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「AWS CLIでセキュリティグループ設定|ルール追加・削除・確認」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?