明示的なロール

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:16分
  • 内部ユーザーと外部ユーザーの両方に、インスタンスへのアクセス権を与えることができます。ただし、両方のタイプのユーザーに同レベルのアクセス権を持たせない方が良い場合もあります。セキュリティを追加するためには、ユーザー全員に少なくとも 1 つのロールを割り当てて、インスタンスが内部ユーザーと外部ユーザーを区別できるようにする必要があります。

    Parisリリース時点では、ユーザーは、明示的なロール (snc_internal および snc_external) をともに持つことはできません。グループとロールには、そのようなグループまたはロールにアサインされたグループメンバーまたはユーザーが両方のロールを自動的に持つようになるため、両方のロールを包有することはできません。Now Platform では、このようなシナリオを作成する操作はすべて中断されます。

    外部ユーザーは、少なくとも snc_external ロールを取得する必要があります。snc_external ロールは、ユーザーが組織の外部にいることを示します。こうしたユーザーは、リソースへのアクセス権を持つことはできません。ただし、ACL を通じて snc_external ロールか、または snc_external ロールを継承する追加ロールに対して明示的に許可された場合は例外です。 デフォルトでは、snc_external ロールを持つユーザーは次のものにアクセスできません。
    • 外部とマークされていないスクリプト済み REST API リソース。
    • snc_external ロールまたは公開ロールを継承するロールがないテーブル。
    • snc_external ロールまたは snc_external ロールを継承するロールへのアクセスの許可がないプロセッサーや UI ページなど、レコードタイプ以外のリソース。
    • プラットフォームアナリティクス ダッシュボード

    snc_internal ロールを昇格したロールとしてマークしないでください。内部ユーザーがインスタンスにアクセスできなくなります。

    明示的ロールプラグイン

    明示的ロールプラグインが有効になっている場合:

    • すべての ユーザーは、内部リソースにアクセスするための snc_internal ロール、または外部リソースにアクセスするための snc_external ロールを持つ必要があります。いずれの明示的もロールを持たないユーザーは、公開リソースにのみアクセスできます。
    • 既存のユーザー全員に、snc_internal ロールが自動的にアサインされます。このロールでは、既存のアクセスレベルやシステムの動作は変更されません。その代わり、内部ユーザーと外部ユーザーを区別するためのカテゴリが提供されます。内部ユーザーは全員、プラグインが有効化される前と同レベルのアクセスを維持します。
      ヒント:
      ユーザーの既存の機能を変更しないようにするために、明示的なロールプラグインが有効になると、インスタンス内の既存ユーザー全員に snc_internal ユーザーロールがアサインされます。既存ユーザーには、明示的なロールプラグインが有効になる前に追加された外部ユーザーも含まれます。明示的ロールプラグインが有効になった後、明示的ロールプラグインの有効化以前に追加されたすべての外部ユーザーに対して、以下を実行します。
      • snc_internal ロールを削除します。
      • snc_external ロールを追加します。
      これにより、明示的なロールプラグインを有効化する前に追加されていた外部ユーザーは、内部ユーザーのみが使用できる内部リソースにはアクセスできなくなります。
    • 新しく作成されたユーザーは、最初にインスタンスにログインしようとした時点で snc_internal ロールが自動的にアサインされますが、snc_external ロールが明示的にアサインされている場合は例外です。新しいユーザーがインスタンスに最初にログインする前に snc_external ロールを追加すると、外部ユーザー権限を提供することができます。
      重要:

      メインテナンス期間中またはログインしているユーザーが少ないときに、このプラグインを有効にします。プラグインが有効化されているときに現在ログインしているユーザーには、snc_internal ロールは動的にアサインされません。むしろ、ユーザーは snc_internal ロールをアサインするために、ログアウトして再度ログインする必要があります。プラグインが有効化されると、snc_internal および snc_external ロールをいつでも追加または削除して、ユーザーの権限を変更できます。

      プラグインが有効になると、ユーザーがログインするたびに、アカウントに snc_internal ロールが付与され (ない場合)、snc_external ロールが付与されます。これには、代理操作を介してログインしたユーザーが含まれます。

    • ロール要件を持たないすべての既存の ACL に、snc_internal ロールが自動的にアサインされます。既存の ACL とユーザーの両方に snc_internal ロールがアサインされているため、既存のアクセスレベルは変更されません。
    • ロール要件を持たない新規作成 ACL には、snc_internal ロールが自動的にアサインされます。このロールは、新規作成 ACL にロールがアサインされている場合にはアサインされません。
    • Type=script のすべての既存のプロセッサー [sys_processor] レコードまたは新しく作成されたプロセッサー [sys_processor] レコードについては、フィールドが空の場合、snc_internal ロールが [ロール] フィールドに自動的に追加されます。
    • UI ページへのアクセスを内部ユーザーに制限する場合、プラグインによって ui_page タイプ* ACL に snc_internal ロールが自動的に割り当てられます。
    • プロセッサーへのアクセスを内部ユーザーに制限する場合、プラグインによって ui_page タイプ* ACL に snc_internal ロールが自動的に割り当てられます。
    • 外部ユーザーがインスタンスにアクセスするためには、少なくとも snc_external ロールを取得する必要があります。このロールは、外部ユーザーに手動で付与する必要があります。レコードへのアクセスは、ACL を通じて付与されます。

    明示的なロールプラグインが有効であるかどうかにかかわらず、システムアップデートセットをインスタンス間で移動しないでください。詳細については、「システムアップデートセット」を参照してください。

    注:
    このプラグインには、Contextual Security Manager プラグインも必要です。

    glide.security.explicit_roles.do_not_fix の動作

    Xanadu リリースの時点で、glide.security.explicit_roles.do_not_fix は、snc_internal への変更が調整されました。snc_internal ロールは、メモリ内と sys_user_has_role 内の両方で同じになりました。glide.security.explicit_roles.do_not_fix の新しい動作は次のとおりです。
    表 : 1. glide.security.explicit_roles.do_not_fix の新しい動作
    結果
    False メモリと sys_user_has_role の両方で、snc_internal ロールを追加します。
    True メモリまたは sys_user_has_role で、snc_internal ロールを追加しません。
    特定のユーザーの snc_internal ロールを除外するには、glide.security.explicit_roles.ignore.snc_internal.exclude_role_list プロパティを使用します。
    ヒント:
    以前の glide.security.explicit_roles.do_not_fix の動作に戻すには、glide.security.explicit_roles.do_not_fix_in_memory プロパティを使用します。

    外部ユーザーへのテーブルアクセスの提供

    snc_external ロールを継承するロールをテーブルに追加することで、外部ユーザーにテーブルへのアクセス権を付与できます。詳細については、「Provide external users access to a table」を参照してください。

    hasRoles() メソッド

    hasroles() メソッドはまだ利用できますが、 Geneva リリースでは廃止されます。代わりに hasRole(ロール名) メソッドを使用します。

    hasRoles() メソッドを使用する場合は、次のような変更に注意してください。
    • この方法では、ロールをチェックする際にデフォルトの snc_internal ロールが自動的に除外されます。これは、ユーザーが snc_internal ロールしか持っていない場合でも、hasRoles() メソッドが false を返すことを意味します。
    • ユーザーが snc_external ロールを持っている場合、インスタンスは外部ユーザーがロールを持たないと判断するため、このメソッドは false を返します。

    相互除外:snc_external 対 snc_internal

    Now Platform では、snc_external ロールと snc_internal ロールの両方をユーザーに付与することはできません。Now Platform では、 システム内のすべての場所でこの相互除外が適用され、エラーメッセージが各競合のログに書き込まれます。
    注:
    ACL リソースにすべてのユーザーがアクセスできるようにするには、ACL に両方のロールを含めます。
    例:ユーザーに明示的なロールの両方を追加 (直接衝突):
    1. ユーザー Abel Tuter に snc_internal ロールをアサインします。
    2. ユーザー Abel Tuter に snc_external ロールをアサインします。

    結果:Abel Tuter は snc_internal ロールを持つため、snc_external ロールの追加に失敗しました。

    例:グループに両方の明示的なロールを追加 (直接衝突):

    1. 現在グループに割り当てられている明示的なロールがないテストグループと呼ばれるグループを検討してください。
    2. テストグループにアベル、担当 tuter を追加します。
    3. テストグループに snc_external ロールを追加します。

    結果:Abel Tuter はすでに snc_internal ロールを持っており、両方のロールを持つことはできないため、snc_external ロールの追加に失敗しました。

    例:グループメンバーが競合する明示的なロールを持つグループに明示的なロールを追加します (間接衝突) :
    1. ユーザー Abel Tuter に snc_internal ロールをアサインします。
    2. 現在グループに割り当てられている明示的なロールがないテストグループと呼ばれるグループを検討してください。
    3. テストグループにアベル、担当 tuter を追加します。
    4. snc_external ロールをテストグループに追加します。

    結果:Abel Tuter はグループメンバーシップを通じて snc_external ロールを継承するため、グループに snc_external ロールを追加することはできません。両方の明示的なロールが同じユーザーに割り当てられます。これは許可されていません。

    その他の例については、次のテーブルを参照してください。

    ロール 試行したアクション 結果
    直接衝突
    ユーザーは snc_internal ロールを持っています。 snc_external ロールを追加します。 アクションが中断されました。
    ユーザーは snc_external ロールを持っています。 snc_internal ロールを追加します。 アクションが中断されました。
    ユーザーに明示的なロールがありません。 snc_external と snc_internal の各ロールを追加します。 ロールが追加されました。
    ユーザーは、両方の明示的なロールを持ちます (衝突が存在します) 。 ロールを持たないグループにユーザーを追加してください。 アクションが中断されました。
    どのユーザーにも関連付けられていないロールに、snc_internal ロールが含まれています。 snc_external ロールを追加します。 アクションが中断されました。
    どのユーザーにも関連付けられていないロールには、snc_external ロールが含まれています。 snc_internal ロールを追加します。 アクションが中断されました。
    ロールには、明示的なロールが含まれています (衝突が存在します) 。 ロールをユーザー、ロール、またはグループに追加します。 アクションが中断されました。
    メンバーを含まないグループに snc_internal ロールが割り当てられています。 snc_external ロールを追加します。 アクションが中断されました。
    メンバーを含まないグループに snc_external ロールが割り当てられています。 snc_internal ロールを追加します。 アクションが中断されました。
    メンバーを含まないグループにはロールはありません。 snc_external と snc_internal の各ロールを追加します。 ロールが追加されました。
    間接衝突
    衝突を包有するロール
    1. snc_internal ロールを持つユーザーに Test ロールと呼ばれるロールを付与します。
    2. snc_external ロールの Test ロールを追加します。
    アクションが中断されました。
    衝突を包有しないロール
    1. ロールを持たないユーザーに Test ロールと呼ばれるロールを付与します。
    2. snc_external ロールに Test ロールを追加します。
    このロールは、ユーザーと Test ロールの両方に追加されます。
    衝突を包有するグループ
    1. snc_internal ロールを持つユーザーを、Test Group 2 (Test Group 1 の子) というグループに追加します。
    2. snc_external ロールを Test Group 2 に追加します。
    3. snc_external ロールを Test Group 1 (Test Group 2 の親) という親グループに追加します。
    アクションが中断されました。
    衝突を包有しないグループ
    1. ロールを持たないユーザーを、Test Group 2 (Test Group 1 の子) というグループに追加します。
    2. snc_external ロールまたは snc_internal ロールを Test Group 1 (Test Group 2 の親) に追加します。
    ロールが親グループ、子グループ、およびユーザーに追加されます。
    グループとロールに衝突が包有されています Test Group 1 (Test Group 2 の親) に contains_external を追加します。 Test Group 1 と Test Group 2 はともに contains_external を取得しますが、snc_external ロールを明示的に取得することはできません。
    Test Group 1 の子である Test Group 2 に snc_internal ロールを追加します。 アクションが中断されました。
    グループの親の変更とグループの包有
    1. Test Group 2 の親として Test Group 1 を削除します。
    2. snc_internal ロールを Test Group 1 に追加します。
    3. snc_external ロールを Test Group 2 に追加します。
    4. Test Group 2 では、Test Group 1を親グループとして設定して保存します。
    アクションが中断されました。

    同じ想定で、既にネストされたグループに対して手順を繰り返します。

    アクションの中断の原因がエラーメッセージに表示され、別の試行が成功する前に対応する必要があります。

    個々のユーザーに明示的ロールを追加するなど、直接的なケースでは、ユーザーがどの明示的ロールを持つ必要があるかを確認します。ユーザーが不適切な明示的なロールを持つ場合は、まず削除し、次に正しい明示的なロールを追加する必要があります。

    グループに明示的なロールを追加するなど、間接ケースでは (グループメンバーに両方の明示的なロールがアサインされるようにするために)、ユーザーをグループに含める必要があるかどうかを評価します。グループ階層とロールの包含を通じた継承を含め、グループに明示的なロールを指定する必要があるかどうかも決定します。

    Now Platform では、最初に発生した衝突の可能性のみがレポートされることに注意してください。修正後も繰り返し試行が失敗し、毎回新しい根本原因が発生する場合は、関連するユーザー/グループ/ロールの相互依存関係をより広範に再評価してください。グループとロールの包有がどのように構成されているかを再考することをお勧めします。

    明示的なロールを要求する

    Now Support サービスカタログから明示的なロールプラグイン (com.glide.explicit_roles) を要求して明示的なロールをアクティブ化します。

    始める前に

    必要なロール:admin

    重要:
    メインテナンス期間中またはログインしているユーザーが少ないときに、このプラグインを有効にします。プラグインが有効化されているときに現在ログインしているユーザーには、snc_internal ロールは動的にアサインされません。むしろ、ユーザーは snc_internal ロールをアサインするために、ログアウトして再度ログインする必要があります。プラグインが有効化されると、snc_internal および snc_external ロールをいつでも追加または削除して、ユーザーの権限を変更できます。

    手順

    1. [すべて] > [システムアプリケーション] > [利用可能なすべてのアプリケーション] > [すべて]に移動します。
    2. [すべてのアプリケーション] ページで [プラグインの要求] をクリックして、Now Support[プラグインをアクティブ化] フォームを開きます。
      選択したインスタンスで CSM Workspace プラグインをアクティブ化するための詳細をキャプチャする [プラグインをアクティブ化] フォームのアドミンビュー。テキストの説明については、[プラグインのアクティブ化] フォームテーブルを参照してください。
    3. Now Support で、Now Support サービスポータル サービスカタログ にアクセスするリンクを選択します。
      新しいサービスポータルについて顧客に知らせるリンク付きメッセージ。
    4. インスタンスを選択します。
    5. [アクション] > [プラグインのアクティブ化] を選択します。
    6. [プラグインのアクティブ化] フォームで、次の情報を入力します。
      表 : 2. [プラグインのアクティブ化] フォーム
      フィールド 説明

      ターゲットインスタンスは何ですか

      プラグインをアクティブ化するインスタンス。

      どのプラグインをアクティブ化しますか

      アクティブ化するプラグインの名前です。

      注:
      必要なプラグインが表示されない場合、または OEM またはオンプレミスのインスタンスでプラグインをアクティブ化している場合は、[探しているプラグインが表示されていません (Plugin I'm looking for is not listed)] チェックボックスをオンにして、プラグインの名前を入力します。

      メンテナンスの日時を選択 (Select Maintenance Date and Time)

      プラグインをアクティブ化する日時。

      注:
      プラグインは、米国太平洋標準時で、毎営業日の朝と夕方の 2 回のバッチでアクティブ化されます。特定の時刻にプラグインをアクティブ化する必要がある場合は、[理由/コメント (Reason/Comments)] フィールドに要求を入力します。

      たとえば、 [自分のインスタンス (My Instance)] という名前のインスタンスで CSM Workspace プラグインをアクティブ化するには、次のフォームを参照してください。

      図 : 1. [プラグインのアクティブ化] フォーム
      選択したインスタンスで CSM Workspace プラグインの詳細をキャプチャするフォームのアドミンビュー。テキストの説明については、[プラグインのアクティブ化] フォームテーブルを参照してください。
    7. [送信] を選択します。
      プラグインの要求に関するその他の詳細については、Now Support ナレッジベース の記事「サービスカタログからのプラグインの要求 (Requesting a Plugin from the サービスカタログ)(KB0751715)」を参照してください。