複数のファイアーウォールルールを束ねるファイアーウォールポリシーを作成し、確認するまでの手順を解説します。
リスト内のルールの順番によってルールに優先順位がつけられており、上から順に順次検証され、通信の可否を制御します。
ヒント: ポリシー内で自動的に「DENY ALL」のルールが最後尾に追加されます。これにより、許可ルールの定義されないトラフィックはデフォルトで遮断されます。(ホワイトリスト方式)ただし、この自動的に追加される「DENY ALL」ルールは暗黙ルールとなっており、ポリシーに表示されません。
ファイアーウォールサービスの設定は以下の要素から構成され、番号順にフィルタリング情報を構成していきます。ファイアーウォールを仮想ルータに関連付けることで、設定したフィルタリングが行われるようにします。
- ファイアーウォールルールの作成
- ファイアーウォールポリシーを作成し、ルール群を登録
- ポリシーを指定してファイアーウォールを作成し、仮想ルータに関連付け
-
ファイアーウォールルールの一覧を取得するため、以下のAPIを実行します。
$ curl -Ss $NETWORK/v2.0/fw/firewall_rules -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | \
jq '.firewall_rules[] | .name, .id'
以下のようなフォーマットでファイアーウォールルールのリストが表示されます。ここからポリシーに必要なルールを選択します。
...
"<ファイアーウォールルール名>"
"<ファイアーウォールルールID>"
...
-
以下の設定をします。
$ NAME=<ファイアーウォールポリシー名(任意)>
$ FWR1=<ファイアーウォールルールID(1)>
$ FWR2=<ファイアーウォールルールID(2)>
$ FWR3=<ファイアーウォールルールID(3)>
※ファイアーウォールポリシーに設定する分のファイアーウォールルールIDを記載します。
$ AVAILABILITY_ZONE=<ファイアーウォールルールで設定されているものと同じアベイラビリティゾーン>
-
次のAPIを実行します。
$ curl -X POST -Ss $NETWORK/v2.0/fw/firewall_policies \
-H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" \
-d '{"firewall_policy":{"firewall_rules": [ "'$FWR1'", "'$FWR2'", "'$FWR3'",
"'<ファイアーウォールポリシーに設定する数分の領域を追加します>'"],
"name": "'$NAME'", "availability_zone": "'$AVAILABILITY_ZONE'"}}' | jq .
以下のレスポンスが返ってきます。ファイアーウォールルールIDの表示される順番がそのまま優先順位となります。
{
"firewall_policy": {
"name": "<新規ファイアーウォールポリシー名>",
"firewall_rules": [
"<設定したファイアーウォールルールID(1)>",
"<設定したファイアーウォールルールID(2)>",
...
"<設定したファイアーウォールルールID(n)>"
],
"tenant_id": "<プロジェクトID>",
"audited": false,
"shared": false,
"id": "<新規ファイアーウォールポリシーID>",
"description": "",
"availability_zone": "<設定したアベイラビリティゾーン>"
}
}
アベイラビリティゾーンは、AZ1がjp-east-1a、AZ2がjp-east-1bで表現されます。
-
作成したファイアーウォールポリシーを確認するため、以下のAPIを実行します。
$ curl -Ss $NETWORK/v2.0/fw/firewall_policies -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" \
| jq .
以下のように、設定したファイアーウォールポリシー名を含んだリストが出力された場合、作成は完了です。
{
"firewall_policies": [
...
{
"name": "<新規ファイアーウォールポリシー名>",
"firewall_rules": [
"<設定したファイアーウォールルールID(1)>",
"<設定したファイアーウォールルールID(2)>",
...
"<設定したファイアーウォールルールID(n)>"
],
"tenant_id": "<プロジェクトID>",
"audited": false,
"shared": false,
"id": "<新規ファイアーウォールポリシーID>",
"description": "",
"availability_zone": "<設定したアベイラビリティゾーン>"
},
...
]
}
ファイアーウォールポリシーの作成が完了すると、それを仮想ルータに紐づけるファイアーウォールの作成に進みます。