セキュリティグループを用いると、仮想サーバに接続されたポートに対してパケットフィルタリングを行うため、ルール設定をグルーピングして定義および設定することができます。ここでは、セキュリティグループを作成し、確認するまでの手順を解説します。
セキュリティグループには複数のルールを設定できます。1つのポートに設定されたセキュリティグループのうち、どれか1つでもルールにマッチしたパケットは通信が許可され、それ以外の通信は遮断されます。(ホワイトリスト方式、OR条件)
注: セキュリティグループは、仮想ルータおよびDHCPサーバが持つポートには設定できません。
ポートには自動的に通信を遮断するデフォルトセキュリティグループが設定されています。そこで、新たにセキュリティグループを作成し、必要に応じて通信を許可するルールを設定します。
-
以下で、必要な設定を行います。
セキュリティグループはアベイラビリティゾーンに紐づかないため、指定は不要です。
$ SG_NAME=<新規セキュリティグループ名(任意)>
-
次のAPIを実行します。
$ curl -Ss $NETWORK/v2.0/security-groups -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" \
-H "Content-Type: application/json" -d '{"security_group": {"name": "'$SG_NAME'"}}' | \
jq .
以下のレスポンスが返ります。
{
"security_group": {
"tenant_id": "<プロジェクトID>" ,
"description": "",
"name": "<新規セキュリティグループ名>",
"security_group_rules": [
{
"remote_group_id": null,
"direction": "egress",
"remote_ip_prefix": null,
"protocol": null,
"ethertype": "IPv6",
"port_range_max": null,
"security_group_id": "<新規セキュリティグループID>",
"port_range_min": null,
"tenant_id": "<プロジェクトID>",
"id": "<デフォルトのセキュリティグループルールID>"
},
{
"remote_group_id": null,
"direction": "egress",
"remote_ip_prefix": null,
"protocol": null,
"ethertype": "IPv4",
"port_range_max": null,
"security_group_id": "<新規セキュリティグループID>",
"port_range_min": null,
"tenant_id": "<プロジェクトID>",
"id": "<デフォルトのセキュリティグループルールID>"
}
],
"id": "<新規セキュリティグループID>"
}
}
-
作成したセキュリティグループを確認するため、以下のAPIを実行します。
$ curl -Ss $NETWORK/v2.0/security-groups -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | \
jq '.security_groups[]| .name, .description, .id'
以下のように、設定したセキュリティグループ名を含んだリストが出力された場合、作成は完了です。
"default"
"default"
"<プロジェクトのデフォルトセキュリティグループID>"
...
"<新規作成したセキュリティグループ名>"
""
"<新規作成したセキュリティグループID>"
...