Version:Washingtondc
ServiceNowのREST API Access Policyを試します
Adaptive Authentication(適応認証)
ServiceNowにはAdaptive Authenticationという機能がありIPアドレス(IP)、ユーザーロール(Role)、ユーザーグループ(Group)などの基準(Criteria)で認証を許可/制限出来る機能があるようなのですが
設定できる対象はログイン画面を利用した通常のユーザーのログインに限られるようで…RESTに関してはREST API Access Policyという機能を使うようです
REST API アクセスポリシー
適応認証フレームワークのフィルター基準を使用して、受信した ServiceNow REST API へのアクセスを制限できます。詳細については、「REST API アクセスポリシー」を参照してください。
REST API Access Policy
特定のIPからのアクセスだけ許容するように設定します IP Filter Criteriaに許可したいIPの情報を設定して以下の設定を作ります IPv4しか試していません
REST API Access PolicyはAllowの設定しかできないようなので許可した設定以外からのアクセスは不許可になります 複数の条件を設定する際はConditionを工夫する必要がありそうです Adaptive AuthenticationはAllowとDenyの設定が使えそうです
RESTに限らず全てのアクセスの許可/制限を設定するのであればIP Address Access Controlという機能を利用する方が良いと思います
手順
REST API Access Policyのアクティブ化
以下手順でREST API Access Policyをアクティブ化出来るようですが自分のPDIだと最初からアクティブ化されていたようなので不要かも知れません
Adaptive Authenticationも最初からアクティブ化されていた気がしているのですがもし以降の手順で表示されているメニューが見当たらないといったようなことがありましたら以下手順でインストール/アクティブ化してみてください
IP Filter Criteria
最初にCriteriaを準備します CriteriaはIP, Role, Groupを設定できるようですが今回はIP Filter Criteriaを使います
Filter navigatorにadaptive authenなどと入力してメニューを絞り込み Adaptive Authentication - Filter Criteria - IP Filter Criteria を選択します
IP Filter Criteriaの一覧が表示されるので画面右上の[New]ボタンをクリックします
IP Filter Criteriaの編集画面が表示されるのでNameに適当な名前とIP Rangeの関連リストに許可したいIPのRangeのStart IPとEnd IPを設定します IPの設定は複数行で設定することもできます Subnet(CICR)ではSubnet Maskで設定することもできます 設定できたら[Submit]などで設定を保存します
REST API Access Policies
Filter navigatorにrest api accなどと入力してメニューを絞り込み System Web Services - API Access Poliies - REST API Access Policies を選択します
選択するとREST API Access Policiesの一覧が表示されます
情報を投稿するPOST Methodを試したいのでPOST API Access Policyを選択します 情報を取得するGET Methodを試す場合はGET API Acceess Policyを使うと思います
Activeがfalseになっていますが設定したいCriteriaがない状態で有効にするとアクセスできなくなる可能性があるので一通り設定が終わってからtrueにしてみます
画面下部のInbound authentication profilesからAuthentication profileのInsert a new row...をクリックすると虫眼鏡のアイコンが表示されるのでクリックします
Authentication profile
Authentication Profileを選択出来る一覧が表示されますが既存の設定を変更するのも怖いので画面右上の[New]ボタンをクリックします
どんな種類のauthentication profileを作成するか聞かれるので標準的な設定を試したいと思い一番上のCreate Standard http authentication profilesをクリックします
Standard Authentication Profileの編集画面が表示されるのでNameに適当な名前を入力して画面上部の灰色の箇所を右クリックして表示されるメニューで一旦Saveを選択するなどして設定を保存してから
画面下部のAuthentication PoliciesのAuthentication PolicyのInsert a new row...をクリックすると虫眼鏡のアイコンが表示されるのでクリックします
Authentication Policy
Authentication Policyを選択出来る一覧が表示されますが既存の設定を変更するのも怖いので既存の設定がよくわからないので画面右上の[New]ボタンをクリックします
Authentication Policyの編集画面が表示されるのでNameに適当な名前を入力して画面上部の灰色の箇所を右クリックして表示されるメニューで一旦Saveを選択するなどして設定を保存してから
画面下部にPolicy InputsとPolicy Conditionsの設定項目が表示されるので
Policy Inputsのタブを選択して[Edit]をクリックします
Policy Inputs
Criteriaを選択する画面が表示されるのでCollectionから利用したいCriteriaを選択して[>]をクリックして
Policy Inputs Listに加えて[Save]します
Policy Conditions
Authentication Policyの編集画面に戻ったらPolicy Conditonのタブを選択して[New]をクリックします
Conditonの編集画面が表示されるのでLabelに任意の値を入力してConditionでPolicy Inputsで選択したCriteriaを選択してis trueをを選択して[Submit]などで保存します
作成した設定をすべて繋ぎ合わせてActiveに
REST API Access Policyの設定
ここまでの手順をそのまま進めているとREST API Access PolicyのInbound authenticatipn profilesが画面遷移先で保存しただけで設定されていないのでREST API Access Policyの編集画面に戻りAuthentication profileをクリックして作成したAuthentication profileを設定します
ActiveをtrueにしてAuthentication profileを設定したら[Save]などで保存します
Authentication profileの設定
Authentication profileも同様に設定されていないと思われますので設定画面に戻りAuthentication Policyを設定して保存します
REST API Access PolicyをActiveに
最後にREST API Access PolicyのActiveをtrueに設定して保存します
動作確認
許可されていないIPからPOSTすると401エラーになると思います
*** Script: {"error":{"message":"User Not Authenticated","detail":"Required to provide Auth information"},"status":"failure"}
*** Script: 401
設定したIPアドレスの範囲がうっかり重なってしまっていた場合などJavaの例外が発生していたような気がします 無効にしているConditionの設定が重なっているだけで例外になったような気がしていますが一旦全て消してしまって再現しなくなったのでよく分からずです