セキュリティグループルール作成
セキュリティグループにセキュリティグループルールを設定し、確認する手順を解説します。
ヒント: お互いにセキュリティグループが使える仮想サーバ同士の通信の場合、基本的に通信相手をセキュリティグループIDで指定することを推奨します。
ヒント: 同じセキュリティグループが設定されている仮想サーバ同士の通信(自らに返ってくる通信も含む)にも明示的にその通信を許可するルールが必要です。自分自身のセキュリティグループIDを指定することで解決します。
ヒント: ingressの場合は送信元、egressの場合は宛先のIPアドレスを指定します。
-
以下で、必要な設定を行います。
$ 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>
-
次の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 } }
-
設定したセキュリティグループルールを確認するため、以下の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>", } ... ] }