NGINX Plus リリース 14 (R14)が NGINX Plus サブスクライバーにご利用いただけるようになりましたことをお知らせいたします。 NGINX Plus は、ロードバランサー、コンテンツ キャッシュ、Web サーバーを一体化した唯一のオールインワン製品です。 これは NGINX オープンソースをベースとしており、受賞歴のある 24 時間サポートとともに独自の機能が追加されています。 NGINX Plus R14には、新しいセキュリティとクラスタリング強化が含まれています。
NGINX Plus を使用すると、JSON Web Token (JWT) を使用してアクセス制御を実施できます。 NGINX Plus R14 では、ネストされた JWT クレームのサポートが追加され、JWT 内にネストされたグループ メンバーシップ情報に基づいてアクセスを許可または拒否できるようになりました。 NGINX Plus R10で初めて導入されたネイティブ JWT 認証サポートにより、NGINX Plus を API およびアプリケーションの認証ゲートウェイとして使用できるようになります。
NGINX Plus R14の追加機能は次のとおりです。
ストリーム
コンテキストの TCP および UDP アプリケーションに拡張されました。upstream_conf
およびstatus
ディレクティブで有効化) の API は、NGINX Plus R13以降では非推奨になりました。 これらは、R14 に含まれる更新されたライブ アクティビティ監視ダッシュボードで使用される新しいNGINX Plus APIに置き換えられました。API とマイクロサービスのデプロイ担当者は、そのシンプルさと柔軟性から、JSON Web Token (JWT、「ジョット」と発音) 標準に注目し始めています。 JWT は、ID 情報を交換するためのコンパクトで移植性の高い手段です。 Okta、OneLogin、自社開発ソリューションなど、さまざまな発行者から JWT を取得できます。 NGINX Plus は、ユーザーまたは API クライアントが有効な JWT を提示したかどうかに基づいて、アクセスを許可または拒否できます。
NGINX Plus R14 では、ネストされた JWT クレームと配列データのサポート、および JWT 署名アルゴリズムのより長いキー サイズのサポートが追加されました。 これにより、JWT を検証する際の柔軟性とセキュリティが向上します。
JWT ペイロードには、グループ メンバーシップなど、ユーザーに関する追加の「ネストされた」情報を含めることができ、これを使用してリソースへのアクセスを承認できます。 これにより、ユーザー要求を承認するためにデータベースを複数回クエリする必要がなくなります。
次の JWT ペイロードを検討してください。
{ "exp": 1513429677、
"sub": "xample@example.com",
"aud": "nginx",
"attributes": {
"name": 「ザビエル・アンプル」
「部屋」: 「A123」、
「部門」: 「デモ」
},
「グループ」: [
「管理者」
「Foobar」
「Bazpub」
]
}
上記の JWT では、 attributes は
「ネストされたクレーム」オブジェクトであり、 groups は
配列です。 次の構成スニペットを使用して、属性
オブジェクトからバックエンドに名前の
値を渡し、管理者
グループに属していないユーザーのアクセスを拒否できます。
auth_jwt_claim_set $jwt_groups groups; # 配列値はコンマ区切りの値として結合されますauth_jwt_claim_set $jwt_real_name 属性名; # この値は 2 レベルの深さです
map $jwt_groups $isAdmin {
"~\bAdministrator\b" 1; # CSV リストの単語境界 (\b) 内に表示されます
default 0;
}
server {
listen 443 ssl;
#ssl_*; # SSL/TLS 終了の設定
auth_jwt "closed site";
auth_jwt_key_file jwk.json;
location / {
proxy_set_header X-RealName $jwt_real_name; # 実名をヘッダーとして渡します
proxy_set_header X-Subject $jwt_claim_sub; # L1 クレームは自動的に設定されます
proxy_pass http://my_backend;
}
location /admin {
if ( $isAdmin = 0 ) {
return 403; # 禁止
}
proxy_pass http://my_backend;
}
}
この構成がどのように機能するかについての詳細は、次のとおりです。
auth_jwt_claim_set
ディレクティブを使用して、 $jwt_groups
NGINX 変数を JWT で定義されたグループ
配列に設定します。 配列内の値はカンマで区切られ、 $jwt_groups
に割り当てられます。map
ディレクティブを使用して、グループのリストでAdministrator
キーワードを検索します。 存在する場合、ユーザーは管理者とみなされ、 $isAdmin
は 1 に設定されます。 それ以外の場合、 $isAdmin は
0 に設定されます。ロケーション
ブロックは$isAdmin
変数をチェックします。 0の場合、NGINXはステータスコードを返します 403
禁断
クライアントに戻ります。NGINX Plus R14では、ネストされた JWT クレームから変数を作成することもできます。 その後、変数はバックエンド サーバーにプロキシされる前に HTTP ヘッダーに挿入されます。
上記の例では、 auth_jwt_claim_set
ディレクティブを使用して、 $jwt_real_name
NGINX 変数を、属性
クレーム内の名前
オブジェクトの値に設定します。 proxy_set_header
ディレクティブは、 X-RealName
HTTP ヘッダーを名前
オブジェクトの値に設定し、リクエストをmy_backend
にプロキシします。
NGINX Plus で JWT を認証するために使用できるすべての設定ディレクティブの詳細については、リファレンス ドキュメントを参照してください。
NGINX Plus R14では、256 ビット、384 ビット、512 ビットの署名キーがサポートされるようになり、署名の検証が強化され、デフォルトでより長い署名キーを使用する ID およびアクセス管理 (IAM) 製品との統合が容易になりました。 より長い署名キーは、サポートされているすべての署名アルゴリズムで使用できます。
たとえば、 NGINX Plus R14 を、 RS512 アルゴリズムで署名された JSON Web トークンのみを受け入れるように設定できます。
server { listen 443 ssl;
#ssl_*; # SSL/TLS 終了の設定
auth_jwt "closed site";
auth_jwt_key_file jwk.json;
location / {
if ( $jwt_header_alg != RS512 ) {
return 401;
}
proxy_pass http://my_backend;
}
}
この場合、NGINX PlusはJWTがRS512アルゴリズムで署名されていない場合はリクエストをプロキシせず、ステータスコードを返します。 401
許可されていない
リクエストを発行したクライアントに。
注記: JWT サポートは NGINX Plus 専用です。
NGINX Plus R13 では、 HTTP 用の Key-Value Store モジュールが導入され、1 つ以上の共有メモリ ゾーンでキーと値のペアをオンザフライで作成、変更、消去できるようになりました。 キー値ストア API の優れた使用例の 1 つは、fail2ban と組み合わせて使用して動的 IP 拒否リストを作成することです。
NGINX Plus R14 では、 Stream 用の Key-Value Store モジュールが追加され、HTTP アプリケーションと同じキーと値のペアの機能が TCP および UDP アプリケーションでも利用できるようになります。
ストリーム
コンテキスト内のキー値ストアの動的な再構成は、 NGINX Plus APIの一部としてNGINX Plus R14に実装されています。
注記: キーバリューストアと API は NGINX Plus 専用です。
NGINX JavaScript モジュール (旧称 nginScript) は、NGINX Plus 用の JavaScript ベースのスクリプト言語です。 NGINX Plus R14では、NGINX JavaScript の機能が拡張され、プログラミング性がさらに向上しました。 更新された NGINX JavaScript 動的モジュール パッケージでは、次の新しい機能強化が提供されます。
JavaScript JSON オブジェクトが、NGINX JavaScript のネイティブ オブジェクトとして利用できるようになりました。 これにより、複雑なデータ構造をより便利に管理できるようになり、NGINX JavaScript でバックエンド API から受信した JSON 応答を解析および操作できるようになります。
次のnjs
シェルの例は、組み込みオブジェクト構文を使用して JSON データを解析および抽出する方法を示しています。
$ ニュージーランドインタラクティブな njscript
v.<Tab> -> v のプロパティとプロトタイプ メソッド
詳細については、console.help() と入力してください
>> var my_data = '{"colors":[{"name":"red","fancy":"brick dust"}, {"name":"blue","fancy":"sea spray"}]}';
>> var my_object = JSON.parse(my_data);
>> my_object.colors[1].ファンシー;
海のしぶき
>>
最も人気のあるサーバー側 JavaScript 実装である Node.js には、 OS ファイルシステムにアクセスするための組み込みメソッドが用意されています (クライアント側 JavaScript ではファイルシステムへのアクセスは許可されません)。 NGINX Plus R14では、NGINX JavaScript で Node.js ファイルシステム メソッドを使用してファイルを読み書きできるようになり、アプリケーション配信ワークフローをカスタマイズできるようになりました。 以下の操作が許可されます。
fs.readFile
、 fs.readFileSync
fs.writeFile
、 fs.writeFileSync
fs.appendFile
、 fs.appendFileSync
この NGINX JavaScript シェルの例では、NGINX JavaScript を使用してファイルの内容を変数に読み込む方法を示しています。
$ ニュージーランドインタラクティブな njscript
v.<Tab> -> v のプロパティとプロトタイプ メソッド
詳細については、console.help() と入力してください
>> var fs = require('fs');
>> var tz = fs.readFileSync('/etc/timezone');
>> tz
ヨーロッパ/ロンドン
>>
開発者のデバッグとトラブルシューティングをさらに支援するために、さまざまなエラー オブジェクトが利用できるようになりました。
エラー
評価エラー
内部エラー
範囲エラー
参照エラー
構文エラー
タイプエラー
URIエラー
さらに、NGINX JavaScript では、エラーと例外のバックトレースが提供されるようになりました。 エラー ログの次のエントリは、失敗したシステム操作の単純なバックトレースを示しています。
2017/12/12 01:52:08 [エラー] 43441#43441: *10 js 例外: エラー: そのようなファイルまたはディレクトリは存在しません。native (native)
my_function (:1)
main (native)
、クライアント: 127.0.0.1、サーバー: 、リクエスト: "GET / HTTP/1.1"、ホスト: "localhost:80"
NGINX JavaScript<.htmla> の使用を開始する方法については、当社のブログをご覧ください。
NGINX Plus R13 では、 NGINX Plus APIが導入され、JSON 形式でのリアルタイム監視とメトリックへのアクセスが提供されるようになりました。 NGINX Plus R14では、組み込みのライブ アクティビティ監視ダッシュボードでNGINX Plus API が使用されるようになり、80 を超える監視メトリックがリアルタイムでユーザーに提供されるようになりました。
以前のバージョンの NGINX Plus のダッシュボードで使用されていた動的再構成および拡張ステータス API は非推奨になりました。 API はこのリリースでも引き続き利用可能であり、 NGINX Plus R15に含まれます。 これらはNGINX Plus R16で完全に削除されるため、今すぐ設定を更新することをお勧めします。
廃止されたダッシュボードの構成は次のようになります。
location /status { # 非推奨 status; # 非推奨
# 'allow' や 'deny' などのアクセスを制御するディレクティブ
}
location = /status.html { # 非推奨
root /usr/share/nginx/html; # 非推奨
}
既存の NGINX Plus インスタンスを新しい NGINX Plus ダッシュボードに移行するには、前のスニペットを次のコードに置き換えます。
location /api { api write=on;
# アクセスを制御するディレクティブ(「allow」や「deny」など)
}
location = /dashboard.html {
root /usr/share/nginx/html;
}
# 古いダッシュボードへのリクエストをリダイレクト
location = /status.html {
return 301 /dashboard.html;
}
スニペットに示されているように、 allow
およびdeny
ディレクティブなどを使用して API へのアクセスを制限することを強くお勧めします。 既存のアクセス制御を/status の
場所から/api の
場所に必ず移行してください。
新しいNGINX Plus APIの詳細については、 NGINX Plus R13 の発表を参照してください。
注記: 組み込みダッシュボードは NGINX Plus 専用です。
サーバーをオフラインにする場合、新しいセッションが確立されるのを防ぎながら既存のセッションを完了できるようにすることで、ユーザー エクスペリエンスを向上させることができます。 アクティブなセッションがなくなるまで、サーバーはオフラインになりません。 これをサーバーのドレインと呼びます。 NGINX Plus API を使用して、関連するサーバーの API リソースに{"drain":true}
を含むPATCH
リクエストを送信することで、これを動的に実行できます。
NGINX Plus R14 では、アップストリームサーバー
ディレクティブにドレイン
パラメータを提供することで、この機能をファイルベースの構成に拡張しています。
アップストリーム my_backend { サーバー 10.0.0.1;
サーバー 10.0.0.2;
サーバー 10.0.0.3 ドレイン;
}
NGINX Plus 構成をリロードすると、IP 10.0.0.3 のアップストリーム サーバーがドレイン モードになります。 後で、対応するサーバー
ディレクティブを削除するか、 draining
パラメータをdown
に置き換えることで、サーバーを完全に廃止することができます。
NGINX Plus R14では、NGINX Plus インスタンスのクラスター全体で状態を共有する今後の機能のテクノロジー プレビューを発表できることを嬉しく思います。 テクノロジー プレビューでは、セッション永続性のスティッキー ラーニングメソッドを実装し、各インスタンスで個別に管理されるセッション データを共有する利点を示します。
テクノロジー プレビューは、個別のインストール可能なパッケージとして提供され、リクエストに応じて入手できます。 アクセスするには、NGINX の営業担当者にお問い合わせください。
注:
注記: クラスタリング サポートとスティッキー ラーン セッション永続性は、どちらも NGINX Plus 専用です。
NGINX Plus R14には、次の機能強化も含まれています。
サーバー
ディレクティブのパラメーターとして使用することです。DNS は定期的に名前を解決し、NGINX Plus は修正されたサーバー セットを自動的に使用します ( NGINX Plus 管理者ガイドを参照)。 NGINX Plus では、NGINX Plus のリロード後もホスト名またはドメイン名の DNS レコードが保持されるようになりました。 以前は、リロード後に名前を再解決する必要があり、解決が完了する前に到着した要求は処理できませんでした。$ssl_client_escaped_cert
変数は、クライアント証明書を HTTP ヘッダーに安全かつ便利にエンコードして、バックエンド アプリケーションに送信できる新しい埋め込み NGINX 変数です。 変数は URL エンコードされます。NGINX Plus R14には、クライアント アプリケーションの認証機能の改善、クラスタリング機能の追加、NGINX JavaScript の機能強化、および注目すべきバグ修正が含まれています。 特に、 NGINX Plus R13では、アクティブ ヘルス チェックにバグが導入され、古いワーカー プロセスがヘルス チェックを無期限に実行する可能性があるという問題がありました。 これはNGINX Plus R14で解決されました。
NGINX Plus を実行している場合は、できるだけ早くリリース 14 にアップグレードすることを強くお勧めします。 数多くの修正と改善が加えられ、アップグレードすることで、サポート チケットを発行する必要があるときに NGINX がサポートしやすくなります。 インストールおよびアップグレードの手順は、カスタマー ポータルで参照できます。
アップグレードを進める前に、このブログ投稿に記載されている新機能と動作の変更をよく確認してください。
NGINX Plus をまだお試しいただいていない方は、Web アクセラレーション、負荷分散、アプリケーション配信、または強化された監視および管理 API を備えた完全にサポートされた Web サーバーとして、ぜひお試しください。 30 日間の評価期間を無料で今日から始めることができます。 NGINX Plus がアプリケーションの配信と拡張にどのように役立つかを実際にご確認ください。
「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"