OAuth 2.0 相互 TLS を使用した ONTAP クライアント認証
セキュリティ上のニーズに応じて、オプションで相互TLS(mTLS)を設定して強力なクライアント認証を導入できます。OAuth 2.0環境の一部としてONTAPでmTLSを使用すると、アクセス トークンが、その発行を受けたクライアントしか使用できなくなります。
相互TLSとOAuth 2.0
Transport Layer Security(TLS)は、2つのアプリケーション(通常はクライアント ブラウザとWebサーバ)の間にセキュアな通信チャネルを確立するために使用されます。相互TLSは、クライアント証明書を通じた強力なクライアント識別を実現することにより、これを拡張したものです。OAuth 2.0を導入したONTAPクラスタで使用すると、送信者限定アクセス トークンを作成および使用できるので、基本的なmTLS機能が拡張されます。
送信者制約アクセストークンは、元々発行されたクライアントのみが使用できます。この機能をサポートするために、新しい確認クレーム(`cnf`がトークンに挿入されます。このフィールドには、アクセストークンの要求時に使用されたクライアント証明書のダイジェストを保持するプロパティ `x5t#S256`が含まれます。この値は、トークン検証の一環としてONTAPによって検証されます。送信者制約のない認可サーバによって発行されたアクセストークンには、追加の確認クレームは含まれません。
認証サーバごとにmTLSを使用するようにONTAPを設定する必要があります。たとえば、CLIコマンド `security oauth2 client`には、以下の表に示す3つの値に基づいてmTLS処理を制御するパラメータ `use-mutual-tls`が含まれています。
|
|
それぞれの設定で、結果とONTAPによって実行されるアクションは、設定パラメータの値、アクセス トークンの内容、クライアント証明書によって異なります。表内のパラメータは、制限が最も緩いものから最も厳しいものの順に並んでいます。 |
| パラメータ | 概要 |
|---|---|
なし |
OAuth 2.0の相互TLS認証が、許可サーバで完全に無効になります。ONTAPは、トークンに確認クレームが含まれている場合や、TLS接続でクライアント証明書が提供されている場合であっても、mTLSクライアント証明書認証を実行しません。 |
request |
OAuth 2.0 相互 TLS 認証は、クライアントが送信者制約アクセストークンを提示した場合に強制されます。つまり、アクセストークン内に確認クレーム(プロパティ `x5t#S256`を含む)が存在する場合にのみ mTLS が強制されます。これがデフォルト設定です。 |
必須 |
許可サーバによって発行されたすべてのアクセス トークンについて、OAuth 2.0の相互TLS認証が実行されます。したがって、すべてのアクセス トークンが送信者限定である必要があります。アクセス トークンに確認クレームが存在しない場合や、無効なクライアント証明書がある場合、認証とREST API要求は失敗します。 |
導入フローの概要
ONTAP環境でmTLSとOAuth 2.0を使用する際の一般的な手順を以下に示します。詳細については、 "RFC 8705:OAuth 2.0 相互TLSクライアント認証と証明書バインドアクセストークン"を参照してください。
クライアントIDの確立は、クライアントの秘密鍵を知っていることの証明がベースになります。対応する公開鍵は、クライアントから提示された署名付きX.509証明書に配置されます。クライアント証明書の大まかな作成手順は、次のとおりです。
-
公開鍵と秘密鍵のペアを生成する
-
証明書署名要求を生成する
-
CSRファイルを既知のCAに送信する
-
CAが要求を検証して署名済み証明書を発行する
クライアント証明書は通常、ローカルのオペレーティング システムにインストールしたり、curlなどの一般的なユーティリティで直接使用したりできます。
ONTAPでmTLSを使用するには、設定が必要です。この設定は認証サーバごとに個別に行います。例えば、CLIでは、コマンド `security oauth2 client`にオプションパラメータ `use-mutual-tls`を指定します。詳細については、"ONTAPでのOAuth 2.0の導入"を参照してください。
クライアントは、ONTAPに設定された許可サーバにアクセス トークンを要求する必要があります。クライアント アプリケーションは、手順1で作成してインストールした証明書でmTLSを使用する必要があります。
認可サーバーはクライアントリクエストを検証し、アクセストークンを生成します。この一環として、クライアント証明書のメッセージダイジェストを作成し、確認クレーム(フィールド cnf)としてトークンに含めます。
クライアントアプリケーションはONTAPクラスタに対してREST API呼び出しを行い、アクセストークンを*ベアラートークン*として認可リクエストヘッダーに含めます。クライアントは、アクセストークンのリクエストに使用したのと同じ証明書を使用してmTLSを使用する必要があります。
ONTAPは、HTTPリクエスト内のアクセストークンと、mTLS処理の一部として使用されるクライアント証明書を受け取ります。ONTAPは、まずアクセストークン内の署名を検証します。設定に基づいて、ONTAPはクライアント証明書のメッセージダイジェストを生成し、トークン内の確認クレーム*cnf*と比較します。2つの値が一致する場合、ONTAPは、APIリクエストを発行しているクライアントが、アクセストークンが最初に発行されたクライアントと同じであることを確認したことになります。