ブログ | NGINX

NGINX Plus R14 の発表

NGINX-F5 水平黒タイプ RGB の一部
リアム・クリリー サムネイル
リアム・クリリー
2017 年 12 月 12 日公開

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の追加機能は次のとおりです。

  • 拡張クラスタリング サポート(テクノロジー プレビュー) – クラスタ内の NGINX Plus インスタンス間で状態情報を共有するための新しい機能のプレビューをテストすることをお勧めします。 プレビューでは、スティッキー学習セッション永続化メソッドの状態が共有されます。 今後のリリースでは、クラスタリング サポートを他の NGINX Plus 機能に拡張する予定です。
  • より長い JWT キー サイズ– ネストされた JWT クレームと配列データのサポートに加えて、JWT 署名アルゴリズムではより長いキー サイズ (最大 512 ビット) がサポートされるようになりました。 これにより、JWT を検証する際のセキュリティと柔軟性が向上します。
  • ストリーム キー値ストアと API – リリース 13 で HTTP アプリケーション用に導入された強力なキー値ストアと API が、ストリームコンテキストの TCP および UDP アプリケーションに拡張されました。
  • NGINX JavaScript モジュールの機能強化– NGINX Plus で JavaScript コードを実行できるようにするモジュールに、JSON オブジェクトの追加言語サポートが追加されました。 [このモジュールは以前は nginScript と呼ばれていました。]これにより、バックエンド API からネイティブに受信した JSON 応答から情報を解析して抽出し、Node.js スタイルのメソッドを使用してファイルシステムにアクセスできるようになります。 このモジュールでは、デバッグとトラブルシューティングを容易にするために、さまざまな例外およびエラー オブジェクトが発生したときにバックトレースを提供するようになりました。
  • その他の機能– NGINX Plus には、更新されたライブ アクティビティ監視ダッシュボード、新しい SSL 変数、アップストリーム サーバー ドレイン機能も備わっています。

行動の変化

  • NGINX Plus API がバージョン 2 にアップグレードされました。 新しい NGINX Plus API 機能の使用を検討している場合は、 API 互換性ドキュメントを確認してください。
  • Upstream-Confおよび拡張 Status モジュール ( upstream_confおよびstatusディレクティブで有効化) の API は、NGINX Plus R13以降では非推奨になりました。 これらは、R14 に含まれる更新されたライブ アクティビティ監視ダッシュボードで使用される新しいNGINX Plus APIに置き換えられました。
  • NGINX Plus が Ubuntu 17.10 (Artful Aardvark) で利用できるようになりました。
  • NGINX Plus は Debian 7 (Wheezy) ではサポートされなくなりました。

NGINX Plus R14 の機能詳細

JWT の強化

API とマイクロサービスのデプロイ担当者は、そのシンプルさと柔軟性から、JSON Web Token (JWT、「ジョット」と発音) 標準に注目し始めています。 JWT は、ID 情報を交換するためのコンパクトで移植性の高い手段です。 Okta、OneLogin、自社開発ソリューションなど、さまざまな発行者から JWT を取得できます。 NGINX Plus は、ユーザーまたは API クライアントが有効な JWT を提示したかどうかに基づいて、アクセスを許可または拒否できます。

NGINX Plus R14 では、ネストされた JWT クレームと配列データのサポート、および 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 に設定されます。
  • /admin URI のロケーションブロックは$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 を認証するために使用できるすべての設定ディレクティブの詳細については、リファレンス ドキュメントを参照してください。

JWT 署名アルゴリズムのキーサイズの拡大

NGINX Plus R14では、256 ビット、384 ビット、512 ビットの署名キーがサポートされるようになり、署名の検証が強化され、デフォルトでより長い署名キーを使用する ID およびアクセス管理 (IAM) 製品との統合が容易になりました。 より長い署名キーは、サポートされているすべての署名アルゴリズムで使用できます。

  • SHA-2 を使用した HMAC (“HS”)
  • RSA PKCS #1 と SHA-2 (“RS”)
  • 楕円曲線デジタル署名アルゴリズム (“ES”)

たとえば、 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 専用です。

ストリームモジュールのキーバリューストアと API

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 モジュールの機能強化

NGINX JavaScript モジュール (旧称 nginScript) は、NGINX Plus 用の JavaScript ベースのスクリプト言語です。 NGINX Plus R14では、NGINX JavaScript の機能が拡張され、プログラミング性がさらに向上しました。 更新された NGINX JavaScript 動的モジュール パッケージでは、次の新しい機能強化が提供されます。

JSON オブジェクトのサポート

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.readFilefs.readFileSync
  • 書き込み – fs.writeFilefs.writeFileSync
  • 追加 – fs.appendFilefs.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 ダッシュボード NGINX Plus API の使用

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に置き換えることで、サーバーを完全に廃止することができます。

Sticky Learn のクラスタリング サポート (テクノロジー プレビュー)

NGINX Plus R14では、NGINX Plus インスタンスのクラスター全体で状態を共有する今後の機能のテクノロジー プレビューを発表できることを嬉しく思います。 テクノロジー プレビューでは、セッション永続性のスティッキー ラーニングメソッドを実装し、各インスタンスで個別に管理されるセッション データを共有する利点を示します。

テクノロジー プレビューは、個別のインストール可能なパッケージとして提供され、リクエストに応じて入手できます。 アクセスするには、NGINX の営業担当者にお問い合わせください。

注:

  1. スティッキー ラーニング クラスタリング機能はプレビュー状態であるため、本番環境での使用には適していません。 クラスター全体での状態共有が環境にとって重要な要件である場合は、テクノロジー プレビューをテストし、ニーズをどの程度満たしているかについて NGINX にフィードバックすることをお勧めします。
  2. テクノロジー プレビュー パッケージは、CentOS/RHEL/Oracle Linux 7、Debian 8 および 9、Ubuntu 16.04、16.10、17.10 で利用できます。

注記: クラスタリング サポートとスティッキー ラーン セッション永続性は、どちらも NGINX Plus 専用です。

追加機能

NGINX Plus R14には、次の機能強化も含まれています。

  • リロード間のリゾルバ状態の永続性 – アップストリーム グループ内のサーバー セットを動的に再構成する 1 つの方法は、ホスト名またはドメインをサーバーディレクティブのパラメーターとして使用することです。DNS は定期的に名前を解決し、NGINX Plus は修正されたサーバー セットを自動的に使用します ( NGINX Plus 管理者ガイドを参照)。 NGINX Plus では、NGINX Plus のリロード後もホスト名またはドメイン名の DNS レコードが保持されるようになりました。 以前は、リロード後に名前を再解決する必要があり、解決が完了する前に到着した要求は処理できませんでした。
  • 新しい SSL クライアント証明書変数 – $ssl_client_escaped_cert変数は、クライアント証明書を HTTP ヘッダーに安全かつ便利にエンコードして、バックエンド アプリケーションに送信できる新しい埋め込み NGINX 変数です。 変数は URL エンコードされます。

NGINX Plus をアップグレードまたは試用する

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 コンテンツにリダイレクトされます。"