CSM 内の明示的なロール

  • リリースバージョン: Yokohama
  • 更新日 2025年01月30日
  • 所要時間:17分
  • 内部ユーザーと外部ユーザーの両方に、インスタンスへのアクセス権を与えることができます。ただし、両方のタイプのユーザーに同レベルのアクセス権を持たせない方が良い場合もあります。セキュリティを追加するためには、ユーザー全員に少なくとも 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 ロールを昇格したロールとしてマークしないでください。内部ユーザーがインスタンスにアクセスできなくなります。

    内部および外部ユーザーに推奨される CSM ロール

    カスタマーサービス管理 (CSM) アプリケーションを使用する顧客 (外部ユーザー) には、sn_customerservice.customer ロールまたは sn_customerservice.consumer ロールのいずれかをアサインする必要があります。カスタマーサービスエージェント (内部ユーザー) には、sn_customerservice_agent ロールまたは sn_customerservice_consumer_agent ロールのいずれかをアサインする必要があります。同じユーザーに、顧客 (外部) ロールとエージェント (内部) ロールの両方が割り当てられていないことが確認されます。

    明示的ロールプラグイン

    カスタマーサービスプラグイン (com.sn_customerservice) では、明示的ロールプラグイン (com.glide.explicit_roles) が有効になり、snc_external と 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 ロールをいつでも追加または削除して、ユーザーの権限を変更できます。
    • ロール要件を持たないすべての既存の 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 を通じて付与されます。
      注:
      カスタマーサービスポータルのスクリプトで isPublic() 関数を使用すると、単一のクライアント呼び出し可能スクリプトインクルードのプライバシー設定を変更できます。詳細については、「スクリプトインクルード」を参照してください 。
    • コンテンツ管理システムのサイトアクセスも影響を受けます。CMS は、サイト (content_site)、ページ (content_page)、およびその他のリソースで設定されています。一部のサイトでは、ログインページが設定されている場合があります。
      • CMS サイトにログインページが設定されていない場合、ページ (content_page) の [読み込みロール] フィールドに public ロールが自動的に追加されます (フィールドが空の場合)。
      • CMS サイトにログインページが設定されている場合、ページ (content_page) の [読み込みロール] フィールドに snc_internal ロールが自動的に追加されます (フィールドが空の場合)。
    • サービスポータルのサイトアクセスも影響を受けます。

      snc_internal ロールは sp_page、sp_widget、または sp_instance レコードに自動的に追加されません。必要に応じて、これらのレコードの [ロール] フィールドのデフォルト値として snc_internal を割り当てることで、新しいレコードにロールを付与することができます。このプロセスの詳細については、「デフォルトのフィールド値を指定する」を参照してください。

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

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

    glide.security.explicit_roles.internal_user_blacklist プロパティ

    明示的なロールプラグインでは、プラグインがインストールされた時点で sys_user テーブル内のすべての既存ユーザーが内部顧客であると見なされます。修正スクリプトにより、すべての既存のユーザーと、ロールを持たないすべての ACL に snc_internal ロールが割り当てられます。

    この修正スクリプトは、ロールが更新されておらず、リソースへのアクセスを試みているユーザーに対して、失敗するか、時間内に完了しない場合があります。この潜在的なギャップを埋めるために、コンテキストセキュリティマネージャー (CSM) が、 (内部または外部の) 明示的なロールを持たないすべてのログインユーザーに snc_internal ロールを自動的に割り当てます。

    さらに、CSM には、snc_external ロールをユーザーの分類に割り当てるビジネスルールプロセスがあります。ただし、大規模な CSM 外部顧客セットをインポートする場合、ワークフローが false に設定されるため、ビジネスルールを実行できません。こうしたユーザーは、リソースへのアクセスを試行するため、明示的なロールを持ちません。コンテキストセキュリティマネージャーは、7 日ごとに実行されるオンコールのギャップと競合レポートと呼ばれるスケジュール設定済みのジョブを通じて snc_internal ロールを割り当てます。明示的なロールプラグインが有効である場合、ユーザーには snc_internal ロールまたは snc_external ロールがないため、このジョブにより snc_internal ロールが CSM 外部ユーザーに割り当てられます。

    外部ユーザーに誤って snc_internal ロールを割り当てないようにするために、明示的なロールプラグインには、snc_internal にならないようにユーザータイプを除外するための glide.security.explicit_roles.internal_user_blacklist プロパティが含まれています。glide.security.explicit_roles.internal_user_blacklist テーブルにユーザータイプがない場合は、コンテキストセキュリティマネージャーにより、デフォルトですべてのユーザーに snc_internal ロールが割り当てられます。除外リストテーブルにクラス名と sys_user クラスタイプがある場合、CSM は snc_external ロールをアサインします。それ以外の場合、CSM は通常どおりデフォルトの snc_internal ロールを割り当てます。

    Paris リリースの場合、このプロパティはデフォルトで zBoot インスタンスに対して有効になり、アップグレードの場合はデフォルトで無効になります。

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

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

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