高度なAccess Gatewayポリシーの例

このトピックでは、高度なポリシー構成例を提供します。これらの例は、説明および教育のみを目的としています。

すべてのURI文字列の大文字と小文字を指定する

説明:すべてのURI文字列を小文字に変換することで、大文字と小文字が混在したURIを避けます
必要な
構成
アダプティブポリシーで変更する必要のあるroot '/'ポリシーに適用されます。
#set all URIs to lower case if ($request_uri ~ "/.*/.*$") { set_by_lua_block $request_uri_temp { return string.gsub(ngx.var.request_uri, "?.*", "") } set_by_lua $request_uri_low "return ngx.arg[1]:lower()" $request_uri_temp; rewrite ^ https://$host$request_uri_low; }

特定のURIリクエストのフィールドのみを送信する

説明:すべてのURLにすべてのフィールドを渡す必要は、不要な場合もあります。カスタム構成を使用して、特定のリクエストに特定のフィールドを送信するためのポリシーを作成できます。
必要な
構成

特定のリソースに対して保護ルールが存在します。属性を[Don't Send(送信しない)]に設定します。
属性を[Don't Send(送信しない)]に設定します。

ヘッダーに変数を追加します。

set $TEST " "; # Set a value for later use proxy_set_header header_name $TEST; #Add a value to the HTTP Header

大容量ファイルのアップロード/ダウンロードタイムアウトを設定する

説明:Access Gatewayで大容量ファイルをアップロードまたはダウンロードしようとした場合、ネットワークエラーでが返されます

シナリオ

アプリケーションを、大容量ファイルを転送するAccess Gatewayに統合します。

一定のサイズを超えるファイルは、ネットワークエラーを引き起こします。

必要な
構成
指定されたリソースの保護ルール(またはデフォルトルール)で、[Advanced(詳細設定)] > [Custom configuration(カスタム構成)]に進み、送信タイムアウトを指定します。
# # Specify a longer timeout for file uploads/downloads to the backend protected resource # send_timeout 5m;

別のURLとエラーコードを戻すことを強制する

説明:特定のURIに対して、特定のリターンコードとURLを返すことが要求されることがあります。
必要な
構成
特定のリソースに対して保護ルールが存在します。
# Regardless of the behavior, # for the given protected resource # return 301 return 301 https://www.okta.com;

クエリ引数に基づき動作を指定する

説明:指定されたURIの動作は、受信クエリ値に依存する可能性があります。たとえば、テストデータの認証をスキップするなどです。
必要な
構成
特定のリソースに対して保護ルールが存在します。
#If the query argument test is equal to demo #then set the policy type field to NO_AUTH if ($arg_test = "demo") { set $policy_type "NO_AUTH"; };

URL文字列の書き換え

説明:ゲートウェイでurlの書き換えが有効になっている場合でも、一部のリンクやリダイレクトがブラウザを間違った場所に誘導します。

シナリオ

パブリックドメイン:gw.okta.com
内部リソース:app1.okta.com
一部のリンク/リダイレクト先:app1.okta.comの代わりにgw.okta.com

必要な
構成
特定のリソースに対して保護ルールが存在します。

備考

デフォルトでは、subs_filterテキスト/htmlドキュメントでのみ機能します。
この例では、圧縮データは使用できません。

subs_filter http://gw.okta.com https://app1.okta.com;

例2

# specify the types of files to process subs_filter_types text/html text/css text/xml; # # replace source (internal....) with destination (app1...) using flags ig # i: ignore case # g: replace all matched strings subs_filter internaldomain1.okta.com app1.okta.com ig; subs_filter internaldomain2.okta.com app1.okta.com ig;

詳細については、次を参照してください。

https://www.nginx.com/resources/wiki/modules/substitutions/

Chrome以外のエージェントを異なるロケーションにリダイレクトする

顧客は、ボットやそのほかの自動リクエストがサーバーに到達するのを防ぎたいと考えています。
特定のユーザーエージェント(この場合Chrome)を使用していないすべてのユーザーを、別のURLにリダイレクトします。

シナリオ

ユーザーエージェントがChromeの場合、特定のURLにリダイレクトし、301(恒久的に移動)を返します。

必要な
構成
特定のリソースに対して保護ルールが存在します。
if ($http_user_agent !~* Chrome ) { return 301 https://www.okta.com; }

特定のファイルタイプを保護しない

顧客は別のプラットフォームから移行してきており、すべての画像、ス対スリーと、および類似のファイルを公開したいと考えています。

シナリオ

顧客は、以前に別のプラットフォームを使用しており、画像、スタイルシート、および類似のファイルへの無制限のアクセスを許可するポリシーを必要としました。Access Gatewayに対しても同じことを行いたいと考えています。

必要な
構成
特定のリソースに対して保護ルールが存在します。
if ($request_uri ~ "^.*.png$") { set $policy_type "NO_AUTH"; } if ($request_uri ~ "^.*.jpg$") { set $policy_type "NO_AUTH"; } if ($request_uri ~ "^.*.css$") { set $policy_type "NO_AUTH"; }

AJAXセッション処理の拡張

AJAX呼び出しを使用するアプリケーションは、セッションタイムアウト後にハングアップしたり、更新が必要になったりします。

シナリオ

顧客アプリケーションがAJAXを呼び出します。
アプリケーションは一定期間アイドル状態で、セッションがタイムアウトします。
その後、アプリケーションはフォローアップのAJAX呼び出しを実行しますが、非アクティブセッションのために失敗します。

必要な
構成
特定のリソースに対して保護ルールが存在します。


このスクリプトが一旦組み込まれると、関連するスクリプトは定義された間隔で実行され、ユーザーセッションが非アクティブかどうかを確認します。ユーザーセッションが期限切れになると、スクリプトはユーザーに対し警告を発し、ページを更新します。その後、ユーザーは、Oktaセッションが存在する場合は新しいセッションを取得し、存在しない場合は再度認証を行う必要があります。

スクリプトは、3つのパラメータを受け付けます。

  • oagSMTimeoutSeconds:必須、デフォルトではない。セッションをチェックするスクリプトを実行する頻度を秒単位で指定する。
  • oagSMAlertEnabled:デフォルトはである場合、アラートが表示されます。
  • oagSMAlertMessage:アラートで表示されるメッセージ。
    デフォルト:Session timed out due to inactivity(一定期間操作がなかったためにセッションがタイムアウトしました)

適切なシナリオを以下からレビューして選択します:

アプリケーションページにJQueryライブラリがすでに含まれている場合は、JQueryを使用していると見なされます。

アプリケーションはJQueryを使用する
注:サンプルメッセージを顧客に表示されるメッセージに置き換えます。
proxy_set_header Accept-Encoding "";
アプリケーションはJQueryを使用しない
注:サンプルメッセージを、お客様に表示されるメッセージに置き換えます。
proxy_set_header Accept-Encoding "";subs_filter "</head>" "<script type=\"text/javascript\"> window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true, \"oagSMAlertMessage\" : \"Your message to be displayed\"}; </script> <script type=\"text/javascript\" src=\"/AQUNAAsIAAM/dist/jquery-2.2.4.min.js\"> </script> <script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></head>";
アプリケーションはiFrameとJQueryを使用する
お客様はiFrameページの1つで<tag-to-replace>で表される置換タグを識別する必要があります。
proxy_set_header Accept-Encoding "";subs_filter "</tag-to-replace>" "<script type=\"text/javascript\"> window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true, \"oagSMAlertMessage\" : \"Your message to be displayed\"}; </script> <script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></tag-to-replace>";
アプリケーションはiFrameを使用するがJQueryを使用しない
お客様は、iFrameページの1つで<tag-to-replace>で表される置換タグを識別する必要があります。
proxy_set_header Accept-Encoding ""; subs_filter "</tag-to-replace>" "<script type=\"text/javascript\"> window.oagSMParams={\"oagSMTimeoutSeconds\" : 60, \"oagSMAlertEnabled\" : true, \"oagSMAlertMessage\" : \"Your message to be displayed\"}; </script> <script type=\"text/javascript\" src=\"/AQUNAAsIAAM/dist/jquery-2.2.4.min.js\"> </script> <script src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></tag-to-replace>";

特定の文字によるリクエストの拒否

リクエストの拒否

シナリオ

バックエンドWebアプリケーションへの攻撃では、特定の文字が使用されます。
これらの文字を除外できるようにすることで、これらの攻撃を避けることができます。

必要な
構成
特定のリソースに対して保護ルールが存在します。
header_filter_by_lua_block { -- add characters inside of brackets reBadChars = '[><]' if string.match(ngx.var.uri, reBadChars) then ngx.log(ngx.STDERR, "Bad chars found in URI") return ngx.exit(403) end }

WebSocketセキュリティ

WebSocketの使用

シナリオ

WebSocketプロトコルはHTTPの上に付与されます。
Access Gatewayは、HTTP呼び出しからWSS呼び出しに変換することをバックエンドサーバーに通知しなければなりません。

必要な
構成

各WSSリソースに対し、保護ルールが存在します。
たとえば、WSSリソースごとに保護ルールを作成します:

  1. 名前:websocket
  2. リソース:/uri/to/websocket
  3. タイプ:保護対象
  4. 個々のリソースごとに2つのスクリプト要素を追加します。
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";