高度なAccess Gatewayポリシーの例

以下は高度なポリシー構成の例です。これらの例は説明目的のみに使用されます。

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

説明:すべてのURI文字列を小文字に変換することで大文字と小文字が混在するURIを回避
必要な
構成
root '/'ポリシーに適用され、アダプティブポリシーに変更される
#set all uri's 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(カスタム)]構成で、そのリソースの保護ルール(またはデフォルトルール)で送信されるタイムアウトを指定します。
# # 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_filtertext/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:デフォルト:falsetrueの場合はアラート出します。
  • oagSMAlertMessage:アラートで表示するメッセージ。
    デフォルトはSession timed out due to inactivity(アクティブでないため、セッションがタイムアウトしました)

以下を確認し、適切なシナリオを選択します:

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

アプリケーションは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 src=\"/AQUNAAsIAAM/js/sessionTimeout.js\"></script></head>"; 
アプリケーションは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ページで、<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ページで、<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. タイプ:protected(保護)
  4. 各リソースごとに2つのスクリプト要素を追加する
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";