docs: [제품검사] FQC 문서 시스템 계획 + 스냅샷 Lazy Snapshot 반영
- fqc-document-system-plan.md: FormRequest 상태 수정, Phase 2.4 Lazy Snapshot 확정, 참고 파일 추가 - document-snapshot-architecture-plan.md: Lazy Snapshot 캡처 원칙 추가 - server-access-management.md 신규 - README.md 수정 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
150
system/server-access-management.md
Normal file
150
system/server-access-management.md
Normal file
@@ -0,0 +1,150 @@
|
||||
# SAM 서버 접근 권한 관리
|
||||
|
||||
## 개요
|
||||
|
||||
SAM 시스템의 서버 및 데이터베이스 접근 권한을 관리합니다.
|
||||
서버 관리자는 1명이며, 외부 인원에게는 임시로 접근을 허용하고 작업 완료 후 차단합니다.
|
||||
|
||||
**최종 업데이트:** 2026-03-05
|
||||
|
||||
---
|
||||
|
||||
## 서버 정보
|
||||
|
||||
| 구분 | 호스트 | SSH alias | 용도 |
|
||||
|------|--------|-----------|------|
|
||||
| 운영 (prod) | 211.117.60.189 | `sam-prod` | API + React 운영 배포 |
|
||||
| CI/CD | 114.203.209.83 | `sam-cicd` | Jenkins + React 개발 배포 |
|
||||
|
||||
---
|
||||
|
||||
## OS 계정 현황
|
||||
|
||||
### sam-prod (운영서버)
|
||||
|
||||
| 계정 | 용도 | 상태 |
|
||||
|------|------|------|
|
||||
| `hskwon` | 서버 관리자 (배포, 운영) | 활성 |
|
||||
| `pro` | 외부 작업자 임시 접근용 | **잠금** |
|
||||
|
||||
### sam-cicd (CI/CD 서버)
|
||||
|
||||
| 계정 | 용도 | 상태 |
|
||||
|------|------|------|
|
||||
| `hskwon` | 서버 관리자 | 활성 |
|
||||
| `pro` | 외부 작업자 임시 접근용 | **잠금** |
|
||||
|
||||
---
|
||||
|
||||
## OS 계정 잠금/해제
|
||||
|
||||
외부 작업자에게 서버 접근이 필요한 경우, 작업 시간 동안만 해제하고 완료 후 다시 잠금합니다.
|
||||
|
||||
```bash
|
||||
# 계정 잠금
|
||||
sudo usermod -L pro
|
||||
|
||||
# 계정 해제
|
||||
sudo usermod -U pro
|
||||
|
||||
# 상태 확인 (비밀번호 필드 앞에 ! 있으면 잠금 상태)
|
||||
sudo passwd -S pro
|
||||
```
|
||||
|
||||
### 임시 접근 절차
|
||||
|
||||
1. 작업 요청 접수 및 범위 확인
|
||||
2. `sudo usermod -U pro` 로 해제
|
||||
3. 작업 완료 확인
|
||||
4. `sudo usermod -L pro` 로 잠금
|
||||
5. 작업 내용 기록
|
||||
|
||||
---
|
||||
|
||||
## DB 계정 현황
|
||||
|
||||
### sam-prod (운영서버 MySQL 8.4)
|
||||
|
||||
| 계정 | 인증 플러그인 | 접근 DB | 용도 |
|
||||
|------|-------------|---------|------|
|
||||
| `codebridge@localhost` | caching_sha2_password | sam, sam_stage, sam_stat, codebridge | 애플리케이션 (.env) |
|
||||
| `hskwon@localhost` | caching_sha2_password | 전역 관리자 + sam | 서버 관리자 |
|
||||
| `pro@localhost` | caching_sha2_password | sam, sam_stage, sam_stat, codebridge | 외부 작업자용 |
|
||||
|
||||
### sam-cicd (CI/CD 서버 MySQL 8.4)
|
||||
|
||||
| 계정 | 인증 플러그인 | 접근 DB | 용도 |
|
||||
|------|-------------|---------|------|
|
||||
| `hskwon@localhost` | caching_sha2_password | 전역 관리자 | 서버 관리자 |
|
||||
| `pro@localhost` | caching_sha2_password | sam, sam_stage, sam_stat, codebridge, gitea | 외부 작업자용 |
|
||||
|
||||
> **참고:** cicd 서버에는 `codebridge` DB 계정이 없음 (애플리케이션이 다른 계정 사용)
|
||||
|
||||
---
|
||||
|
||||
## DB 계정 관리
|
||||
|
||||
### 계정 잠금/해제 (MySQL)
|
||||
|
||||
```sql
|
||||
-- 계정 잠금
|
||||
ALTER USER 'pro'@'localhost' ACCOUNT LOCK;
|
||||
|
||||
-- 계정 해제
|
||||
ALTER USER 'pro'@'localhost' ACCOUNT UNLOCK;
|
||||
|
||||
-- 상태 확인
|
||||
SELECT user, host, account_locked FROM mysql.user WHERE user = 'pro';
|
||||
```
|
||||
|
||||
### 인증 플러그인 변경
|
||||
|
||||
MySQL 8.4에서는 `mysql_native_password`가 제거되었으므로 `caching_sha2_password`를 사용합니다.
|
||||
|
||||
```sql
|
||||
ALTER USER 'username'@'localhost' IDENTIFIED WITH caching_sha2_password BY '비밀번호';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
### PhpStorm 접속 시 주의사항
|
||||
|
||||
- SSH 터널 필수 (MySQL이 localhost만 허용)
|
||||
- Host: `localhost` (127.0.0.1 아님)
|
||||
- `caching_sha2_password` 사용 시 Advanced 탭에서 `allowPublicKeyRetrieval = true` 설정 필요
|
||||
|
||||
---
|
||||
|
||||
## 배포 계정 관리
|
||||
|
||||
### Jenkins 배포 흐름
|
||||
|
||||
| 프로젝트 | main | develop |
|
||||
|----------|------|---------|
|
||||
| **api** | Jenkins (Stage + Production) | post-update hook (Jenkins 미관여) |
|
||||
| **react** | Jenkins (Stage + Production) | Jenkins (Development) |
|
||||
|
||||
- 배포 SSH 계정: `hskwon` (deploy-ssh-key 크레덴셜)
|
||||
- Slack 알림: `#deploy_api`, `#deploy_react`
|
||||
|
||||
---
|
||||
|
||||
## 관리 정책
|
||||
|
||||
1. **서버 관리자 1명 원칙** — 여러 명이 동시에 관리하지 않음
|
||||
2. **임시 접근만 허용** — 외부 작업자는 필요 시에만 OS/DB 계정 해제
|
||||
3. **작업 완료 후 즉시 잠금** — 해제 상태로 방치하지 않음
|
||||
4. **DB 접근은 SSH 터널 경유** — 외부에서 MySQL 직접 접근 불가 (localhost 바인딩)
|
||||
|
||||
---
|
||||
|
||||
## 참고
|
||||
|
||||
- API 보안 가이드: [security-policy.md](./security-policy.md)
|
||||
- Docker 설정: [docker-setup.md](./docker-setup.md)
|
||||
- 원격 근무 설정: [remote-work-setup.md](./remote-work-setup.md)
|
||||
|
||||
---
|
||||
|
||||
**작성일:** 2026-03-05
|
||||
**버전:** 1.0
|
||||
**담당자:** SAM Infrastructure Team
|
||||
Reference in New Issue
Block a user