🔒 보안

ISMS-P

Information Security Management System - Personal information

정보보호 관리체계(ISMS)와 개인정보보호 관리체계(PIMS)를 통합한 국내 인증제도. 한국인터넷진흥원(KISA)이 인증하며, 정보통신망법상 의무 인증 대상 기업이 취득해야 합니다.

📖 상세 설명

ISMS-P(정보보호 및 개인정보보호 관리체계)는 2018년 11월부터 시행된 국내 통합 인증제도입니다. 기존에 분리되어 있던 ISMS(정보보호 관리체계)와 PIMS(개인정보보호 관리체계)를 하나로 통합하여, 기업이 한 번의 심사로 두 가지 인증을 동시에 취득할 수 있게 되었습니다. 인증 심사는 한국인터넷진흥원(KISA)과 인증기관이 수행합니다.

인증 체계는 크게 3개 영역으로 구성됩니다. 관리체계 수립 및 운영(16개 항목), 보호대책 요구사항(64개 항목), 개인정보 처리단계별 요구사항(22개 항목)으로 총 102개 인증기준을 충족해야 합니다. ISMS만 받을 경우 80개, ISMS-P를 받을 경우 102개 항목을 심사받습니다.

의무 인증 대상은 정보통신망법에 명시되어 있습니다. ISP, IDC, 연간 매출 100억 이상 또는 일평균 이용자 100만 이상인 정보통신서비스 제공자가 해당됩니다. 의무 대상이 아니더라도 자발적으로 인증을 취득하여 보안 역량을 증명하는 기업이 늘고 있습니다.

인증 유효기간은 3년이며, 매년 사후심사를 받아야 합니다. 인증을 취득하면 개인정보보호법과 정보통신망법상 과태료 감경, 정부 사업 입찰 시 가산점 등의 혜택이 있습니다. 최근에는 클라우드 서비스, AI 서비스 기업들도 고객 신뢰 확보를 위해 적극적으로 인증을 추진하고 있습니다.

💻 코드 예제

# ISMS-P 인증 기준 자동 점검 도구 예시

import json
from datetime import datetime
from typing import Dict, List
from dataclasses import dataclass

@dataclass
class ControlItem:
    """인증 항목 정의"""
    code: str           # 항목 코드 (예: 1.1.1)
    category: str       # 영역 (관리체계/보호대책/개인정보)
    title: str          # 항목명
    description: str    # 상세 설명
    evidence_required: List[str]  # 필수 증적

class ISMSPComplianceChecker:
    """ISMS-P 인증 준비 상태 점검 도구"""

    def __init__(self, certification_type: str = "ISMS-P"):
        self.certification_type = certification_type
        self.control_items = self._load_control_items()
        self.compliance_status: Dict[str, dict] = {}

    def _load_control_items(self) -> List[ControlItem]:
        """인증 기준 항목 로드"""
        items = []

        # 1. 관리체계 수립 및 운영 (16개 항목)
        management_controls = [
            ControlItem(
                code="1.1.1",
                category="관리체계",
                title="경영진의 참여",
                description="정보보호 및 개인정보보호 관리체계 수립과 운영에 경영진이 참여",
                evidence_required=["정보보호 정책 승인 문서", "경영진 검토 회의록"]
            ),
            ControlItem(
                code="1.1.2",
                category="관리체계",
                title="최고책임자 지정",
                description="정보보호 최고책임자(CISO) 및 개인정보 보호책임자(CPO) 지정",
                evidence_required=["임명장", "조직도", "직무기술서"]
            ),
            ControlItem(
                code="1.2.1",
                category="관리체계",
                title="정보자산 식별",
                description="관리체계 범위 내 모든 정보자산을 식별하고 목록화",
                evidence_required=["정보자산 목록", "자산분류체계"]
            ),
            ControlItem(
                code="1.3.1",
                category="관리체계",
                title="위험 식별 및 평가",
                description="정보자산에 대한 위험을 식별하고 평가",
                evidence_required=["위험평가 보고서", "위험평가 방법론 문서"]
            ),
        ]
        items.extend(management_controls)

        # 2. 보호대책 요구사항 (64개 중 주요 항목)
        protection_controls = [
            ControlItem(
                code="2.1.1",
                category="보호대책",
                title="정책의 유지관리",
                description="정보보호 정책을 문서화하고 주기적으로 검토/개정",
                evidence_required=["정보보호 정책서", "개정 이력", "배포 기록"]
            ),
            ControlItem(
                code="2.2.1",
                category="보호대책",
                title="주요 직무자 지정 및 관리",
                description="중요 정보 및 시스템 접근 권한 보유자 지정/관리",
                evidence_required=["주요 직무자 목록", "접근권한 현황"]
            ),
            ControlItem(
                code="2.5.1",
                category="보호대책",
                title="사용자 계정 관리",
                description="사용자 계정의 등록, 변경, 삭제 절차 수립/운영",
                evidence_required=["계정관리 절차서", "계정 현황", "퇴직자 계정 처리 기록"]
            ),
            ControlItem(
                code="2.6.1",
                category="보호대책",
                title="네트워크 접근 통제",
                description="네트워크 접근에 대한 통제 정책 수립/이행",
                evidence_required=["네트워크 구성도", "방화벽 정책", "접근통제 로그"]
            ),
            ControlItem(
                code="2.9.1",
                category="보호대책",
                title="보안 로그 및 모니터링",
                description="보안 이벤트 로그를 기록하고 모니터링",
                evidence_required=["로그관리 정책", "모니터링 현황", "이상징후 대응 기록"]
            ),
        ]
        items.extend(protection_controls)

        # 3. 개인정보 처리단계별 요구사항 (ISMS-P인 경우)
        if self.certification_type == "ISMS-P":
            privacy_controls = [
                ControlItem(
                    code="3.1.1",
                    category="개인정보",
                    title="개인정보 수집 제한",
                    description="목적에 필요한 최소한의 개인정보만 수집",
                    evidence_required=["개인정보 수집 현황", "수집 근거 문서", "동의서 양식"]
                ),
                ControlItem(
                    code="3.1.2",
                    category="개인정보",
                    title="개인정보 수집 동의",
                    description="개인정보 수집 시 적법한 동의 획득",
                    evidence_required=["개인정보처리방침", "동의 획득 절차", "동의 기록"]
                ),
                ControlItem(
                    code="3.3.1",
                    category="개인정보",
                    title="개인정보 제3자 제공",
                    description="개인정보 제3자 제공 시 동의 획득 및 관리",
                    evidence_required=["제3자 제공 현황", "제공 계약서", "동의 기록"]
                ),
                ControlItem(
                    code="3.5.1",
                    category="개인정보",
                    title="개인정보 파기",
                    description="보유기간 경과 시 지체없이 파기",
                    evidence_required=["파기 절차서", "파기 대장", "파기 완료 증적"]
                ),
            ]
            items.extend(privacy_controls)

        return items

    def check_compliance(self, control_code: str, status: str,
                        evidence: List[str], notes: str = "") -> dict:
        """개별 항목 점검 결과 기록"""
        result = {
            "code": control_code,
            "status": status,  # "적합", "부분적합", "부적합", "미점검"
            "evidence": evidence,
            "notes": notes,
            "checked_at": datetime.now().isoformat()
        }
        self.compliance_status[control_code] = result
        return result

    def generate_gap_analysis(self) -> Dict:
        """Gap 분석 보고서 생성"""
        total = len(self.control_items)
        checked = len(self.compliance_status)

        status_count = {"적합": 0, "부분적합": 0, "부적합": 0, "미점검": 0}
        for item in self.control_items:
            if item.code in self.compliance_status:
                status = self.compliance_status[item.code]["status"]
                status_count[status] = status_count.get(status, 0) + 1
            else:
                status_count["미점검"] += 1

        # 카테고리별 분석
        category_analysis = {}
        for item in self.control_items:
            if item.category not in category_analysis:
                category_analysis[item.category] = {"total": 0, "적합": 0}
            category_analysis[item.category]["total"] += 1
            if item.code in self.compliance_status:
                if self.compliance_status[item.code]["status"] == "적합":
                    category_analysis[item.category]["적합"] += 1

        return {
            "certification_type": self.certification_type,
            "total_controls": total,
            "checked_controls": checked,
            "status_summary": status_count,
            "compliance_rate": round(status_count["적합"] / total * 100, 1),
            "category_analysis": category_analysis,
            "generated_at": datetime.now().isoformat()
        }

# 사용 예시
checker = ISMSPComplianceChecker(certification_type="ISMS-P")

# 점검 결과 기록
checker.check_compliance(
    control_code="1.1.1",
    status="적합",
    evidence=["정보보호정책_v2.1.pdf", "경영진검토회의록_2024Q1.pdf"],
    notes="2024년 1분기 경영진 검토 완료"
)

# Gap 분석 보고서 생성
report = checker.generate_gap_analysis()
print(json.dumps(report, indent=2, ensure_ascii=False))

🗣️ 실무에서 이렇게 말해요

CISO: "올해 ISMS-P 갱신 심사가 3분기에 예정되어 있어요. 작년 지적사항 조치 현황 공유해주세요."

보안담당자: "로그 보관 기간 미준수 건은 SIEM 정책 변경으로 조치 완료했고, 퇴직자 계정 미삭제 건은 HR 연동 자동화로 해결했습니다."

CISO: "좋아요. 이번에 새로 추가된 AI 서비스 관련해서 개인정보 처리 현황도 점검해주세요. 3.1.1 수집 제한 항목에서 걸릴 수 있어요."

면접관: "ISMS와 ISMS-P의 차이점이 뭔가요?"

지원자: "ISMS는 정보보호 관리체계로 80개 인증 항목이 있고, ISMS-P는 여기에 개인정보보호 22개 항목이 추가되어 총 102개입니다. 개인정보를 많이 처리하는 서비스라면 ISMS-P를 받는 게 고객 신뢰 측면에서 유리합니다."

면접관: "인증 심사 경험이 있으신가요?"

지원자: "네, 최초 심사와 사후 심사 2회 경험이 있습니다. 증적 준비가 가장 중요한데, 정책 문서의 버전 관리와 실제 운영 증거(로그, 회의록 등)가 일치해야 합니다."

리뷰어: "이 API에서 주민등록번호를 수집하는데, 개인정보 수집 최소화 원칙에 맞나요? ISMS-P 3.1.1 항목 걸릴 수 있어요."

작성자: "본인 인증 목적인데, 생년월일만 있어도 되네요. CI/DI로 대체하고 주민번호 수집은 제거하겠습니다."

⚠️ 주의사항

📚 더 배우기