CSM의 명시적 역할
내부 사용자와 외부 사용자 모두에게 인스턴스에 액세스할 수 있도록 권한을 부여할 수 있습니다. 그러나 두 유형의 사용자가 모두 같은 수준의 액세스 권한을 갖는 것을 원하지 않을 수도 있습니다. 추가 보안을 제공하려면 인스턴스에서 내부 및 외부 사용자를 구분할 수 있도록 모든 사용자에게 적어도 하나의 역할이 있어야 합니다.
Paris 릴리스에서는 사용자가 명시적 역할(snc_internal 및 snc_external)을 모두 사용할 수 없습니다. 그룹 및 역할 포함에는 두 역할을 모두 포함할 수 없습니다. 이는 이러한 그룹이나 역할에 할당된 그룹 구성원 또는 사용자가 자동으로 두 역할을 가질 수 있기 때문입니다. Now Platform에서는 이러한 시나리오를 생성하는 모든 운영을 중단합니다.
- external로 표시되지 않은 스크립팅된 REST API 자원입니다.
- snc_external 역할이나 public 역할을 상속하는 역할이 없는 테이블
- snc_external 역할 또는 snc_external 역할을 상속하는 역할에 접근 권한을 부여하지 않는 프로세서, UI 페이지와 같은 기록이 아닌 형식의 자원.
- 플랫폼 분석 대시보드.
snc_internal 역할을 상승된 것으로 표시하지 마십시오. 표시할 경우 내부 사용자가 인스턴스에 액세스할 수 없습니다.
내부 및 외부 사용자에게 권장되는 CSM 역할
고객 서비스 관리 애플리케이션을 사용하는 고객(외부 사용자)은 sn_customerservice.customer 또는 sn_customerservice.consumer 역할을 할당받아야 합니다. 고객 서비스 에이전트(내부 사용자)는 sn_customerservice_agent 또는 sn_customerservice.consumer_agent 역할을 할당받아야 합니다. 시스템은 동일한 사용자에게 고객(외부) 및 에이전트(내부) 역할이 모두 할당되지 않았는지 확인합니다.
Explicit Roles 플러그인
고객 서비스 플러그인(com.sn_customerservice)은 Explicit Roles 플러그인(com.glide.explicit_roles)을 활성화하여 snc_external 역할과 snc_internal 역할을 추가합니다. 플러그인이 활성화되는 경우:
- 모든 사용자에게는 내부 자원에 액세스하려면 snc_internal 역할이 있거나 외부 자원에 액세스하려면 snc_external 역할이 있어야 합니다.
- 기존의 모든 사용자에게는 snc_internal 역할이 자동으로 할당됩니다. 이 역할은 기존 액세스 수준이나 시스템 동작을 변경하지 않습니다. 대신 외부 사용자와 내부 사용자를 구분할 수 있는 범주를 제공합니다. 모든 내부 사용자는 플러그인이 활성화되기 전과 동일한 수준의 액세스 권한을 유지합니다.팁:사용자가 기존 기능을 변경하지 못하도록 하려면, Explicit Roles 플러그인을 활성화하여 인스턴스의 모든 기존 사용자에게 snc_internal 사용자 역할을 할당합니다. 여기에는 Explicit Roles 플러그인을 활성화하기 전에 추가된 모든 외부 사용자가 포함됩니다. Explicit Roles 플러그인이 활성화된 후에는 Explicit Roles 플러그인이 활성화되기 전에 추가된 모든 외부 사용자에 대해 다음을 수행합니다.
- snc_internal 역할을 제거합니다.
- snc_external 역할을 추가합니다.
- 새로 만든 사용자가 snc_external 역할을 명시적으로 할당받지 않는 한, 처음 인스턴스에 로그인할 때 자동으로 snc_internal 역할이 할당됩니다. 새 사용자가 처음 인스턴스에 로그인하기 전에 새 사용자에게 snc_external 역할을 추가하여 외부 사용자 권한을 제공할 수 있습니다. 중요사항:유지관리 기간 동안 또는 로그인한 사용자가 거의 없는 경우 이 플러그인을 활성화합니다. 플러그인이 활성화됐을 때 로그인한 상태의 사용자에게는 snc_internal 역할이 동적으로 할당되지 않습니다. 로그아웃했다가 다시 로그인했을 때 사용자는 snc_internal 역할을 할당받을 수 있습니다. 플러그인이 활성화되면 언제든지 snc_internal 및 snc_external 역할을 추가하거나 제거하여 사용자 권한을 변경할 수 있습니다.
- 필요한 역할이 없는 기존의 모든 ACL에는 snc_internal 역할이 자동으로 할당됩니다. 기존의 ACL 및 역할 모두 snc_internal 역할이 할당되었기 때문에 기존 액세스 수준은 변경되지 않습니다.
- 필요한 역할이 없는 새로 만든 ACL에는 snc_internal 역할이 자동으로 할당됩니다. 역할이 할당된 새로 만든 ACL에는 이 역할 할당이 적용되지 않습니다.
- 모든 기존 프로세서[sys_processor] 기록 또는 Type=script를 사용하여 새롭게 생성된 프로세서[sys_processor] 기록의 경우, 필드가 비어 있으면 snc_internal 역할이 자동으로 역할 필드에 추가됩니다.
- UI 페이지에 대한 액세스를 내부 사용자로 제한하기 위해 플러그인에서 snc_internal 역할을 * ui_page 유형의 ACL로 자동 할당합니다.
- 프로세서에 대한 액세스를 내부 사용자로 제한하기 위해 플러그인에서 snc_internal 역할을 * processor 유형의 ACL로 자동 할당합니다.
- 외부 사용자는 최소한 snc_external 역할을 얻어야 인스턴스에 액세스할 수 있습니다. 이 역할은 외부 고객 서비스 포털 접촉 창구에 자동으로 할당됩니다. 고객 서비스 포털이 활성화되지 않은 경우 이 역할은 외부 사용자에게 수동으로 부여해야 합니다. 레코드에 대한 액세스는 ACL을 통해 부여됩니다.주:고객 서비스 포털의 스크립트에서
isPublic()함수를 사용하여 클라이언트 호출 가능 스크립트 하나에 대한 개인 정보 설정을 변경할 수 있습니다. 자세한 내용은 스크립트 포함을 참조하십시오. - 콘텐츠 관리 시스템 사이트 액세스에도 영향을 줍니다. CMS는 사이트(content_site), 페이지(content_page) 및 기타 자원을 사용하여 설정됩니다. 일부 사이트에 로그인 페이지가 구성되어 있을 수 있습니다.
- CMS 사이트에 로그인 페이지가 구성되어 있지 않으면 해당 필드가 비어 있는 경우 페이지(content_page)의 역할 읽기 필드에 공용 역할이 자동으로 추가됩니다.
- CMS 사이트에 로그인 페이지가 구성되어 있다면 해당 필드가 비어 있는 경우 페이지(content_page)의 역할 읽기 필드에 snc_internal 역할이 자동으로 추가됩니다.
- 서비스 포털 사이트 액세스 역시 영향을 받습니다.
sp_page, sp_widget 또는 sp_instance 레코드에는 snc_internal 역할이 자동으로 추가되지 않습니다. 필요한 경우 이러한 레코드에 대한 역할 필드에 snc_internal 역할을 기본값으로 할당하여 새 역할을 지정할 수 있습니다. 이 프로세스에 대한 자세한 내용은 기본 필드 값 지정을 참고하십시오.
Explicit Roles 플러그인이 활성화되거나 활성화되지 않은 인스턴스 간에 시스템 업데이트 세트를 이동하지 마십시오.
glide.security.explicit_roles.internal_user_blacklist 속성
Explicit Roles 플러그인은 플러그인이 설치될 때 sys_user 테이블에 있는 기존의 모든 사용자를 내부 고객으로 가정합니다. 수정 스크립트는 기존의 모든 사용자와 역할이 없는 ACL에 snc_internal 역할을 할당합니다.
역할이 업데이트되지 않은 사용자가 자원에 액세스하려고 할 때에는 수정 스크립트가 실패하거나 완료되지 않을 수 있습니다. 이러한 잠재적인 격차를 해결하기 위해, CSM(상황별 보안 관리자)은 snc_internal 역할을 명시적 역할(내부 또는 외부)이 없이 로그인하는 사용자에게 자동 할당합니다.
또한, CSM은 비즈니스 규칙 프로세스를 사용하여 사용자를 분류할 때 snc_external 역할을 할당합니다. 그러나 CSM 외부 고객을 많은 세트로 임포트할 때, 워크플로우가 False로 설정되어 비즈니스 규칙이 실행되지 않습니다. 해당 사용자가 자원에 액세스하려고 할 때 명시적 역할이 없기 때문입니다. 상황별 보안 관리자는 7일마다 실행하는 당직표 상충 보고서라는 정기적인 업무를 통해 snc_internal 역할을 할당합니다. Explicit Roles 플러그인이 활성화되면 이 업무에서는 사용자에게 snc_internal 또는 snc_external 역할이 없으므로 CSM 외부 사용자에게 snc_internal 역할을 할당합니다.
실수로 외부 사용자에게 snc_internal 역할이 제공되지 않도록, Explicit Roles 플러그인에는 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 비교
- snc_internal 역할을 사용자 Abel Tuter에게 할당합니다.
- snc_external 역할을 사용자 Abel Tuter에게 할당합니다.
결과: Abel Tuter에게 snc_internal 역할이 있으므로 snc_external 역할을 추가하지 못합니다.
예시: 그룹에 명시적 역할을 모두 추가합니다(직접 충돌).
- 테스트 그룹이라는 그룹에는 현재 그룹에 할당된 명시적 역할이 없는 것으로 고려합니다.
- 테스트 그룹에 Abel Tuter를 추가합니다.
- snc_external 역할을 테스트 그룹에 추가합니다.
결과: Abel Tuter에게 이미 snc_internal 역할이 있고 두 역할 모두 가질 수 없으므로 snc_external 역할을 추가하지 못합니다.
- snc_internal 역할을 사용자 Abel Tuter에게 할당합니다.
- 테스트 그룹이라는 그룹에는 현재 그룹에 할당된 명시적 역할이 없는 것으로 고려합니다.
- 테스트 그룹에 Abel Tuter를 추가합니다.
- snc_external 역할을 테스트 그룹에 추가합니다.
결과: Abel Tuter가 그룹 구성원 자격을 통해 snc_external 역할을 상속하므로 그룹에 snc_external 역할을 추가할 수 없습니다. 명시적 역할 모두 허용되지 않은 동일한 사용자에게 할당됩니다.
다른 예시의 경우 다음 테이블을 참조하십시오.
| 역할 | 시도한 동작 | 결과 |
|---|---|---|
| 직접 충돌 | ||
| 사용자에게 snc_internal 역할이 있습니다. | snc_external 역할을 추가합니다. | 동작이 중단되었습니다. |
| 사용자에게 snc_external 역할이 있습니다. | snc_internal 역할을 추가합니다. | 동작이 중단되었습니다. |
| 사용자에게 명시적 역할이 없습니다. | snc_internal 또는 snc_external 역할을 추가합니다. | 역할이 추가되었습니다. |
| 사용자에게 명시적 역할이 모두 있습니다(기존 충돌). | 역할이 없는 그룹에 사용자를 추가합니다. | 동작이 중단되었습니다. |
| 사용자와 관련되지 않은 역할에는 snc_internal 역할이 포함되어 있습니다. | snc_external 역할을 추가합니다. | 동작이 중단되었습니다. |
| 사용자와 관련되지 않은 역할에는 snc_external 역할이 포함되어 있습니다. | snc_internal 역할을 추가합니다. | 동작이 중단되었습니다. |
| 역할에 명시적 역할이 모두 있습니다(기존 충돌). | 사용자, 역할 또는 그룹에 역할을 추가합니다. | 동작이 중단되었습니다. |
| 구성원이 없는 그룹에 snc_internal 역할이 포함되어 있습니다. | snc_external 역할을 추가합니다. | 동작이 중단되었습니다. |
| 구성원이 없는 그룹에 snc_external 역할이 포함되어 있습니다. | snc_internal 역할을 추가합니다. | 동작이 중단되었습니다. |
| 구성원이 없는 그룹에는 역할이 없습니다. | snc_internal 또는 snc_external 역할을 추가합니다. | 역할이 추가되었습니다. |
| 간접 충돌 | ||
| 충돌이 포함된 역할 포함 |
|
동작이 중단되었습니다. |
| 충돌이 포함되지 않은 역할 포함 |
|
역할이 사용자와 테스트 역할 모두에 추가됩니다. |
| 충돌이 포함된 그룹 포함 |
|
동작이 중단되었습니다. |
| 충돌이 포함되지 않은 그룹 포함 |
|
역할이 상위 그룹, 하위 그룹 및 사용자에 추가됩니다. |
| 그룹 포함에 충돌이 있는 역할 포함 추가 | 테스트 그룹 1(테스트 그룹 2의 상위)에 contains_external을 추가합니다. | 테스트 그룹 1과 테스트 그룹 2는 모두 contains_external을 사용할 수 있지만 snc_external 역할을 명시적으로 사용하지는 않습니다. |
| 테스트 그룹 2(테스트 그룹 1의 하위)에 snc_internal 역할을 추가합니다. | 동작이 중단되었습니다. | |
| 그룹 상위 변경에 그룹 포함 추가 |
|
동작이 중단되었습니다. 동일한 결과가 되는 이미 중첩된 그룹에 대해 반복합니다. |
중단된 동작에 대한 원인이 오류 메시지에 나타나며 다른 시도하여 성공하려면 먼저 해결되어야 합니다.
개별 사용자에게 명시적 역할을 추가하는 등의 직접적인 케이스에는 사용자에게 명시적인 역할이 있는지 확인하십시오. 사용자에게 잘못된 명시적 역할이 있는 경우, 먼저 제거한 다음 올바른 명시적 역할을 추가해야 합니다.
명시적 역할을 그룹에 추가하는 것과 같은 간접적 케이스의 경우, 그룹 구성원에게 명시적인 역할이 모두 할당되도록 하려면 해당 사용자가 그룹에 있어야 하는지 여부를 평가하십시오. 그룹 계층 구조와 역할 포함을 통한 상속을 비롯하여 그룹에 명시적 역할을 지정해야 하는지 여부도 결정합니다.
Now Platform에서는 발생한 첫 번째 잠재적 충돌만 보고된다는 점에 유의하십시오. 매번 새로운 근본 원인이 있어 정정 이후에도 반복적인 시도 작업이 계속 실패하면 관련 사용자/그룹/역할 상호 의존성을 보다 폭넓게 다시 평가하십시오. 그룹 및 역할 포함을 구성하는 방식을 다시 생각해 볼 수 있습니다.