アクセス制御リストの概要

  • リリースバージョン: Washingtondc
  • 更新日 2024年02月01日
  • 読む11読むのに数分
  • アクセス制御リスト (ACL) を確認します。

    ACL のコンポーネント

    すべてのアクセス制御リストのルールは、次のものを指定しています。
    • 保護されるオブジェクト操作
    • オブジェクトにアクセスするために必要な権限

    オブジェクトは、アクセスを制御する必要があるターゲットです。各オブジェクトは、特定のテーブル、フィールド、またはレコードを一意に識別するタイプと名前で構成されます。

    たとえば、次のエントリはすべてオブジェクトを指定します。

    タイプ 名前 保護されたオブジェクト
    レコード [インシデント]。[-- なし --] インシデントテーブル。
    record [incident].[active] インシデントテーブルのアクティブフィールド。
    REST_Endpoint user_role_inheritance user_role_inheritance Scripted REST API のレコード。

    操作は、指定されたオブジェクトに対してシステムが実行できる有効なアクションを説明しています。レコードなどの一部のオブジェクトは複数の操作をサポートしますが、REST_Endpoint などの他のオブジェクトは 1 つの操作のみをサポートします。

    たとえば、これらすべてのエントリは操作を指定します。

    タイプ 名前 運用 保護されている操作
    record [incident].[-- None --] create インシデントテーブルでのレコードの作成。
    record [incident].[active] write インシデントテーブルでのアクティブフィールドの更新。
    REST_Endpoint user_role_inheritance execute user_role_inheritance Scripted REST API の実行。
    権限は、指定されたオブジェクトと操作に誰がいつアクセスできるかを指定します。セキュリティ管理者は、次のものを追加することで権限要件を指定できます。
    • [ロールが必要] リストへの 1 つ以上のユーザーロール。
    • 1 つ以上の条件。
    • true または false に評価するスクリプト、または answer 変数を true または false に設定するスクリプト。

    オブジェクトと操作にアクセスするには、ユーザーはアクセス制御にリストされているすべての権限を渡す必要があります。たとえば、このアクセス制御は、インシデントテーブルの書き込み操作へのアクセスを制限します。

    インシデントレコードの ACL

    インシデントテーブルのレコードを更新するには、ユーザーがリストされているロールを持ち、レコードが条件を満たす必要があります。

    権限タイプ 要件 説明
    必要なロール 必要なロール:itil itil ロールを持つユーザーのみがインシデントを更新できます。
    条件 [インシデントステータス] [ではない] [クローズ済み] アクティブなインシデントレコードの更新のみを許可します。

    ACL 評価プロセス

    ACL ルールは、ユーザーが一致する ACL ルールに必要なすべての権限を満たしている場合にのみ、オブジェクトへのアクセスを許可します。

    • 条件は true と評価される必要があります。
    • スクリプトは true と評価されるか、true の値を持つ answer 変数を返す必要があります。
    • ユーザーは、必要なロールリストのいずれかのロールを持っている必要があります。リストが空の場合、この条件は true と評価されます。
    • [レコード ACL ルールのみ] 一致するテーブルレベルの ACL ルールとフィールドレベルの ACL ルールの両方が true と評価される必要があります。
    図 : 1. ACL 評価権限
    ACL 評価権限

    セッションでデータが要求されるたびに、要求されたオブジェクトと操作に一致するアクセス制御ルールが検索されます。一致するアクセス制御ルールがある場合、ユーザーがオブジェクトと操作にアクセスするために必要な権限を持っているかどうかが評価されます。アクセス制御ルールで複数の権限が指定されている場合、ユーザーはオブジェクトと操作にアクセスするためにすべての権限を満たす必要があります。いずれかの権限チェックに失敗すると、ユーザーは一致するオブジェクトと操作にアクセスできません。

    ユーザーが最初に一致したルールの権限を満たさない場合、アクセス制御処理順序で指定されたとおりに次に一致するアクセス制御ルールの権限が評価されます。ユーザーが一致するアクセス制御ルールを満たしていない場合、要求されたオブジェクトと操作へのアクセスが拒否されます。
    注:
    要求されたオブジェクトと操作に一致するアクセス制御ルールがない場合、ユーザーにアクセス権が付与されます。実際には、システムにはすべてのレコード操作を保護する一連のデフォルトのアクセス制御ルールがあるため、一致するルールが見つからないことはほとんどありません。

    オブジェクトへのアクセスが拒否された場合の影響は、ユーザーが満たしていない ACL ルールによって異なります。たとえば、読み取り操作の ACL ルールを満たしていない場合、ユーザーはオブジェクトを表示できません。保護されているオブジェクトに応じて、ACL ルールによってフォーム上のフィールドが非表示にされたり、リストの行が非表示にされたり、ユーザーが UI ページへのアクセスを禁止されたりします。次の表に、特定の操作とオブジェクトタイプの ACL ルールを満たしていない場合の結果の完全なリストを示します。

    クエリー前後の ACL チェック

    インスタンスは、ユーザーがクエリーを実行する前と後に ACL ルールをチェックします。クエリーの前と後で使用可能な情報が異なるため、結果が異なる可能性があります。
    クエリー前の ACL チェック

    インスタンスはデータベースクエリを実行する前に、クエリ対象のテーブル内の各フィールドの ACL ルールをチェックして、ユーザーがアクセスできるフィールドを判断します。このチェックでは、ユーザーのロールのみを調べ、これらのロールがフィールドへのアクセスを許可されるかどうかを確認します。このチェックはクエリの前に実行されるため、ACL はテーブルのレコードにアクセスできず、そのデータを考慮することができません。レコードの内容を知ることに依存するスクリプトと条件は評価されません。

    この時点でユーザーに読み取りアクセス権がない場合、フィールドの値はユーザーに表示されません。

    クエリー後の ACL チェック

    クエリーの後に、インスタンスはクエリーによって返された各レコードをチェックします。このチェック中には ACL のコンテキストがあるため、ACL のロール、条件、およびスクリプトの部分が評価されます。この時点でユーザーに読み取りアクセス権がない場合、フィールドの値はユーザーに表示されませんが、ユーザーのロールがフィールドへのアクセスを許可していれば、フィールドラベルが表示されます。

    運用 オブジェクトに関する ACL ルールを満たしていない場合の結果
    execute ユーザーはレコードまたは UI ページでスクリプトを実行できません。
    作成 ユーザーはフォームから 新しい UI アクションを表示できません。ユーザーは、Web サービスなどの API プロトコルを使用してテーブルにレコードを挿入することもできません。

    フィールドに特定の値が含まれていることを条件として ACL を作成すると、常に false と評価されます。新しいレコードのフィールドは、レコードが保存されるまで空と見なされます。

    read ユーザはフォームまたはリストでオブジェクトを表示できません。ユーザーは、Web サービスなどの API プロトコルを使用してレコードを取得することもできません。
    write ユーザーにはフォームとリストの読み取り専用フィールドが表示され、Web サービスなどの API プロトコルを使用してレコードを更新することはできません。
    delete ユーザーはフォームから削除 UI アクションを表示できません。ユーザーは、Web サービスなどの API プロトコルを使用してテーブルからレコードを削除することもできません。
    edit_task_relations ユーザーはタスクテーブル間の関係を定義できません。
    edit_ci_relations ユーザーは構成アイテム [cmdb_ci] テーブル間の関係を定義できません。
    save_as_template テンプレートの作成時に保存する必要があるフィールドを制御するために使用されます。
    add_to_list ユーザーは、リストメカニックの特定の列を表示またはカスタマイズすることはできません。
    list_edit ユーザーはリストからレコード (行) を更新できません。
    report_on ユーザーは ACL テーブルでレポートを作成できません。詳細については、「ACL ルールを使用してレポートの作成を制限する」を参照してください。
    report_view ユーザーは、ACL テーブルまたは ACL フィールドのレポートの内容を表示できません。詳細については、「Reporting」を参照してください。
    personalize_choices ユーザーはリストフィールドを右クリックして [選択を構成] を選択できません。

    オブジェクトの ACL 一致要件

    オブジェクトタイプ アクセスオブジェクトに必要な一致する ACL ルール 既存のワイルドカード ACL ルール
    クライアントコール可能スクリプトインクルード ユーザーは次の 2 つの ACL ルールの権限を満たす必要があります。
    1. オブジェクトのすべてのワイルドカード ACL ルール (操作に対する ACL ルールが存在する場合)。
    2. オブジェクトの名前に一致する最初の ACL ルール (操作に対する ACL ルールが存在する場合)。
    既定では、これらのオブジェクトの種類にワイルドカード (*) 規則はありません。これらのオブジェクトの 1 つにワイルドカード ACL ルールを作成すると、ACL ルールがこのタイプのすべてのオブジェクトに適用されます。
    プロセッサー
    UI ページ ユーザーは次の 2 つの ACL ルールの権限を満たす必要があります。
    1. レコードのフィールドに一致する最初の ACL ルール (操作に対する ACL ルールが存在する場合)。
    2. レコードのテーブルに一致する最初の ACL ルール (操作に対する ACL ルールが存在する場合)。
    デフォルトでは、作成、読み取り、書き込み、および削除操作用のワイルドカードテーブルルール (*) と、personalize_choices、作成、およびsave_as_template操作用のワイルドカードフィールドルール (*.*) があります。テーブルを作成するときは、提供されているワイルドカード ACL ルールを使用する場合を除き、テーブルの ACL ルールを作成します。
    レコード
    注:
    セキュリティマネージャーのデフォルトの動作 (glide.sm.default_mode) プロパティは、ワイルドカードテーブルの ACL ルールにのみ一致するオブジェクトにユーザーがアクセスできるかどうかを決定します。このプロパティが [アクセスを拒否] に設定されている場合、管理者のみがワイルドカードテーブルの ACL ルールにアクセスできます。
    注:
    作成操作のワイルドカードフィールド ACL ルール (*.*) は、書き込み操作と同じ権限を再利用します。これは、明示的な作成操作の ACL ルールを定義しない限り、作成権限が書き込み権限と同じであることを意味します。

    処理順序の同じ時点にある複数の ACL ルール

    2 つ以上のルールが処理順序の同じ時点で一致する場合、ユーザーは、オブジェクトにアクセスするためにいずれかの ACL ルールの権限を渡す必要があります。たとえば、incident.number に対して 2 つのフィールド ACL ルールを作成した場合、1 つのルールを満たすユーザーは、ユーザーが処理順序の同じ時点で他のフィールド ACL ルールを満たしていないかどうかにかかわらず、その番号フィールドにアクセスできます。

    必要なロール

    通常の管理者ユーザーは、アクセス制御ルールを表示してデバッグできます。ただし、既存のアクセス制御ルールを作成または更新するには、管理者が security_admin ロールに権限を昇格させる必要があります。手順については、「特権ロールへの昇格」を参照してください。

    スコープ対象のアプリケーションの ACL ルール

    ACL ルールと同じスコープ内にあるオブジェクトに対して ACL ルールを作成できます。ACL ルールと同じスコープ内にあるフィールドを少なくとも 1 つ持つテーブルに対しても、ACL ルールを作成できます。

    ACL ルールレコードとは異なるスコープ内のテーブルの場合は、ルールのタイプが制限されます。
    • ACL ルールと同じスコープ内にある任意のテーブル、UI ページ、またはその他のオブジェクトに対して ACL ルールを作成できます。
    • ACL ルールと同じスコープ内にあるフィールドに対して ACL を作成できます。
      • テーブルが同じスコープ内にある場合は、スクリプトを使用して権限を評価できます。
      • テーブルが別のスコープ内にある場合は、スクリプトを使用して権限を評価することはできません。
    • アプリケーションピッカーで選択したアプリケーションとは異なるスコープにあるオブジェクトの ACL ルールを作成または変更することはできません。これには、異なるスコープの ACL へのロールの追加も含まれます。
    • ワイルドカードテーブルルール (*) は、グローバルスコープでのみ作成できます。
    • ACL ルールと同じスコープ内のテーブルに対してのみ、ワイルドカードフィールドルール (*) を作成できます。