メインコンテンツへスキップ
見出し画像

Access Analyzer:「見えない」の理由を層で切り分ける


    「ロールを付けたのに、あの画面が見えないと言われました」。ServiceNow の運用で、いちばん時間を取られる相談のひとつです。

    原因の候補は多いのです。ACLの条件、ロールの不足、データフィルタ。加えてアクセスハンドラや、ACLの中のスクリプトもあります。どれが効いているのかを人が追うのは骨が折れます。

    Access Analyzer は、この切り分けを機械にやらせる管理ツールです。今回は実機で解析リクエストを作りながら、この機能が何を層に分けて見せてくれるのかを確認します。

    この記事は、ServiceNow の PDI(Personal Developer Instance、無料の個人検証環境)Zurich リリース・OOTB(初期設定)で確認した実測メモです。件数・項目は REST と実画面で確認しました(確認日 2026-07-26)。本番環境では設定が異なります。

    メニューの4つはすべてUXページ

    アプリケーションメニュー「Access Analyzer」の下には、モジュールが4つあります。


    画像

    実測すると、4つとも link_type が「URL (from Arguments)」でした。クラシックのテーブル一覧ではなく、now/access-analyzer/... という UX(Next Experience)のページ を指しています。

    3つの名前には、外部を開くことを表す右上向きの矢印アイコンが付いています。別画面へ飛ぶ印で、従来のフォーム画面とは操作感が違うことを示しています。

    画面を開く

    /now/access-analyzer/home を開きました。


    画像

    見出しは Analyze access and permissions。サブタイトルには「View permissions for a selected user, role, group, or compare access for two users」とあります。

    上部のタブは3つでした。Analyze Permissions / Access Simulator / Settings。そして中のタブも3つ。Evaluate access / Compare user records / Compare user access。

    Evaluate access の説明は「Evaluates permissions for a selected user, role, or a group」。ひとりの利用者、あるいはロールやグループの権限を評価する画面です。

    入力欄は素直でした。Analyze by(既定は User)/ Select user / Rule type(既定は Table (record))。続いて Select table / Select record / Select field / Short description。そして「Evaluate access」のボタンです。

    右側には「How to evaluate access」というチュートリアル動画と、Helpful Resources のリンクが並びます。管理ツールとしては親切な作りです。

    画面の下部には Previously searched criteria(過去の条件)という欄もありました。同じ調査を繰り返すときに、条件を選び直さずに済みます。

    解析リクエストの中身を読む

    画面で入力した内容は、sn_access_analyzer_request というテーブルに1件として残ります。フィールドを見ると、この機能がどこまで調べられるかが分かります。


    画像

    analyze_by は3択。User / Group / Role。個人だけでなく、ロールやグループの単位でも調べられます。「このロールを持つと何ができるようになるか」を確認する使い方です。

    resource_type は4択でした。record / client_callable_script_include / ui_page / rest_endpoint。

    テーブルのレコードだけでなく、クライアントから呼べる Script Include、UIページ、REST エンドポイントまで対象になります。ACLはテーブルだけの話ではないので、この4つが揃っているのは実用的です。

    operations は sys_security_operation への複数選択でした。read / write / create / delete のほかに、細かい操作も並びます。report_view / list_edit / add_to_list / personalize_choices など。

    evaluated_using は2択。evaluate_access(評価)と compare_access_control(比較)。画面のタブと対応しています。

    実際に1件作ってみる

    REST でリクエストを作りました。Abel Tuter という利用者が incident テーブルに対して read / write / create / delete をできるか、という内容です。


    画像

    作成は成功しました。ただし、この時点で結果テーブル(sn_access_analyzer_access_result)は 0件のまま です。


    画像

    last_run フィールドも空でした。リクエストを作っただけでは解析は走りません。画面の「Evaluate access」ボタンを押して初めて実行される設計です。

    条件を保存しておいて、必要なときに実行する。過去の条件が画面下部に並ぶのは、このリクエストのレコードが溜まるからでした。

    結果は「層ごと」に記録される

    この機能のいちばんの見どころが、結果テーブルのフィールド構成です。


    画像


    画像

    sn_access_analyzer_access_result は、判定を1つの結論として持ちません。層ごとに分けて持ちます。

    • acl_result … ACL の判定

    • accesshandler_result … アクセスハンドラの判定

    • datafiltration_result … データフィルタの判定

    • script_execution … スクリプトの実行結果

    • record_available … そもそもそのレコードが届いているか

    • read_only_field … 読み取り専用フィールドかどうか

    • admin_override_applied … admin による上書きが効いたか

    • overall_access … 全体としての結論

    この分け方が、調査の時間を大きく縮めます。

    「見えない」という相談を受けたとき、原因は複数の層のどこかにあります。ACLで弾かれたのか、データフィルタで行が絞られたのか、ACLの中のスクリプトが false を返したのか。人が追うなら、それぞれを別々に確認する必要があります。

    Access Analyzer は1回の実行で、すべての層の判定を並べて返します。どこで止まったかが一目で分かる形です。 これが「解析ツール」と呼ばれる理由です。

    admin で試すと通る問題

    admin_override_applied というフィールドがあるのも実務的です。

    調査のとき、admin 権限で試すと問題なく見えてしまう。よくある落とし穴です。admin はほとんどのACLを飛び越えるので、利用者と同じ結果になりません。

    このフィールドがあれば、「admin の上書きが効いた結果である」ことが記録に残ります。判定を読むときに、それが本当の権限なのか admin の特権なのかを区別できます。

    操作ごとに1行

    結果は operation フィールドを持ち、操作ごとに1行になります。read はできるが write はできない、という状態が行ごとに分かれて記録されます。

    「一覧には出るが編集できない」という相談は、read が通って write が止まっている状態です。操作を分けて記録するからこそ、この違いが見えます。

    3つのタブの使い分け

    画面の3つのタブは、調査の種類で分かれていました。

    Evaluate access は、ひとりの権限を調べます。「この人はこれができるか」。いちばん基本の使い方です。

    Compare user records は、同じ人が複数のレコードにアクセスできるかを比べる画面。「同じテーブルなのに、このレコードだけ見えない」という相談に使えます。データフィルタや条件つきACLの影響を見分けられます。

    Compare user access は、2人の利用者を比べます。「同僚は見えるのに自分だけ見えない」という相談に、これが効きます。ロールの差なのか、グループの差なのか、条件の差なのか。2人の判定を並べれば、違いが浮かびます。

    比較用のテーブル(sn_access_analyzer_access_comparison_request)が別に用意されているのも、この機能が独立していることの表れです。評価と比較で保存する内容が違うため、テーブルを分けたと読めます。

    3つの使い分けは、相談の言い方でだいたい決まります。「これができない」なら Evaluate access。「このレコードだけ見えない」なら Compare user records。「あの人はできるのに」なら Compare user access。相談者の言葉をそのままタブの選択に使えます。

    過去の条件は別画面で見る

    モジュールの2つめ「Access Analyzer Queries」は、now/access-analyzer/queries を指します。


    画像

    保存された解析条件の一覧です。実体は sn_access_analyzer_request テーブルなので、クラシックの一覧からも同じものが見られます。

    同じ調査を何度もするなら、この一覧が効いてきます。「先月と同じ条件で、ロールを付けた後の状態を確認する」といった使い方です。条件を再入力せずに済むので、確認の手間が減ります。

    Access Simulator は「もし」を試す

    上部タブの Access Simulator は、この記事では中身を確認していません。名前から読めるのは、「ロールを追加したらどうなるか」を実際に付与せずに試す機能だということです。

    権限の相談で難しいのは、解決策の検証です。「このロールを足せば見えるはず」と思っても、付けてみるまで分かりません。付けて間違っていれば、外す手間と、その間に見えてしまったデータの問題が残ります。

    付けずに試せるなら、この危険を避けられます。実測では未確認ですが、設計の意図としては筋が通っています。

    ACLの一覧と行き来する

    Access Analyzer はどこで止まったかを教えてくれますが、直すのは元のACLです。


    画像

    sys_security_acl を対象テーブルで絞ると、そのテーブルに効いているACLが並びます。operation ごとに複数のACLが定義されていて、それぞれが必要なロールと条件を持ちます。

    ACLの評価は、テーブル単位・フィールド単位・レコード単位が重なって効きます。「テーブルのreadは通るが、あるフィールドのreadで止まる」という状態も起こります。この重なりを人が読み解くのが難しいからこそ、解析ツールが用意されているわけです。

    調査の流れとしては、Access Analyzer で層を特定し、ACLの一覧で該当するルールを見つけ、条件やロールを直す。直したらもう一度 Access Analyzer で確認する。この往復で完結します。

    ロールを足す前に考える

    「見えないならロールを足せばいい」は、いちばん安易な解決です。ただしロールは、そのテーブルだけでなく他の多くのACLにも効きます。1つの相談を解決するために付けたロールが、意図しない範囲まで開けてしまうことがあります。

    Access Analyzer で原因を層まで特定できていれば、別の解き方も見えてきます。条件を直す、グループに入れる、データフィルタを調整する。ロールを足すのは、それらで解けないときの選択肢にします。そのほうが後始末が軽く済みます。

    analyze_by に Role を選べるのは、この判断のためでもあります。「このロールを付けると何ができるようになるか」を先に確認してから付ける。順番を守れば、後始末が減ります。

    なぜ層に分けるのか

    ServiceNow のアクセス制御が層になっているのは、それぞれが別の目的を持つからです。

    ACL は「このロールを持つ人に、この操作を許す」という基本の取り決めです。テーブル・フィールド・レコードの単位で定義でき、条件やスクリプトも書けます。実務で触る機会がいちばん多いのがこの層です。

    データフィルタは行を絞ります。「自分の部署のレコードだけ見える」といった制限は、ACLの条件でも書けますが、データフィルタのほうが宣言的に書けます。

    アクセスハンドラは、独自の判定処理を差し込む口です。標準の仕組みで表せない要件に使います。

    スクリプト実行は、ACLの中に書いたスクリプトの結果です。条件では表せない判定を書けますが、読みにくくなりがちです。

    4つが重なると、どこで止まったのか分からなくなります。だから Access Analyzer は、結論を1つ返すのではなく、層ごとの判定を並べて返す。「見えない」ではなく「どの層で止まった」まで返すのが、このツールの価値です。

    実務で気をつけるところ

    まず overall_access、次に層を見る

    結果を読む順番は決まっています。最初に overall_access で結論を確認し、それが期待と違うなら層のフィールドを順に見る。

    層を先に読むと、どれが決め手だったのかを見失います。結論から入って、原因へ降りていくのが早道です。

    admin で調査しない

    繰り返しになりますが、admin で画面を開いても利用者の見え方は分かりません。Access Analyzer なら、対象の利用者を指定して調べられます。

    admin_override_applied を確認する習慣をつけておけば、誤った結論を出さずに済みます。

    対象はテーブル以外にもある

    ACLの調査というとテーブルとフィールドに目が行きますが、resource_type には UI ページ、REST エンドポイント、Script Include も含まれます。

    「APIを叩くと403が返る」という相談は、テーブルのACLではなく REST エンドポイント側の問題であることがあります。対象の種類を選べることを覚えておくと、調査の当てが増えます。

    相談を受けたら、まず対象を特定する

    Access Analyzer を使うには、誰が・何に・どの操作を、を決める必要があります。この3つが曖昧なままでは実行できません。

    実は、ここが調査でいちばん大事な工程です。「見えない」という相談は、たいてい曖昧です。どの画面か、どのレコードか、閲覧なのか編集なのか。聞き取りの段階で3つを確定させれば、あとはツールが答えを出します。

    逆に言えば、Access Analyzer の入力欄そのものが聞き取りのチェックリストになります。Analyze by / Select user / Rule type。続けて Select table / Select record / Select field。この順に埋められれば、相談は調査可能な形になっています。

    現場では「とりあえず admin に聞いてみる」で止まることが多いものです。入力欄を埋める形で聞き取れば、相談者自身も状況を整理できます。調査の道具が、そのまま会話の型としても使えるわけです。

    結果は保存される

    解析リクエストがテーブルに残るので、過去の調査を再現できます。同じ相談が繰り返し来る場合、条件を保存しておけば毎回入力し直さずに済みます。

    「Previously searched criteria」の欄は、そのための入口でした。監査で「この時点でこの人は何が見えたか」を示す必要があるとき、記録が残っていれば説明が早くなります。

    どこから触るか

    • /now/access-analyzer/home … 権限の評価・比較(UXページ)

    • /now/access-analyzer/queries … 過去の解析条件

    • /sn_access_analyzer_request_list.do … 解析リクエストのテーブル

    • /sn_access_analyzer_access_result_list.do … 結果のテーブル

    • /sys_security_acl_list.do?sysparm_query=name=incident … 対象テーブルのACL一覧

    Access Analyzer で原因の層が分かったら、ACLの一覧に戻って現物を確認する。この往復で調査が完結します。

    まとめ

    Access Analyzer は、権限の「見えない」を層で切り分けるツールでした。

    メニューの4つはすべてUXページを指し、実際の操作は /now/access-analyzer/home で行います。調べる対象は User / Group / Role の3種類、対象の種類は record / Script Include / UIページ / REST エンドポイントの4種類。

    結果は ACL / アクセスハンドラ / データフィルタ / スクリプト実行の層ごとに記録されます。そのうえで overall_access に全体の判定が出る。admin の上書きが効いたかどうかも別フィールドで残ります。

    リクエストを作っただけでは解析が走らず、画面のボタンで実行する設計でした。条件がテーブルに残るので、繰り返す調査ほど楽になります。

    用語

    • Access Analyzer … 権限の判定を層ごとに分解して見せる管理ツール

    • analyze_by … 誰の権限を見るか。User / Group / Role

    • resource_type … 何に対する権限か。record / Script Include / UIページ / REST エンドポイント

    • overall_access … 全体としての判定結果

    • acl_result / accesshandler_result / datafiltration_result … 層ごとの判定

    • admin_override_applied … admin の特権で通ってしまったかどうか

    • Access Simulator … ロールを付けずに「もし付けたら」を試す画面

    自分の環境で確認するときのURL

    • /now/access-analyzer/home(評価画面・3つのタブ)

    • /now/access-analyzer/queries(過去の解析条件)

    • /sn_access_analyzer_request.do?sys_id=...(作成した解析リクエスト)

    • /sn_access_analyzer_request_list.do(リクエスト一覧)

    • /sys_security_acl_list.do?sysparm_query=name=incident(incident のACL)

    実測の要点(再掲)

    • メニューのモジュール4つは、すべて now/access-analyzer/... のUXページを指す

    • 関連テーブルは4つで、いずれも標準では0件

    • analyze_by は User / Group / Role、resource_type は4種類、evaluated_using は2種類

    • 解析リクエストを1件作成したが、結果テーブルは0件のまま。last_run も空

    • 結果は ACL / アクセスハンドラ / データフィルタ / スクリプト実行 の層ごとに分かれて記録される

    • admin_override_applied があり、admin の特権で通った場合が区別できる

    検証範囲とおことわり

    • 件数・項目・選択肢は PDI(Zurich / OOTB)の実測です。本番環境の設定とは異なります。

    • 画面の「Evaluate access」ボタンは押していません。結果テーブルは0件のまま、フィールド構成の確認までです。

    • Access Simulator と Settings タブの中身は未確認です。名前からの読み取りを含みます。

    • sn_access_analyzer_debug_log は0件で、デバッグログの中身は未検証です。

    • この記事のために解析リクエストを1件作成しました。デモ用のレコードです。

    参考リンク

     
     
    ServiceNowのPDI(Personal Developer Instance)を実機で観察して、Noteに記事を書いています 実装・運用・教育の現場視点で淡々と記録中です リクエストがあればその記事も書きます 個人の観察日記です

    あなたへのおすすめ