ONTAP S3バケットのクロスオリジンリソース共有(CORS)を設定する
ONTAP 9.16.1以降では、クライアントWebアプリケーションが複数のドメインからONTAPバケットにアクセスできるように、Cross-Origin Resource Sharing(CORS)を設定できます。これにより、Webブラウザを使用したバケット オブジェクトへのセキュアなアクセスが実現されます。
CORSはHTTPを基盤としたフレームワークで、あるWebページで定義されたスクリプトが別のドメインのサーバ上のリソースにアクセスできるようにします。このフレームワークは、Webセキュリティの初期の基盤である_同一生成元ポリシー_を安全に回避するために使用されます。主要な概念と用語については以下で説明します。
オリジンによって、リソースの場所とIDが正確に定義されます。以下の値の組み合わせで表されます。
-
URIスキーム(プロトコル)
-
ホスト名(ドメイン名またはIPアドレス)
-
ポート番号
以下はオリジンの簡単な例です: https://www.mycompany.com:8001。オリジンを CORS で使用すると、リクエスト元のクライアントが識別されます。
同一オリジン ポリシー(SOP)は、ブラウザ ベースのスクリプトに適用されるセキュリティ上の概念と制限です。このポリシーにより、あるWebページから最初に読み込まれたスクリプトが、別のページのデータにアクセスできるようになります。ただし、両方のページが同じオリジンにあることが条件になります。この制限により、悪意のあるスクリプトが別のオリジンにあるページのデータにアクセスするのを防げます。
CORSには、一般的なユースケースがいくつかあります。ほとんどのケースで、AJAXリクエスト、フォント / スタイルシート / スクリプトの読み込み、クロスドメイン認証など、明確に定義されたクロス ドメイン アクセスのインスタンスが関係します。CORSは、シングルページ アプリケーション(SPA)の一部として実装することもできます。
CORSは、HTTPリクエストとレスポンスに挿入されるヘッダーを使用して実装されます。例えば、アクセス制御を実装し、メソッドやヘッダーを含む許可される操作を示すレスポンスヘッダーがいくつかあります。HTTPリクエストに_Origin_ヘッダーが存在する場合、そのリクエストはクロスドメインリクエストとして定義されます。origin値は、CORSサーバーが有効なCORS設定を見つけるために使用されます。
これは、特定のメソッドやヘッダーなど、サーバがCORSをサポートしているかどうかを最初に確認するために使用されるオプションの要求です。応答に基づいて、CORS要求を完了できるかどうかが決まります。
バケットは、明確に定義されたネームスペースに基づいて格納、アクセスされるオブジェクトのコンテナです。以下の2種類のONTAPバケットがあります。
-
NASバケット:NASプロトコルとS3プロトコルでアクセス可能
-
S3バケット:S3プロトコルでのみアクセス可能
ONTAPでのCORSの実装
ONTAP 9.16.1以降のリリースでは、CORSがデフォルトで有効になっています。CORSは、アクティブにするSVMごとに設定する必要があります。
|
|
ONTAPクラスタでCORSを無効にする管理オプションはありません。ただし、ルールを定義しないか、既存のルールをすべて削除することで、CORSを実質的に無効にできます。 |
想定されるユースケース
ONTAP CORSの実装では、クロス ドメイン リソース アクセスのために、以下のようないくつかのトポロジが有効になります。
-
ONTAP S3バケット(同一または異なるSVMまたはクラスタ内)
-
ONTAP NASバケット(同一または異なるSVMまたはクラスタ内)
-
ONTAP S3バケットとNASバケット(同一または異なるSVMまたはクラスタ内)
-
ONTAPバケットと外部ベンダー バケット
-
異なるタイムゾーンのバケット
概要図
下の図は、CORSによってONTAP S3バケットへのアクセスが可能になる仕組みを示しています。

CORSルールの定義
機能をアクティブ化して使用するには、ONTAPでCORSルールを定義する必要があります。
設定の操作
ONTAPでは、以下の3つの基本的なルール設定の操作がサポートされています。
-
表示
-
作成
-
削除
ONTAPで定義されるCORSルールには、SVMとバケットや、許可されるオリジン、メソッド、ヘッダーなど、いくつかのプロパティがあります。
管理オプション
ONTAPクラスタでのCORSの管理には、いくつかのオプションがあります。
CORSはコマンドラインインターフェイスを使用して設定できます。詳細については、CLIを使用したCORSの管理を参照してください。
ONTAP REST APIを使用してCORSを設定できます。CORS機能をサポートする新しいエンドポイントは追加されていません。代わりに、以下の既存のエンドポイントを使用できます。
/api/protocols/s3/services/{svm.uuid}/buckets/{bucket.uuid}
詳細については、 "ONTAP自動化ドキュメント"をご覧ください。
S3 APIを使用してONTAPバケットでのCORSの設定を作成、削除できます。S3クライアント管理者には、以下のことに関する十分な権限が必要です。
-
アクセス キーまたはシークレット キーのクレデンシャル
-
s3api経由のアクセスを許可するようにバケットに設定されたポリシー
アップグレードとリバート
CORSを使用してONTAP S3バケットにアクセスする予定がある場合は、いくつかの管理上の問題に注意する必要があります。
CORS機能は、すべてのノードが9.16.1にアップグレードされている場合にサポートされます。混在モードのクラスタでは、有効なクラスタ バージョン(ECV)が9.16.1以降の場合にのみ、CORS機能を使用できます。
ユーザ側の観点では、クラスタのリバートを続行する前に、すべてのCORS設定を削除する必要があります。内部的には、処理により、すべてのCORSデータベースが削除されます。これらのデータ構造をクリアしてリバートするコマンドの実行を求めるメッセージが表示されます。
CLIを使用したCORSの管理
ONTAP CLIを使用してCORSルールを管理できます。主な操作については以下で説明します。CORSコマンドを実行するには、ONTAPの*admin*権限レベルが必要です。
作成
CORSルールは `vserver object-store-server bucket cors-rule create`コマンドを使って定義できます。 `vserver object-store-server bucket cors-rule create`の詳細については、"ONTAPコマンド リファレンス"を参照してください。
ルールの作成に使用するパラメータを以下にまとめています。
| パラメータ | 概要 |
|---|---|
|
ルールが作成されるオブジェクトストアサーババケットをホストするSVM(vserver)の名前を指定します。 |
|
ルールが作成されるオブジェクトストアサーバーのバケットの名前。 |
|
ルールが作成されるオブジェクトストアサーババケットのインデックスを示すオプションのパラメータ。 |
|
オブジェクトストアサーバーバケットルールの一意の識別子。 |
|
クロスオリジンリクエストの発信が許可されるオリジンのリスト。 |
|
クロスオリジンリクエストで許可されるHTTPメソッドのリスト。 |
|
クロスオリジンリクエストで許可されるHTTPヘッダーのリスト。 |
|
顧客がアプリケーションからアクセスできるCORS応答で送信される追加ヘッダーのリスト。 |
|
ブラウザが特定のリソースのプリフライト応答をキャッシュする時間を指定するオプションパラメータ。 |
vserver object-store-server bucket cors-rule create -vserver vs1 -bucket bucket1 -allowed-origins www.myexample.com -allowed-methods GET,DELETE
表示
コマンド `vserver object-store-server bucket cors-rule show`を使用すると、現在のルールとその内容のリストを表示できます。"ONTAPコマンド リファレンス"の `vserver object-store-server bucket cors-rule show`の詳細をご覧ください。
|
|
パラメータ `-instance`を含めると、各ルールに表示されるデータが拡張されます。必要なフィールドを指定することもできます。 |
server object-store-server bucket cors-rule show -instance
削除
CORSルールのインスタンスを削除するには、deleteコマンドを使用します。ルールの `index`値が必要なので、この操作は2つのステップで実行されます:
-
`show`コマンドを発行してルールを表示し、そのインデックスを取得します。
-
インデックス値を使用してdeleteコマンドを実行します。
vserver object-store-server bucket cors-rule delete -vserver vs1 -bucket bucket1 -index 1
変更
既存のCORSルールを変更するCLIコマンドはありません。ルールを変更するには、以下の手順を実行する必要があります。
-
既存のルールを削除します。
-
必要なオプションを指定して新しいルールを作成します。