# 보안

> Xisom이 모델, 데이터, 운영에 대한 접근을 보호하는 방법 — 인증, 접근 제어, 강화된 컨테이너, 감사 추적.

Xisom은 산업용 네트워크를 위해 구축되었으며 OWASP Top 10에 대비해 강화되어 있습니다. 이
페이지는 무엇이 박스를 보호하고, 운영자로서 여러분이 무엇을 책임지는지를 요약합니다.

## 인증

목적에 따라 분리된 두 개의 별도 로그인 경로:

- **운영자와 관리자**는 사용자 이름과 비밀번호로 대시보드와 API에 로그인하고
  **JWT** 베어러 토큰을 받습니다. 비밀번호는 BCrypt 해시로만 저장되며 — 평문으로는
  절대 저장되지 않습니다.
- 외부 API를 호출하는 **파트너 시스템**은 **정적 API 키**를 사용하며, 요청 헤더로
  전송되고 BCrypt 해시로만 저장됩니다.

**JWT 서명 비밀키 보호**

각 배포는 설치 시점에 박스에서 생성되어 보호된 파일에 저장되는 고유한 JWT 서명 비밀키를
갖습니다. 다른 비밀과 마찬가지로 취급하세요 — 절대 공유하거나 커밋하지 마세요. 비밀키를
교체하면 모든 사용자가 로그아웃되는데, 이는 의도된 효과입니다.

## 접근 제어

- **기본 차단.** 모든 엔드포인트는 명시적으로 공개로 표시되지 않는 한 로그인한 사용자를
  요구합니다. 엔드포인트 보호를 잊더라도 노출되지 않습니다.
- **역할 기반.** 관리자 전용 작업(예: 출력 테스트 쓰기 전송 또는 키 관리)은 관리자
  계정으로 제한됩니다.
- 로그인과 상태 점검만 인증 없이 접근할 수 있습니다.

## 무차별 대입 공격 방어

로그인 엔드포인트는 소스 IP별로 속도 제한이 적용됩니다 — 반복된 **실패한** 로그인은 짧은
기간을 소진시키는 반면, 정상적인 사용(그리고 여러 탭을 열어 둔 운영자)은 불이익을 받지
않습니다. 이것은 프로덕션에서 항상 활성화되어 있습니다.

## 강화된 컨테이너

- 모든 서비스 컨테이너는 **비루트** 사용자로 실행됩니다.
- 웹 프런트엔드는 컨테이너 내부의 비특권 포트에서 수신 대기합니다.
- 서비스 이미지는 상태 점검을 포함하므로 플랫폼이 비정상 서비스를 감지할 수 있습니다.

## 비밀 처리

- 사용자 비밀번호와 API 키는 BCrypt 해시로만 저장됩니다.
- 연결 구성 비밀(데이터소스 비밀번호, 토큰)은 다시 읽을 때 **`***`로 마스킹**됩니다;
  변경하지 않고 저장하면 저장된 값이 유지됩니다.
- API 키 값은 생성 시 **한 번만** 표시됩니다 — 즉시 저장하세요.

## 감사 추적

모든 로그인 결과(성공 및 실패)와 모든 외부 API 호출이 감사 로그에 기록되므로, 누가 언제
시스템에 접근했는지 검토할 수 있습니다.

## 프로덕션 강화 체크리스트

프로덕션 엣지 배포의 경우 다음을 확인하세요:

- 대시보드와 API 앞단의 리버스 프록시에서의 TLS 종료.
- 배포별 강력하고 고유한 JWT 서명 비밀키(설치 프로그램에 의해 자동 생성됨).
- 파트너 통합에 필요하지 않은 한 대화형 API 탐색기(Swagger)는 비활성화됨.
- 데이터소스 연결은 익명 접근이 아닌 — 인증된 브로커 / 보안 OPC-UA 정책을 사용함.
- 파괴적 작업 전 데이터 볼륨의 정기적인 백업.

**위협 모델**

이 플랫폼은 공용 인터넷에 직접 노출되는 것이 아니라 내부 산업용 네트워크를 위해
설계되었습니다. 공장 네트워크의 경계 제어 뒤에 배치하세요.
