CSO 등급
기능 상세
자료 접근에 일부 제한이 있음을 알려드립니다.
CSO 등급 기능에 대한 상세 내용은 다음 에서 확인 하실 수 있습니다.
마우스 우클릭 등급 지정
1.개요
- 사용자는 우클릭 메뉴를 통해 문서에 등급을 지정할 수 있습니다.
2. 기능 설정 (필수 및 옵션)
- 아래 항목 중 필수 항목은 꼭 설정해야 기능이 동작합니다.
1. DS_MIP_INIT 정책에 관리센터 도메인추가 (필수)
커스텀 정책 DS_MIP_INIT 정책의 json 데이터의 아래의 Security365 관리센터 도메인을 추가해야합니다. (보안 등급 및 레이블 정보를 가져오기 위함)
\{
...
"s365_portal_url":"https://devspsvr.softcamp.co.kr" // 주의) 해당 주소값은 예시이며, 사이트에 적용시 알맞은 public 도메인으로 변경 필요함.
...
\}
2. 우클릭 메뉴 추가 (필수)
커스텀 정책 DS_MIP_SHELL_MENU에 등급 지정 메뉴를 추가 (링크)
(예시)
\{
...
\{
"titleRes": "SHELL_MODIFY_SECULABEL", // 메뉴명
"titleDesc": "UI_DRM_TO_AIP_DESC",
"targetCmd": 254, // 해당값 고정값이므로 반드시 254로 해야함함
"targetIcon": "ApplySecuLabel.bmp", // 메뉴 아이콘 리소스
"targetExt": "doc|xls|docx|pptx|xlsx|xlsb",
"targetType": "*"
\}
...
\}
- 관련 리소스
C:\Windows\Softcamp\SDK\Res\DS\ResUIKOR.rc내 SHELL_MODIFY_SECULABEL = 등급 지정 정의 추가
3. 기본 선택 등급 설정 (옵션)
-
등급 지정 UI에서 default 선택 등급을 설정하기 위해서는 ztcap 콘솔에서 집행 정책에 지정 등급 선택의 기본 등급으로 설정하여야함.
-
집행 정책 백데이터에는 아래와 같은 기본 등급 지정 데이터가 추가됨.
{
//...
"category": "availableSecurityLevelList",
"info": {
//...
"defaultSelectLevelId": "iqCCmC4N-ADUvGusn-4Gkhlyi6-vPJQvg6r" // 기본지정 등급 아이디
//...
}
} -
해당 정책이 없는 경우에는 가장 첫번째 등급 레벨의 라벨이 선택됨.
3. 관련 Security365 서비스 (필수)
등급 지정 기능이 동작하기 위해서는 반드시 관리센터(spsvr) 서비스에 보안 등급&레이블 정보가 등록되어있어야하고, 또한 어떤 등급끼리 지정 및 변경이 가능한지에 대한 정책이 조건부 정책에 등록되어있어야 동작합니다.
A. 관리센터 - 보안등급&레이블 등록
B. 조건부 정책 ( ztcap ) : 변환 가능한 보안 레이블에 대한 정책
- ztcap 정책은 현재 문서가 어떤 보안 등급(레이블)로 변경이 가능한가에 대한 정책을 구성해야함. ( [개발 백그라운드 데이터 관련](https://wiki.softcamp.co.kr/pages/viewpage.action?pageId=162349616) )
- [조건부 정책 - Endpoint 메뉴 가이드](https://idocs.softcamp.co.kr/shieldrm/Guide/Webconsoleguide/Policy_Management/Endpoint)
오버레이 아이콘 적용
1. 개요
- DS 6.0 ENT 문서등급(C/S/O)으로 지정된 문서에 대하여 오버레이 아이콘 식별 기능 제공
- 적용 가능한 색상: Red 🔴, Green 🟢, Yellow 🟡
2. 제약 사항
- 윈도우에 설치된 프로그램의 오버레이 아이콘이 다수(12개 이상)일 경우 기존 오버레이 아이콘이 표시되지 않을 수 있습니다.
- 기능 개발 이전 모듈이 적용된 클라이언트 환경에서 문서등급 아이콘이 적용된 문서가 편집/저장 시 식별 정보가 삭제됩니다. 삭제되는 정보는 pre header에 저장되는 메타 데이터이며, 등급정보 데이터는 문서 내에 저장되어 있어 파일 열람/저장 시 등급 아이콘이 다시 적용됩니다.
- 문서등급 아이콘이 적용된 문서가 Teams, SharePoint 자료실에 업로드 후 다운로드될 경우 사이트 정책에 따라 아이콘 식별 정보가 삭제될 수 있습니다.
문서 속성 창 보안 등급 표시
1. 개요
Windows 탐색기에서 파일을 마우스 오른쪽 버튼으로 누르고 [속성] 을 열면, 기존 탭들 옆에 「보안 등급」 탭이 새로 나타납니다. 이 탭에서 사용자는 해당 문서에 적용된 C/S/O 보안 등급(C/S/O = 문서를 기밀·민감·공개 등으로 구분하는 Document Security 의 문서 보안 등급 체계)을 읽기 전용으로 직접 확인할 수 있습니다. 일반 문서·자사 DRM(Digital Rights Management, 자사 문서 암호화) 문서·MIP(Microsoft Information Protection, 마이크로소프트 정보 보호) 문서 어느 타입이든 동일하게 동작합니다.
본 기능이 필요한 이유
지금까지 문서에 적용된 C/S/O 보안 등급은 탐색기 아이콘 위에 겹쳐 표시되는 작은 오버레이 아이콘으로만 확인할 수 있었습니다. 오버레이 아이콘은 동시에 표시되는 개수에 제한이 있고 작아서, 특정 문서의 등급을 확실하게 검증하기 어려웠습니다. 또한 기존 「보안문서 정보」 탭(MIP 문서용)은 MIP 레이블·권한 정보만 보여줄 뿐, C/S/O 보안 등급은 다루지 않았습니다.
본 기능은 사용자가 오버레이 아이콘에 의존하지 않고 속성 창에서 직접 등급을 확인할 수 있도록, 모든 문서 타입에 공통으로 적용되는 보안 등급 표시 탭을 제공합니다.
동작 방식
문서에 숨겨 저장된 보안 등급 정보를 읽어 속성 탭에 4개 항목(등급 ID·등급명·라벨 ID·라벨명)으로 보여줍니다. 보호 문서는 등급을 읽기 위해 내부적으로 복호 화가 필요하므로, 속성 창이 멈추지 않도록 백그라운드에서 조회하고 "조회 중" 진행 표시 후 결과로 갱신합니다.
또한 문서보안에 로그인하지 않은 상태(로그아웃)에서는 「보안 등급」 탭이 나타나지 않으며(온라인 로그인 상태에서만 표시), 등급이 지정되지 않은 문서는 조회 실패와 구별되는 별도 안내 문구("보안 등급 지정이 안되어있는 문서")로 표시합니다.
요약: 탐색기에서 파일 우클릭 → [속성] → 「보안 등급」 탭을 열면, 그 문서의 C/S/O 보안 등급(등급 ID·등급명·라벨 ID·라벨명)이 읽기 전용으로 표시됩니다. 일반·DRM·MIP 모든 문서 타입에서 동작합니다.
적용 범위 / 진입점
| # | 진입점 | 사용자 동작 |
| 1 | 탐색기 파일 속성 창 | Windows 탐색기에서 파일 우클릭 → [속성] → 「보안 등급」 탭 선택 |
본 기능은 Document Security 가 지원하는 확장자의 문서(오피스·PDF 등)에만 「보안 등급」 탭이 나타납니다. 지원하지 않는 파일(예: 이미지·텍스트)에서는 탭이 표시되지 않습니다
2. 표시되는 보안 등급 정보
「보안 등급」 탭을 열면 문서에 적용된 보안 등급 정보를 다음 4개 항목으로 보여줍니다.
| 항목 | 의미 |
| 보안 등급 ID | 문서에 적용된 보안 등급의 식별 번호 |
| 보안 등급명 | 보안 등급의 이름 |
| 라벨 ID | 문서에 적용된 라벨의 식별 번호 |
| 라벨명 | 라벨의 이름 |
표시되는 등급명·라벨명은 문서에 저장된 이름을 그대로 보여줍니다(별도 정규화·치환 없음). 보호 문서는 등급 정보를 읽는 데 시간이 걸릴 수 있어, 탭에 "조회 중" 을 먼저 표시한 뒤 결과로 갱신합니다(속성 창은 멈추지 않음).
표시 항목 선택 (관리자 옵션)
기본적으로 「보안 등급」 탭은 보안 등급명·라벨명(이름 2개 항목)만 표시합니다. 관리자는 커스텀 정책 DS6_UI_OPTION 을 등록하여 이 탭에 표시할 항목을 선택할 수 있습니다. (예: 관리·진단용 식별자인 ID 항목을 감추거나, ID까지 함께 표시)
- 정책을 등록하지 않은 경우(기본): 보안 등급명·라벨명만 표시됩니다.
- 정책을 등록한 경우: 나열한 항목만 표시됩니다. 표시 순서는 항상 고정(보안 등급 ID → 등급명 → 라벨 ID → 라벨명)이며, 나열하지 않은 항목은 표시되지 않습니다.
표시할 수 있는 항목 이름은 다음 4가지입니다.
| 항목 이름 | 설명 |
| levelId | 보안 등급 ID |
| levelName | 보안 등급명 |
| labelId | 라벨 ID |
| labelName | 라벨명 |
커스텀 정책 DS6_UI_OPTION 의 JSON 데이터에 csoPropSheet 항목으로 "표시할 항목 이름의 목록"을 지정합니다.
// 4개 항목 모두 표시
{
"csoPropSheet": ["levelId", "levelName", "labelId", "labelName"]
}
// 이름 2개 항목만 표시 (기본과 동일)
{
"csoPropSheet": ["levelName", "labelName"]
}
항목 이름은 대소문자를 구분합니다. 이름을 잘못 적거나 형식이 잘못된 경우, 또는 유효한 항목이 하나도 없는 경우에는 안전하게 기본값(이름 2개 항목)으로 표시됩니다.
- 관련 모듈:
SCRA_DS365Prop(SCRA_DS365Prop64.dll, 6.0.0.7)
3. 사용자 화면
「보안 등급」 탭의 화면 구성은 다음과 같습니다(상단 로고 + 진행 표시 + 4행 정보).
┌─ 파일 속성 ──────────────────────────────────┐
│ [일반] [보안문서 정보] [보안 등급] │
│ ┌──────────────────────────────────────────┐ │
│ │ (Document Security 로고) │ │
│ ├─ 보안 등급 정보 ─────────────────────────┤ │
│ │ 보안 등급 ID : 2 │ │
│ │ 보안 등급명 : 사내한 │ │
│ │ 라벨 ID : 10 │ │
│ │ 라벨명 : General │ │
│ └──────────────────────────────────────────┘ │
└──────────────────────────────────────────────┘
- 조회가 끝나기 전에는 "조회 중" 문구와 진행 막대가 표시되고, 조회가 끝나면 그 자리에 4행 정보가 채워집니다(속성 창 진입은 멈추지 않음).
- 등급이 지정되지 않은 문서는 "보안 등급 지정이 안되어있는 문서" 문구가 표시되고, 그 외 등급을 읽지 못하는 경우(복호 권한 없음·에이전트 미기동 등)에는 "조회 불가" 문구가 표시됩니다.
- 본 탭은 읽기 전용입니다 — 등급을 바꾸거나 지정하는 동선은 없습니다.
4. 다국어 지원
탭 제목·항목 라벨·"조회 중"·"조회 불가" 등 화면 문구는 6개 언어로 제공됩니다.
| 구분 | 내용 |
| 지원 언어 | 한국어 / 영어 / 일본어 / 중국어 / 독일어 / 러시아어 |
| 리소스 | ResUIKOR/ENG/JPN/CHN/DEU/RUS.rc 의 [DS365Prop] 섹션 C/S/O 문구 키 9종(등급 미지정 문구 포함) |
| 표시 언어 결정 | 시스템 로케일에 해당하는 리소스 문구가 표시됨 |
| 기본값(fallback) = 영어 | 문구 리소스가 배포되지 않았거나 해당 언어 키를 찾지 못하면 영어 문구가 표시됨(호출부에 영어 기본 문구를 함께 전달하는 현 제품 리소스 동작과 동일) |
다국어 문구가 정상 표시되려면 ResUI*.rc 6종(6.0.0.36)이 SDK 설치 패키지로 함께 배포되어야 합니다. 미배포 환경에서는 영어로 표시됩니다.
5. 동작 시나리오 요약표
| # | 상황 | 동작 결과 |
| 1 | 지원 확장자 문서(일반·DRM·MIP)에 등급이 적용되어 있음 | 「보안 등급」 탭 표시 → "조회 중" → 4행(등급 ID·등급명·라벨 ID·라벨명) 표시 |
| 2 | 지원 확장자 문서이나 등급이 부여되지 않음 | 「보안 등급」 탭 표시 → "보안 등급 지정이 안되어있는 문서" |
| 3 | 보호 문서이나 복호 권한이 없음 | 「보안 등급」 탭 표시 → "조회 불가" |
| 4 | Security365 에이전트가 기동되어 있지 않음 | 「보안 등급」 탭 표시 → "조회 불가" (속성 창 멈춤 없음) |
| 5 | 지원하지 않는 확장자(이미지·텍스트 등) | 「보안 등급」 탭 미표시 |
| 6 | 문서보안 로그아웃 또는 오프라인 로그인 상태 | 「보안 등급」 탭 미표시 (온라인 로그인 상태에서만 표시) |
등급 조회 중에도 속성 창은 멈추지 않으며, 조회가 끝나면 결과가 그 자리에서 갱신됩니다.
6. 지원 범위 (확장자 / 문서 유형)
- 탭 노출 대상: Document Security 가 지원하는 확장자(오피스·PDF 등)의 문서. 판정은 제품이 등록한 지원 확장자 목록(읽기 전용 공유 메모리) 으로 수행합니다.
- 문서 타입: 일반(평문)·자사 DRM·MIP 문서 전부. 타입에 따라 복호 여부만 달라지며 탭 동작은 동일합니다.
- 로그인 상태: 문서보안 온라인 로그인 상태에서만 「보안 등급」 탭이 노출됩니다. 로그아웃·오프라인 로그인 상태에서는 탭이 나타나지 않습니다.
- 미지원: 지원 확장자 목록에 없는 파일에는 탭이 나타나지 않습니다.
7. 제약사항
| 항목 | 내용 |
| 조회 불가 사유 부분 구분 | 등급이 지정되지 않은 문서는 "보안 등급 지정이 안되어있는 문서" 문구로 별도 표시됩니다. 그 외 복호 권한 없음·에이전트 미기동 등은 사유를 구분하지 않고 단일 "조회 불가" 문구로 표시합니다. |
| 에이전트 의존 | 보안 등급 조회는 Security365 에이전트(DS365.Core 파이프 서버)에 의존합니다. 에이전트 미기동 시 "조회 불가" 로 표시됩니다(속성 창 멈춤 없이 안전하게 처리). |
| 등급별 색상·정규화 명칭 미적용 | 본 기능은 등급명을 문서 저장값 그대로 표시하며, 오버레이 아이콘과 같은 등급별 색상 표시·관리센터 등급 체계 기준 정규화 명칭(기밀/민감/공개) 변환은 포함하지 않습니다. |
| 감사·권한별 가시성·정책 충돌 처리 미포함 | 기획에서 정의한 등급 조회 감사 로그, 역할·부서 범위별 가시성, 표시 정책 충돌 안내(5종 상태)는 본 작업 범위 밖이며 후속 개발 영역입니다. |
| 로그아웃·오프라인 시 탭 미노출 | 문서보안 온라인 로그인 상태에서만 탭을 표시합니다. 로그아웃·오프라인 로그인 상태에서는 「보안 등급」 탭이 나타나지 않습니다. |
문서 종료 시 C/S/O 등급 자동 지정
1. 개요
문서를 저장하거나 닫는(종료하는) 시점에, 회사 보안 정책이 지정해 둔 단일 C/S/O 보안 등급(기밀·민감·공개)을 시스템이 사용자 개입 없이 자동으로 문서에 부여하는 기능입니다. 관리자가 조건부 정책에 "적용할 등급·레이블"을 미리 지정해 두면, 대상 문서에 저장·종료 이벤트가 발생할 때 그 등급이 그대로 적용됩니다.
이 자동 지정은 C/S/O 등급 부여의 기본(기존) 경로이며, "문서 종료 시 사용자 수동 C/S/O 등급 지정"은 같은 시점에 사용자가 직접 등급을 고르도록 하는 확장 경로입니다. 두 방식은 서버 정책 카드로 분기되며, 한 문서에 동시에 적용되지 않습니다.
본 기능이 필요한 이유
- 등급 체계가 단순하거나 부서 단위로 등급이 고정된 환경에서는, 사용자가 매번 등급을 고르지 않아도 조직 정책대로 일괄 부여되는 편이 효율적입니다.
- 우클릭 [문서 등급 설정] 메뉴는 사용자가 의도적으로 실행해야만 동작하므로, 새 문서를 만들고 그냥 닫는 일반적 흐름에서는 등급이 누락될 수 있습니다. 저장·종료 시점의 자동 지정은 이 공백을 메워, 대상 문서가 항상 정책이 정한 등급을 갖도록 보장합니다.
동작 방식
문서 저장·종료 시 그 문서가 자동 지정 카드(setSecuLevel)에 매칭되면, 정책에 지정된 단일 등급·레이블을 별도 확인 창 없이 문서에 적용합니다.
요약: 저장·종료 시 정책이 "자동 지정"을 지시하면, 사용자에게 아무것도 묻지 않고 정책이 정한 단일 등급이 문서에 부여됩니다. 자동·수동 분기는 서버 정책 카드로 결정되며, 부여 내역은 통합 로그에 자동/수동 구분과 함께 기록됩니다.
사용자 경험 (별도 선택 화면 없음)
자동 지정은 무음(silent)으로 동작합니다 — 저장·종료 시 등급 선택창이나 안내 창이 뜨지 않습니다. 등급이 적용된 결과는 탐색기 오버레이 아이콘과 파일 속성 창의 「보안 등급」 탭에서 확인할 수 있습니다.
적용 범위 / 진입점
| # | 진입점 (문서 이벤트) | 동작 시점 |
| 1 | 문서 열람/편집 후 종료(또는 저장) | 편집 프로그램에서 문서를 저장하거나 닫을 때 (1차 지원 범위) |
- 동일한 자동 지정(
setSecuLevel)은 조건부 정책 설정에 따라 문서 열람·파일 단위 이벤트(로컬 탐색기 이동/복사, Cloud 다운로드·업로드)에서도 동작하도록 구성할 수 있습니다. - 일반 문서와 보안(DRM/MIP) 문서를 모두 대상으로 합니다.
2. 정책 / 설정
저장·종료 이벤트의 등급 집행 카드(관리 콘솔 「보안 등급 설정」)에서 지정 방식을 자동 지정으로 선택하면, 관리자가 지정한 단일 등급·레이블이 자동 부여 대상이 됩니다.
| 지정 방식 | 입력 항목 | 집행 키워드 |
| 자동 지정 | 적용할 등급 + 레이블 (각 1개) | setSecuLevel |
| 수동 지정 | 사용자에게 노출할 등급 (복수) | availableSecurityLevelList |
수동 지정은 "문서 종료 시 사용자 수동 C/S/O 등급 지정" 섹션을 참고하십시오.
조건부 집행 정책(enforcementAttributes) 스키마
조건부 정책(ZTCAP)의 집행 정책은 집행 카드 배열(enforcementAttributes)이며, 등급 카드는 그 배열의 한 항목입니다(필요 시 변환 카드 등과 함께 배열에 담깁니다). 각 카드는 처리 순서(order)·종류(category)·세부 정보(info)로 구성되고, 자동 지정은 category가 setSecuLevel인 카드로 표현됩니다.
{
"enforcementAttributes": [
{
"order": 0,
"category": "setSecuLevel",
"info": {
"detail": "레벨ID;레이블ID"
}
}
]
}
- 자동 카드의
info.detail은레벨ID;레이블ID단일 쌍(세미콜론 구분)입니다 — 적용할 등급 1개와 그 하위 레이블 1개를 지정합니다. - 수동 카드(
availableSecurityLevelList)가 후보 등급 ID 배열을 담아 사용자에게 노출하는 것과 달리, 자동 카드는 목적지 등급·레이블을 관리자가 단일로 확정합니다.
현재 등급 평가 (N2SF 상향)
자동 지정도 N2SF 등급 이동 규칙(상향만 허용, 하향 불가)을 따릅니다. 다만 수동 지정처럼 선택창에서 후보 등급을 걸러 보여주는 방식이 아니라, 정책 조건 단계에서 문서의 현재 등급을 평가해 대상 여부를 판정합니다. 즉 하향이 일어나지 않도록 정책 매칭 시점에 걸러지며, 집행 카드에는 목적지 등급만 지정됩니다.
3. 동작 시나리오 요약표
| # | 상황 | 동작 결과 |
| 1 | 자동 지정 카드(setSecuLevel) 매칭 + 저장·종료 | 정책에 지정된 단일 등급·레이블을 확인 창 없이 자동 적용 + 통합 로그(자동 구분, 변경 전/후 등급) |
| 2 | 수동 지정 카드(availableSecurityLevelList) 매칭 | 본 경로 개입 없이 수동 지정 경로로 선택창 노출 (해당 섹션 참고) |
| 3 | 대상 문서 아님 / 등급 카드 미발행 | 등급 변경 없음 |
| 4 | 상주 에이전트 미가동 등 장애 | 등급 미적용 + 통합 로그 장애(ERROR). 저장·종료 자체는 정상 진행 |
| 5 | 변환 카드와 함께 구성 (예: DRM 암호화 + 자동 등급) | 한 정책 안에서 카드 순서대로 순차 실행 (예: 변환 → 등급) |
4. 지원 범위 (확장자 / 문서 유형)
- 대상: 오피스 문서 —
pps·ppsx·ppt·pptx·doc·docx·xls·xlsx·xlsb·xlsm(우클릭 수동 지정·종료 시 수동 지정 사양과 동일 범위). - 문서 유형: 일반 문서 + 보안(DRM/MIP) 문서 모두 지원.
- 등급·레이블은 Security365 관리센터의 보안 분류 레이블을 따릅니다(1차 과제 기준 등급–레이블 1:1 매핑).
5. 주요 흐름
관리자 — 정책 등록
- 관리 콘솔 → 조건부 정책 → Endpoint → 대상 문서·구성원·조건 지정.
- 문서 이벤트에서 "문서 열람/편집 후 종료(또는 저장)"를 선택합니다.
- 집행 정책 → 등급 카드 「보안 등급 설정」 → 지정 방식 자동 지정 선택.
- 적용할 등급(C/S/O) 1개와 그 하위 레이블 1개를 지정 → 저장.
클라이언트 — 저장·종료 시 자동 적용
- 사용자가 문서를 저장하거나 종료합니다.
- 저장·종료 이벤트와 매칭되는 자동 지정 정책을 확인합니다.
- 정책에 지정된 단일 등급·레이블을 문서에 적용합니다(사용자 확인 없음).
- 부여 내역을 통합 로그(자동 구분, 변경 전/후 등급)로 전송합니다.
6. 제약사항
| # | 제약 | 내용 |
| 1 | 단일 등급 고정 | 자동 지정은 정책에 지정된 단일 등급·레이블만 부여합니다. 문서 내용 기반으로 등급을 판정해 부여하는 방식은 포함하지 않습니다(향후 확장 검토 영역). |
| 2 | 자동/수동 혼재 불가 | 동일 문서에 자동(setSecuLevel)·수동(availableSecurityLevelList) 등급 카드가 동시에 발행되는 경우는 서버 정책에서 배제됩니다. |
| 3 | 에이전트 의존 | 등급 적용은 상주 에이전트(정책 처리 코어)에 의존합니다. 미가동 시 등급이 적용되지 않습니다(의도된 무동작). |
| 4 | 정책 우선순위 | 동일 조건에 복수 정책이 매칭되면 우선순위 상위 정책 1건이 적용됩니다. 한 정책 내 변환·등급 카드는 관리자가 설정한 순서대로 실행됩니다. |
문서 종료 시 사용자 수동 C/S/O 등급 지정
1. 개요
문서를 닫는(종료하는) 시점에, 회사 보안 정책이 "사용자가 직접 고르도록" 지정한 경우 보안 등급 선택창을 띄워 사용자가 그 문서의 보안 등급(C/S/O — 기밀/민감/공개)을 직접 선택·적용하도록 하는 기능입니다. 기존에는 종료 시점에 정책이 정한 단일 등급을 시스템이 자동으로 매기는 방식만 동작했는데, 여기에 사용자 수동 선택 경로를 더해, 정책에 따라 자동 지정과 사용자 직접 선택을 모두 지원합니다. (국가 다중보안체계 N2SF(National Network Security Framework) 대응)
본 기능이 필요한 이유
N2SF는 문서 등급 분류의 주체와 책임을 사용자에게 둡니다. 시스템이 자동으로 등급을 부여하는 것만으로는 "작성자가 직접 분류했다"는 요건을 충족하기 어려운 상황이 있습니다.
기존 제품에서 사용자가 직접 등급을 고르는 창은 마우스 우클릭 → [문서 등급 설정] 메뉴에서만 열 수 있었습니다. 사용자가 새 문서를 만들고 그냥 닫는 일반적 흐름에서는 등급이 누락되거나 시스템 자동값에 의존하게 됩니다. 또한 종료 시점에 정책이 "사용자 직접 선택"을 내려보내도, 클라이언트가 이를 처리하지 못하고 그냥 넘어가 등급이 적용되지 않는 한계가 있었습니다.
본 기능은 작업 흐름의 자연스러운 종료 지점에서 분류를 유도해 이 공백을 메웁니다.
동작 방식 (한 줄 메커니즘)
문서 종료 시 그 문서가 수동 지정 정책에 매칭되면, 우클릭 [문서 등급 설정]과 동일한 등급 선택창을 띄우 고 — 사용자가 등급을 고르면 그 등급을 문서에 적용하고, 취소하면 등급을 적용하지 않습니다(no-op).
요약: 문서를 닫을 때 정책이 "사용자 직접 선택"을 지시하면 닫히는 문서마다 보안 등급 선택창이 표시되고, 사용자가 고른 등급이 문서에 적용됩니다. 자동 지정과 수동 선택은 서버 정책 카드로 분기되며, 등급 변경 내역은 통합 로그에 자동·수동 구분과 함께 기록됩니다.
적용 범위 / 진입점
| # | 진입점 | 동작 시점 |
| 1 | 편집기 프로세스 종료 | Office 등 편집 프로그램을 닫을 때 닫히는 문서마다 |
| 2 | 단일 문서 종료 | 편집기에서 개별 문서를 닫을 때 |
- 적용 로그인 환경: s365 · sso (DS6 표준 인증 경로). 레거시 appAuth 경로는 적용 범위에서 제외됩니다(제약사항 항목 참고).
- 일반 문서와 보안(DRM/MIP) 문서를 모두 대상으로 합니다.
2. 사용자 화면 (UX)
종료 시 수동 지정 정책에 매칭되면, 우클릭 [문서 등급 설정]과 동일한 보안 등급 설정 창이 표시됩니다. 좌측 메뉴와 우측 등급 목록으로 구성된 2단 창이며, 닫는 문서의 정보와 선택 가능한 등급·레이블을 보여줍니다.
- 상단: 닫는 문서의 아이콘·파일명·경로와 제품 로고.
- 좌측: 메뉴 영역(보안 등급 설정).
- 우측: 등급 목록 — 등급마다 색상 표시·등급명·설명이 있고, 그 아래 해당 등급의 레이블이 라디오 항목으로 나열됩니다. 레이블 하나를 선택하면 그 등급으로 분류됩니다(전체에서 하나만 선택).
- 하단: [취소] · [확인] 버튼.
┌──────────────────────────────────────────────────────────────┐
│ [문서] 분기보고서.docx [ Document Security 로고 ] × │
│ C:\Users\...\분기보고서.docx │
├───────────────┬────────────────────────────────────────────────┤
│ │ 보안 등급 설정 │
│ ▍보안 등급 │ 종료하는 문서에 적용할 보안 등급을 선택하세요. │
│ 설정 │ │
│ │ ● C등급 (기밀) 조직 기밀 정보 │
│ │ ○ C-극비 ● C-대외비 ○ C-내부 │
│ │ ────────────────────────────────── │
│ │ ● S등급 (민감) 민감 정보 │
│ │ ○ S-대외비 ○ S-내부 │
│ │ ────────────────────────────────── │
│ │ ● O등급 (공개) 공개 가능 │
│ │ ○ O-일반 │
│ │ │
│ │ [ 취소 ] [ 확인 ] │
└───────────────┴────────────────────────────────────────────────┘
| 사용자 선택 | 결과 |
| 레이블 선택 후 [확인] | 선택한 등급·레이블을 문서에 적용. 통합 로그에 수동 지정·변경 전/후 등급·지정자 기록 |
| [취소] / 닫기(×) / 미선택 | 등급을 적용하지 않음(no-op). 통합 로그는 미적용(INFO)으로 남음 |
- 화면 기본 선택은 정책의 기본 등급을 따릅니다.
- 여러 문서를 한꺼번에 닫으면 문서마다 선택창이 순차로 표시됩니다.
3. 정책 / 설정
종료 이벤트의 등급 집행 카드(관리 콘솔 「보안 등급 설정」)에서 자동/수동 지정 방식을 선택하며, 선택에 따라 저장되는 카드 종류가 달라집니다.
| 지정 방식 | 입력 항목 | 집행 키워드 |
| 자동 지정 | 적용할 등급 + 레이블 (각 1개) | setSecuLevel |
| 수동 지정 | 사용자에게 노출할 등급 (복수) | availableSecurityLevelList |
조건부 집행 정책(enforcementAttributes) 스키마
조건부 정책(ZTCAP)의 집행 정책은 집행 카드 배열(enforcementAttributes)이며, 등급 카드는 그 배열의 한 항목입니다(필요 시 변환 카드 등과 함께 배열에 담깁니다). 각 카드는 처리 순서(order)·종류(category)·세부 정보(info)로 구성되며, 등급 지정 방식(자동/수동)은 category로 결정됩니다.
{
"enforcementAttributes": [
{
"order": 0,
"category": "availableSecurityLevelList",
"info": {
"detail": "[{\"levelId\":\"NI9V0lbL-...\"},{\"levelId\":\"iqCCmC4N-...\"},{\"levelId\":\"dliTWZzt-...\"}]",
"defaultSelectLevelId": "iqCCmC4N-ADUvGusn-4Gkhlyi6-vPJQvg6r"
}
}
]
}
info.detail은 JSON 문자열로 한 번 더 인코딩된(이중 인코딩) 등급 ID 배열입니다. 우클릭 수동 지정 경로의 후보 등급 형식과 동일합니다.
자동 카드 vs 수동 카드
두 방식은 같은 등급 카드 자리에서 category와 info.detail 형식으로 구분됩니다.
// 자동 지정 — 종료 시 단일 등급/레이블 자동 부여 (기존)
{
"order": 0,
"category": "setSecuLevel",
"info": {
"detail": "레벨ID;레이블ID"
}
}
// 수동 지정 — 종료 시 노출할 등급 복수 (사용자 선택, 본 기능)
{
"order": 0,
"category": "availableSecurityLevelList",
"info": {
"detail": "[{\"levelId\":\"...\"},{\"levelId\":\"...\"}]",
"defaultSelectLevelId": "..."
}
}
- 자동 카드의
detail은레벨ID;레이블ID단일 쌍(세미콜론 구분)입니다. - 수동 카드의
detail은 후보 등급 ID 배열이며, 사용자가 그중 하나(+세부 레이블)를 선택창에서 고릅니다.
클라이언트 사용 필드 (수동 카드)
| 필드 | 사용 |
category = availableSecurityLevelList | 수동 지정 디스패치 키 |
info.detail (등급 ID 배열, 이중 인코딩) | 사용자가 고를 후보 등급 ID 목록 |
info.defaultSelectLevelId | 선택창의 기본 선택 등급 |
4. 다국어 / 리소스
등급 선택창 문구는 6개 언어로 제공됩니다.
| 항목 | 내용 |
| 지원 언어 | 한국어 · 영어 · 중국어 · 일본어 · 독일어 · 러시아어 |
| 리소스 | DSResKor/Eng/Chn/Jpn/Deu/Rus.ini의 [GRADE_UI] 섹션 (선택창 문구 8개 키) |
| 표시 언어 결정 | 클라이언트 UI 문화권(시스템 로케일)에 해당하는 리소스 문구 표시 |
| 기본값(fallback) | 해당 언어 리소스·키를 찾지 못하면 영어 문구 표시 |
프랑스어·체코어·번체 등 위 6종 외 언어는 미지원으로, 영어로 표시됩니다. 다국어 문구는 SDK 설치 패키지로 함께 배포되어야 정상 표시됩니다.
5. 동작 시나리오 요약표
| # | 상황 | 동작 결과 |
| 1 | 수동 지정 카드 매칭 문서 종료 + 사용자가 등급 선택·[확인] | 선택창 표시 → 선택 등급 적용 + 통합 로그(수동, 변경 전/후, 지정자) |
| 2 | 수동 지정 카드 매칭 문서 종료 + [취소]/X/미선택 | 선택창 표시 → 등급 미적용(no-op), 통합 로그 미적용(INFO) |
| 3 | 자동 지정 카드(setSecuLevel) 매칭 문서 종료 | 본 경로 개입 없이 기존 자동 지정으로 단일 등급 부여 |
| 4 | 상주 에이전트(데몬) 미가동·표시 실패 | 등급 미적용(no-op) + 통합 로그 장애(ERROR). 편집기 종료는 정상 진행 |
| 5 | 여러 문서 일괄 종료 (수동 매칭) | 문서마다 선택창 순차 표시 |
6. 지원 범위 (확장자 / 문서 유형)
- 대상: 오피스 문서 —
pps·ppsx·ppt·pptx·doc·docx·xls·xlsx·xlsb·xlsm(우클릭 수동 지정·종료 시 자동 지정 사양과 동일 범위). - 문서 유형: 일반 문서 + 보안(DRM/MIP) 문서 모두 지원.
- 등급·레이블은 Security365 관리센터의 보안 분류 레이블을 따릅니다(1차 과제 기준 등 급–레이블 1:1 매핑).
7. 주요 흐름
관리자 — 정책 등록
관리 콘솔에서 종료(또는 저장) 이벤트의 등급 카드를 수동 지정으로 설정하고, 노출할 등급을 복수 선택해 저장합니다.
사용자 — 종료 시 수동 지정
- 사용자가 문서를 열람/편집 후 종료(또는 저장)합니다.
- 종료 이벤트와 매칭되는 수동 지정 정책을 확인합니다.
- N2SF 규칙(미지정 → 허용 등급 전체 / 기지정 → 동일·상위)으로 노출 등급을 결정합니다.
- 등급 선택창을 표시하고 사용자가 등급·레이블을 선택합니다.
- 선택 등급을 문서에 적용하고 통합 로그(수동 구분·지정자)를 전송합니다.
- 여러 문서가 닫히면 문서마다 위 흐름을 반복합니다.
8. 제약사항
| # | 제약 | 내용 / 사용자 영향 |
| 1 | 동기 점유 | 선택창이 떠 있는 동안 해당 종료 처리 경로가 점유됩니다(사용자 선택 시간만큼). 편집기 종료 응답 자체는 영향받지 않으나, 동시 진행 중인 다른 보안 동작이 지연될 수 있습니다. 무한 대기를 막기 위해 자동 닫힘 타임아웃이 적용됩니다. |
| 2 | N문서 순차 처리 | 여러 문서가 일괄 종료되면 문서마다 선택창이 순차로 뜨고, 각 선택 시간이 누적됩니다. (배치 단일 목록 UI는 본 작업 범위 외) |
| 3 | 다국어 지원 범위 | 6개 언어(한·영·중·일·독·러)만 지원하며, 그 외 언어는 영어로 표시됩니다. |
| 4 | 리소스 반영 시점 | 선택창 문구는 상주 데몬이 1회 로드해 보관하므로, 리소스(INI) 갱신은 데몬 재시작 또는 재부팅 후 반영됩니다(설치 패키지 배포 시에는 무관). |
| 5 | 자동/수동 혼재 불가 | 동일 문서에 자동·수동 등급 정책이 동시에 발행되는 경우는 서버 정책에서 배제(혼재 불가)됨을 전제로 합니다. |
| 6 | 적용 환경 | s365 · sso 인증 경로에 적용되며, 레거시 appAuth 경로는 미포함입니다. |
| 7 | 에이전트 의존 | 상주 에이전트가 미가동이면 등급이 적용되지 않습니다(의도된 무동작). |
CSO 등급별 프린트 마킹
1. 개요
보안문서를 인쇄할 때 문서의 CSO 등급(C/S/O)에 따라 상·하단 텍스트와 중앙 마킹을 등급별로 다르게 표시한다. 등급은 문서 헤더의 SFI overlay icon index 로 판별하고, 등급별 커스텀 정책(DS_PRINTMK_CSO_C/O/S)의 값을 기본 프린트 마킹 정책이 만든 마킹 행에 치환(item-override)한다.
| 등급 | SFI overlay icon index | 커스텀 정책명 |
| C | 1 | DS_PRINTMK_CSO_C |
| O | 2 | DS_PRINTMK_CSO_O |
| S | 3 | DS_PRINTMK_CSO_S |
2. 치환 태그 사양
| 태그 | 대상 행 | nType / LOCATION | 비고 |
TEXT_OPTION | 중앙 사선 워터마크 | MARKING_SETTING | 마킹 텍스트의 $oText 변수로 치환됨 |
TEXT | 상·하단 텍스트행 | nType=0 / LOC=0(상), 2(하) | 같은 <case=MARKING_DATA> 안에 LOCATION 으로 위치 지정 |
CENTER_TEXT | 중앙 텍스트행 | nType=0 / LOC=1 | 전용 태그. TEXT 재사용 불가 (ExtractTagValue 첫 매치가 상단행을 잡음) |
IMAGE_FILE_NAME | 중앙 이미지행 | nType=1 / LOC=1 | BMP 포맷( 확장자 무관). windows\Softcamp\SDS\ 에 배치 |
분기 배타성: 이미지행(nType=1) / 중앙텍스트행(nType=0·LOC=1) / 상하단텍스트행(nType=0·LOC=0,2) — 셋이 겹치지 않는다. nType==0 가드로 중앙 텍스트 치환이 이미지행을 침범하지 않는다.
3. 정책 설정
기본 프린트 마킹 정책 (관리자 콘솔 → 프린트 마킹 → 스크립트)
중앙 = 이미지행(dscgru.dll) + 텍스트행("보안문서"). CSO override 가 이 중앙 텍스트행("보안문서")을 등급별 CENTER_TEXT 로 치환한다.
<Begin>
<case=MARKING_VERSION>
<VERSION="2">
</case>
<case=MARKING_SETTING>
<NORMAL_DOC="0">
<ENABLE="1">
<BMP_FILE_USE="0">
<DENSITY_CENTER="40">
<INTERCHARACTER="0">
<INTERLINE="100">
<SLOPE="300">
<TEXT_OPTION="이문서는보안문서입니다. ">
<DATE_FORMAT1="yyyy-MM-dd ">
<DATE_FORMAT2="yyyy, MM, dd ddd">
<DATE_FORMAT3="yyyy MM dd">
<TIME_FORMAT1="HH:mm">
<TIME_FORMAT2="hh mm ss">
<TIME_FORMAT3="hh mm ">
<WIDTH="600">
<HEIGHT="600">
<HP_PRINT_DENSITY="10">
<DOT_PRINTER="ALL">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<TYPE="1">
<LOCATION="1">
<ALIGN="0">
<FONT_SIZE="200">
<IMAGE_FILE_NAME="dscgru.dll">
<MARGINX="0">
<MARGINY="0">
<RESERVED="0">
</case>
<case=MARKING_DATA>
<LOCATION="0">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="보안/ $uID / $uName / $uOrg / $HostName">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="2">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="보안/ $pDate1 / $pTime1 / $oText">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="1">
<FONT_SIZE="150">
<FONT_NAME="HY견고딕">
<FONT_COLOR="0">
<FONT_WEIGHT="300">
<TEXT="보안문서">
<ALIGN="1">
</case>
<End>
DS_PRINTMK_CSO_C 커스텀 정책
CENTER_TEXT="C등급" → 기본정책 중앙 텍스트행("보안문서")을 "C등급"으로 치환. 상·하단 TEXT 도 C등급 문구로 치환.
<Begin>
<case=MARKING_VERSION>
<VERSION="2">
</case>
<case=MARKING_SETTING>
<NORMAL_DOC="0">
<ENABLE="1">
<BMP_FILE_USE="0">
<DENSITY_CENTER="40">
<INTERCHARACTER="0">
<INTERLINE="100">
<SLOPE="300">
<CENTER_TEXT="C등급">
<DATE_FORMAT1="yyyy-MM-dd ">
<DATE_FORMAT2="yyyy, MM, dd ddd">
<DATE_FORMAT3="yyyy MM dd">
<TIME_FORMAT1="HH:mm">
<TIME_FORMAT2="hh mm ss">
<TIME_FORMAT3="hh mm ">
<WIDTH="600">
<HEIGHT="600">
<HP_PRINT_DENSITY="10">
<DOT_PRINTER="ALL">
</case>
<case=MARKING_DATA>
<LOCATION="0">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="C등급 문서/ $uID / $uName / $uOrg / $HostName">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="2">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="C등급 문서/ $pDate1 / $pTime1 / $oText">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="1">
<FONT_SIZE="150">
<FONT_NAME="HY견고딕">
<FONT_COLOR="0">
<FONT_WEIGHT="300">
<ALIGN="1">
</case>
<End>
DS_PRINTMK_CSO_S 커스텀 정책
<Begin>
<case=MARKING_VERSION>
<VERSION="2">
</case>
<case=MARKING_SETTING>
<NORMAL_DOC="0">
<ENABLE="1">
<BMP_FILE_USE="0">
<DENSITY_CENTER="40">
<INTERCHARACTER="0">
<INTERLINE="100">
<SLOPE="300">
<CENTER_TEXT="S등급">
<DATE_FORMAT1="yyyy-MM-dd ">
<DATE_FORMAT2="yyyy, MM, dd ddd">
<DATE_FORMAT3="yyyy MM dd">
<TIME_FORMAT1="HH:mm">
<TIME_FORMAT2="hh mm ss">
<TIME_FORMAT3="hh mm ">
<WIDTH="600">
<HEIGHT="600">
<HP_PRINT_DENSITY="10">
<DOT_PRINTER="ALL">
</case>
<case=MARKING_DATA>
<LOCATION="0">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="S등급 문서/ $uID / $uName / $uOrg / $HostName">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="2">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="S등급 문서/ $pDate1 / $pTime1 / $oText">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="1">
<FONT_SIZE="150">
<FONT_NAME="HY견고딕">
<FONT_COLOR="0">
<FONT_WEIGHT="300">
<ALIGN="1">
</case>
<End>
DS_PRINTMK_CSO_O 커스텀 정책
<Begin>
<case=MARKING_VERSION>
<VERSION="2">
</case>
<case=MARKING_SETTING>
<NORMAL_DOC="0">
<ENABLE="1">
<BMP_FILE_USE="0">
<DENSITY_CENTER="40">
<INTERCHARACTER="0">
<INTERLINE="100">
<SLOPE="300">
<CENTER_TEXT="O등급">
<DATE_FORMAT1="yyyy-MM-dd ">
<DATE_FORMAT2="yyyy, MM, dd ddd">
<DATE_FORMAT3="yyyy MM dd">
<TIME_FORMAT1="HH:mm">
<TIME_FORMAT2="hh mm ss">
<TIME_FORMAT3="hh mm ">
<WIDTH="600">
<HEIGHT="600">
<HP_PRINT_DENSITY="10">
<DOT_PRINTER="ALL">
</case>
<case=MARKING_DATA>
<LOCATION="0">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="O등급 문서/ $uID / $uName / $uOrg / $HostName">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="2">
<ALIGN="1">
<FONT_SIZE="20">
<FONT_NAME="굴림">
<FONT_COLOR="0">
<FONT_WEIGHT="0">
<TEXT="O등급 문서/ $pDate1 / $pTime1 / $oText">
<MARGINX="0">
<MARGINY="0">
</case>
<case=MARKING_DATA>
<NORMAL_DOC="0">
<LOCATION="1">
<FONT_SIZE="150">
<FONT_NAME="HY견고딕">
<FONT_COLOR="0">
<FONT_WEIGHT="300">
<ALIGN="1">
</case>
<End>
정책 작성 주의
- 이 구성의 등급별 중앙 마킹 =
CENTER_TEXT(텍스트 치환) 방식이다. 기본정책의 중앙 텍스트행("보안문서")을 "C등급"/"S등급"/"O등급"으로 치환한다. - CSO 정책에는 per-grade
IMAGE_FILE_NAME가 없다. 중앙 이미지(dscgru.dll)는 기본정책 고정 — 모든 등급 동일. 등급별로 다른 이미지가 필요하면 CSO 정책에<IMAGE_FILE_NAME="...">추가 + 해당 BMP 를 SDS 폴더 배치 (현 구성 미사용 — 확장 옵션). - CSO_C/S/O 정책 끝의
<case=MARKING_DATA><LOCATION="1">(TEXT/IMAGE 없는 빈 중앙행)은 무효 구조다 (override 가 무시). 두어도 무해하나 동작에 관여하지 않는다.