【NetApp】デフォルト?カスタム?エクスポートポリシーって何?

2020年11月25日

こんにちは、キクです。

僕が最近触れることの多いNetAppにはエクスポートポリシーという技術があります。
設定を進めていく中でエクスポートポリシーにはいくつか種類があることが分かりました。
最初の頃はその違いや使い方が分かりませんでした。

今回はそんな『エクスポートポリシー』をテーマに書いていきたいと思います!

それでは、よろしくお願いします。

エクスポートポリシーとは

エクスポートポリシーとは、SVMに紐付くボリュームに対する各クライアントからのアクセス要求を処理するルールが1つ以上含まれたポリシーのことを指します。
簡単に言えば、クライアントからのアクセス制御を行うためのポリシーです。

「君はボリュームを使っていいよ」
「君はポリシーで許可されていないからボリュームを使っちゃダメだよ」

みたいなことを制御しています。

そんなエクスポートポリシーには以下のような特徴があります。

エクスポートポリシーの主な特徴

・SVM毎に作成することができる
・ポリシー内ではエクスポートルールを設定する
・ボリュームに紐付けて使用する
・「デフォルト」と「カスタム」の呼び名がある

それぞれもう少し詳しく見ていきましょう。

SVM毎に作成することができる

以下はエクスポートポリシーを作成する際に実行するコマンドの例です。

::> vserver export-policy create -vserver <SVM名> -policyname <エクスポートポリシー名>

このコマンドを要約すると、

●●という名前のSVMに」
「〇〇という名前のエクスポートポリシーを」
「作成する」

という意味になります。

こんな感じで、エクスポートポリシー作成時にはSVMを指定します。
これはエクスポートポリシーがSVM配下で管理されることを意味します。

例えば、SVM1で「export1」というエクスポートポリシーを作成します。
次に、SVM2でも「export1」というエクスポートポリシーを作成します。
これらは同じ名前ですが、実体としては別物ということになります。

ポリシー内ではエクスポートルールを設定する

次にエクスポートルールについてです。

先ほどのエクスポートポリシー作成コマンドでは「SVM名」と「エクスポートポリシー名」を指定しました。
しかし、肝心のアクセス制御の設定はしていませんでしたよね。
その設定を担うのがこの「エクスポートルール」になります。

エクスポートルールでは下記のような条件を設定します。

エクスポートルールの主な設定項目

  1. クライアントが要求の送信に使用するファイルアクセスプロトコル
    [例]NFS4, SMB など
  2. クライアント識別子
    [例]ホスト名, IPアドレス など
  3. クライアントが認証に使用するセキュリティタイプ
    [例]Kerberous v5, NTLM, AUTH_SYS など

エクスポートポリシーには複数のエクスポートルールを設定することが可能です。
各ルールには「インデックス番号」と呼ばれる番号を付けることが可能で、ルールが複数ある場合には番号が若い順から判定されていきます。
そして、最初に条件に一致したルールのアクセス権がクライアントに適応されます。

逆に言えば、条件に一致するルールがなければアクセスはすべて拒否されます。
これはルールが空であった場合についても同様です。
例えば、以下のような状況ではどうなるか見ていきましょう。

::> vserver export-policy rule create -vserver SVM1 -policyname export1 -ruleindex 1 -protocol nfs -clientmatch 192.168.1.10/32 -rorule any -rwrule never
::> vserver export-policy rule create -vserver SVM1 -policyname export1 -ruleindex 2 -protocol nfs -clientmatch 192.168.1.10/32 -rorule any -rwrule any

インデックス番号12のエクスポートルールを作成しました。

以下の設定は共通であることがわかります。

上記コマンドで共通の項目

SVM名:SVM1
エクスポートポリシー名:export1
許可するファイルアクセスプロトコル:NFS
許可するクライアントIPアドレス:192.168.1.10

そして以下の差異があります。

上記コマンドで差異のある項目

インデックス番号1:読み込み専用
インデックス番号2:読み込み/書き込み

エクスポートルールが複数ある場合には「番号が若い順から判定され、一致するルールがあった時点でそのルールを適用」とお話ししました。
192.168.1.10というクライアントからのアクセスがあった際に、この場合だとインデックス番号1が適用されます。
これはすなわち192.168.1.10というクライアントには「書き込み権限」は与えらないということです。

このようにして、エクスポートポリシーに設定したエクスポートルールによるアクセス制御を行っています。

ボリュームに紐付けて使用する

エクスポートポリシーはボリュームに対して紐付けを行います。

以下がボリューム作成時のコマンド例です。

::> volume create -vserver SVM1 -volume vol1 -aggregate aggr2 -state online -policy export1 -security-style ntfs -junction-path /test -size 100g -space-guarantee volume

エクスポートポリシーを変更したい場合のコマンドは以下です

::> volume modify -vserver SVM1 -volume vol1 -policy export2

エクスポートポリシーを所有しているのはSVMです。
エクスポートポリシーはそのSVMが管理しているボリュームに対して割り当てることが可能です。
上記のコマンドでいうと「-policy」により割り当てるエクスポートポリシーを選択しています。

vol1とvol2には〇〇からのアクセスを許可したい」
vol3では▲▲からだけアクセスを許可したい」

このようにしてボリューム毎に割り当てるエクスポートポリシーを決めながらアクセス制御を設定していきます。

「デフォルト」と「カスタム」の呼び名がある

エクスポートポリシーには大きく2つの種類が存在します。
「デフォルトエクスポートポリシー」と「カスタムエクスポートポリシー」です。
詳しい内容は次項以降に譲るとして、ここではこの2つがあるということを覚えていただければと思います。

デフォルトエクスポートポリシーとは

エクスポートポリシーはSVMに紐付くということは既に触れました。
そしてSVM作成と同時に「default」という名前のエクスポートポリシーが自動的に作成されます。
このdefaultデフォルトエクスポートポリシーと呼ばれるものです。

defaultは自動作成されることのほかにも、削除することができないという特徴もあります。
そのため、すべてのSVMdefaultというエクスポートポリシーだけは必ず持っているということです。

また、defaultは自動作成された時点では空の状態です。
つまり、エクスポートルールが設定されていません。
エクスポートルールが設定されていなければすべてのアクセスが拒否されるということは既にお話ししました。
したがって、できたてホヤホヤのdefaultはすべてのアクセスを拒否するという状態です。

アクセスを許可したいのであればエクスポートルールを設定しましょう。
defaultにエクスポートルールを設定してもいいですし、新たにエクスポートポリシーを作成して、そこにエクスポートルールを追加してもOKです。
この「新たにエクスポートポリシーを作成」してできたポリシーが次項で登場する「カスタムエクスポートポリシー」です。

カスタムエクスポートポリシーとは

defaultSVM作成時に自動作成されるエクスポートポリシーであるのに対して、カスタムエクスポートポリシーは管理者が意図的に作成するエクスポートポリシーです。
要するにデフォルトエクスポートポリシーではないエクスポートポリシーがカスタムエクスポートポリシーです。

すべてdefaultで管理しちゃえばカスタムエクスポートポリシーは必要ないんじゃないの?

もちろんすべてdefaultで管理してしまうのもアリです。
しかし、先ほどの例を考えてみましょう。

vol1には〇〇からのアクセスを許可したい」
vol2では▲▲からだけアクセスを許可したい」

vol1に〇〇を許可したいのであれば、defaultに〇〇を許可する設定を入れる必要があります。
vol2▲▲を許可したいのであれば、同じくdefault▲▲を許可する設定を入れる必要があります。

この時、defaultには〇〇/▲▲を許可する設定が入っていますよね。
このままvol1vol2にデフォルトエクスポートポリシー「default」を設定したらどうなるでしょうか?

vol1には〇〇/▲▲からのアクセスが許可されます。
vol2にも〇〇/▲▲からのアクセスが許可されます。

これでは実現したいアクセス制御ができていませんよね。
そんな時に活躍するのがカスタムエクスポートポリシーです。

export1というカスタムエクスポートポリシーに〇〇を許可する設定を入れる。
export2というカスタムエクスポートポリシーに▲▲を許可する設定を入れる。

そしてvol1にはexport1を、vol2にはexport2を割り当ててあげることでボリューム毎に異なるアクセス制御を実現できるようになりました。

どちらを使えばいい?

これに関しては正直明確な決まりはないと思っています。
「設計による」と言ってしまえばそれまでです。

でも、各ボリュームに対してアクセスするクライアントがすべて同じなのであればdefaultだけで設定するのは選択肢としてはあるのかなと思います。
上記で触れていませんでしたが、ボリューム作成時に「-policy」としてエクスポートポリシーを指定しなかった場合にはデフォルトエクスポートポリシーである「default」が自動で割り当てられるようになっています。
そのため、defaultにアクセス制御設定が既にされていれば、ボリューム作成時には特に設定を意識することなくすぐにアクセス制御設定が完了するということになるので楽ではあります。

しかし、個人的にはカスタムエクスポートポリシーでアクセス制御を設定していく方がいいのではないかと思っています。
仮にdefaultのみでアクセス制御を管理した場合、ボリューム作成と同時にdefaultで許可されているクライアントからのアクセスができる状態になってしまいます。
「ボリュームを作った時点でみんなからアクセスできるってちょっと怖くないか?」と思ってしまうのです。
それよりかは、defaultでは必要最低限もしくは空の設定としておき、実際の設定はカスタムエクスポートポリシー側で行い、ボリュームがきちんと使える状態になったらカスタムエクスポートポリシーを割り当てて、クライアントからのアクセスを解禁するほうがいいのではないかと思います。

おわりに

いかがだったでしょうか。

今回はNetAppの技術の1つである「エクスポートポリシー」についてお話ししてきました。
NetAppでボリュームを利用する場合には必須の設定であることがお伝えできていればと思います。
そして、その設定を実際に行なっているのは「エクスポートルール」であることや、
ボリューム毎にエクスポートポリシーを割り当てることでそれぞれのボリュームへのアクセス制御を個別で設定できるということを覚えていただけていればと思います。

本記事を最後までお読みいただき、ありがとうございました。
ではでは!

  • LINE
  • -NetApp
    -