セキュリティグループルール作成

セキュリティグループにセキュリティグループルールを設定し、確認する手順を解説します。

ヒント: お互いにセキュリティグループが使える仮想サーバ同士の通信の場合、基本的に通信相手をセキュリティグループIDで指定することを推奨します。
ヒント: 同じセキュリティグループが設定されている仮想サーバ同士の通信(自らに返ってくる通信も含む)にも明示的にその通信を許可するルールが必要です。自分自身のセキュリティグループIDを指定することで解決します。
ヒント: ingressの場合は送信元、egressの場合は宛先のIPアドレスを指定します。
  1. 以下で、必要な設定を行います。
    $ DIRECTION=<通信の方向、ingress、 egress で指定>
    $ PROTCOL=<通信プロトコルtcp、udp、icmp、0~65535で指定>
    $ MIN_PORT_NUM=<最小ポート番号0~65535で指定>
    $ MAX_PORT_NUM=<最大ポート番号 0~65535で指定>
    $ SG_ID=<ルールを追加したいセキュリティグループのセキュリティグループID>
    $ REMOTE_IP=<許可するIPアドレス「XXX.XXX.XXX.0/24」等>

    もしくは

    $ REMOTE_GROUP_ID=<許可するセキュリティグループID>
  2. 次のAPIを実行します。
    $ curl -Ss $NETWORK/v2.0/security-group-rules -X POST \
    -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \
     -d '{"security_group_rule": {"direction": "'$DIRECTION'",
     "port_range_min": '$MIN_PORT_NUM', "port_range_max": '$MAX_PORT_NUM',
     "protocol": "'$PROTCOL'", "remote_ip_prefix": "'$REMOTE_IP'",
     "security_group_id": "'$SG_ID'"}}' | jq .

    もしくは

    $ curl -Ss $NETWORK/v2.0/security-group-rules -X POST \
     -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \
     -d '{"security_group_rule":{"direction": "'$DIRECTION'",
     "port_range_min": '$MIN_PORT_NUM',"port_range_max": '$MAX_PORT_NUM',
     "protocol": "'$PROTCOL'","remote_group_id": "'$REMOTE_GROUP_ID'",
     "security_group_id": "'$SG_ID'"}}' | jq .

    以下のレスポンスが返ります。

    {
      "security_group_rule": {
        "remote_group_id": "<許可するセキュリティグループID>",
        "direction": "<通信の方向>",
        "remote_ip_prefix": "<許可するIPアドレス>",
        "protocol": "<プロトコル>",
        "tenant_id": "<プロジェクトID>",
        "port_range_max": <最大ポート番号>,
        "security_group_id": "<ルールを追加したセキュリティグループID>",
        "port_range_min": <最小ポート番号>,
        "ethertype": "IPv4",
        "id": "<セキュリティグループルールID>",
        "availability_zone": null
      }
    }
  3. 設定したセキュリティグループルールを確認するため、以下のAPIを実行します。
    $ curl -Ss $NETWORK/v2.0/security-group-rules -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" \
     | jq .

    以下のように、設定したセキュリティグループルールを含んだリストが出力された場合、作成は完了です。

    {
      "security_group_rules": [
      
        ...
          
        {
          "remote_group_id": "<許可するセキュリティグループID>",
          "direction": "<通信の方向>",
          "remote_ip_prefix": "<許可するIPアドレス>",
          "protocol": "<プロトコル>",
          "tenant_id": "<プロジェクトID>",
          "port_range_max": <最大ポート番号>,
          "security_group_id": "<ルールを追加したセキュリティグループID>",
          "port_range_min": <最小ポート番号>,
          "ethertype": "IPv4",
          "id": "<セキュリティグループルールID>",
        }
        
        ...
    
      ]
    }