- 00~11: WTM 시수관리 시스템 설계 문서 (아키텍처, DB스키마, API스펙 등) - 12: BE 멀티프로젝트 플랫폼 구성 계획 (wbx-spring-core 라이브러리 전환) - 13: FE Vue3+PrimeVue4 모듈 기반 구조 계획 - 14: 레이아웃 표준 및 디자인 시스템 (반응형, 하드코딩 제거) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
230 줄
8.7 KiB
Markdown
230 줄
8.7 KiB
Markdown
# 09. 한화오션 보안 SW / Azure 인프라
|
|
|
|
> **전제**: Nginx 라우팅, Docker Compose, systemd 등 일반 인프라는
|
|
> `plans/wbx-spring/07-infra-deploy.md`에서 제공.
|
|
> 본 문서는 **한화오션 고객 요구 보안 SW + Azure 구성**만 다룹니다.
|
|
>
|
|
> **비기능 요구사항 매핑**: NF.1~2 (Cloud), NF.3~7 (Security), NF.8~10 (Monitoring), NF.16~17 (Architecture)
|
|
|
|
## Azure 인프라 구성
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Azure Resource Group │
|
|
│ │
|
|
│ ┌───────────────┐ ┌──────────────────────────────────┐ │
|
|
│ │ Azure App │ │ Virtual Network (VNet) │ │
|
|
│ │ Gateway │ │ │ │
|
|
│ │ (WAF + SSL) │ │ ┌─────────┐ ┌─────────────┐ │ │
|
|
│ │ │───▶│ │ VM #1 │ │ VM #2 │ │ │
|
|
│ └───────────────┘ │ │ Nginx │ │ Nginx │ │ │
|
|
│ │ │ +Tomcat │ │ +Tomcat │ │ │
|
|
│ │ │ (Active)│ │ (Standby) │ │ │
|
|
│ │ └────┬────┘ └──────┬──────┘ │ │
|
|
│ │ │ │ │ │
|
|
│ │ ┌────┴────────────────┴────┐ │ │
|
|
│ │ │ Azure SQL / PostgreSQL │ │ │
|
|
│ │ │ (PaaS, HA built-in) │ │ │
|
|
│ │ └──────────────────────────┘ │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────┐ ┌──────────────┐ │ │
|
|
│ │ │ Redis │ │ Blob Storage │ │ │
|
|
│ │ │ Cache │ │ (Files) │ │ │
|
|
│ │ └──────────┘ └──────────────┘ │ │
|
|
│ └──────────────────────────────────┘ │
|
|
│ │
|
|
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────┐ │
|
|
│ │ Azure Entra │ │ Azure Monitor│ │ Key Vault │ │
|
|
│ │ ID (SSO) │ │ + Log │ │ (Secrets) │ │
|
|
│ └──────────────┘ │ Analytics │ └────────────────┘ │
|
|
│ └──────────────┘ │
|
|
└─────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Nginx 설정 (이중화)
|
|
|
|
```nginx
|
|
# /etc/nginx/conf.d/wtmgr.conf
|
|
upstream wtmgr_backend {
|
|
server 127.0.0.1:8080;
|
|
keepalive 32;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
server_name wtmgr.hanwhaocean.com;
|
|
return 301 https://$host$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name wtmgr.hanwhaocean.com;
|
|
|
|
ssl_certificate /etc/ssl/certs/wtmgr.pem;
|
|
ssl_certificate_key /etc/ssl/private/wtmgr.key;
|
|
ssl_protocols TLSv1.2 TLSv1.3;
|
|
|
|
# Security Headers
|
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
|
add_header X-Content-Type-Options "nosniff" always;
|
|
add_header X-XSS-Protection "1; mode=block" always;
|
|
add_header Strict-Transport-Security "max-age=63072000" always;
|
|
|
|
# Rate Limiting
|
|
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
|
|
|
|
# API
|
|
location /api/ {
|
|
proxy_pass http://wtmgr_backend;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
|
|
client_max_body_size 50m; # Excel 업로드
|
|
}
|
|
|
|
# Login Rate Limiting
|
|
location /api/auth/login {
|
|
limit_req zone=login burst=3 nodelay;
|
|
proxy_pass http://wtmgr_backend;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
}
|
|
|
|
# Actuator (내부만)
|
|
location /actuator/ {
|
|
allow 10.0.0.0/8;
|
|
deny all;
|
|
proxy_pass http://wtmgr_backend;
|
|
}
|
|
|
|
# Frontend SPA
|
|
location / {
|
|
root /var/www/wtmgr/frontend;
|
|
index index.html;
|
|
try_files $uri $uri/ /index.html;
|
|
}
|
|
}
|
|
```
|
|
|
|
## CI/CD · Docker · 배포
|
|
|
|
> CI/CD 파이프라인(GitHub Actions, Azure DevOps), Dockerfile, docker-compose,
|
|
> Nginx 설정 등 일반 인프라는 **wbx-spring 프레임워크**에서 표준 제공합니다.
|
|
>
|
|
> 상세: `plans/wbx-spring/07-infra-deploy.md`
|
|
>
|
|
> WTM은 아래 **고객 전용 설정만** 추가합니다:
|
|
|
|
### WTM 전용 환경변수 (.env)
|
|
|
|
```env
|
|
# wbx-spring 공통 (프레임워크 제공)
|
|
JWT_SECRET=...
|
|
DB_HOST=...
|
|
SPRING_PROFILES_ACTIVE=prod,azure,mssql
|
|
|
|
# WTM 전용
|
|
WTM_WORK_RULES_DEFAULT_MIN_DAILY=8
|
|
WTM_WORK_RULES_DEFAULT_MAX_WEEKLY=52
|
|
SAP_BTP_ENDPOINT=https://btp.hanwhaocean.com/api
|
|
SAP_BTP_CLIENT_ID=...
|
|
SAP_BTP_CLIENT_SECRET=...
|
|
```
|
|
|
|
### WTM 전용 application-prod.yml (wbx.spring 위에 추가)
|
|
|
|
```yaml
|
|
wtm:
|
|
work-rules:
|
|
default-min-daily-hours: 8
|
|
default-max-weekly-hours: 52
|
|
sap:
|
|
btp-endpoint: ${SAP_BTP_ENDPOINT}
|
|
btp-client-id: ${SAP_BTP_CLIENT_ID}
|
|
sync-cron: "0 0 2 * * *" # 매일 02시
|
|
```
|
|
|
|
## 보안 SW — 한화오션 표준 (NF.3~7)
|
|
|
|
### 서버 보안 (NF.3)
|
|
|
|
| SW | 용도 | 구성 방법 |
|
|
|----|------|----------|
|
|
| **HIWARE** | 서버 접근 제어 | Azure VM에 HIWARE Agent 설치 |
|
|
| **V3** (AhnLab) | 서버 백신 | Azure VM에 V3 Agent 설치 |
|
|
| **Secuver TOS** | 서버 보안 (파일 무결성) | Azure VM에 Agent 설치 |
|
|
|
|
### DB 보안 (NF.4)
|
|
|
|
| SW | 용도 | 구성 방법 |
|
|
|----|------|----------|
|
|
| **Cubeone** | DB 암호화 (컬럼 레벨) | Azure SQL TDE + Cubeone 연동 |
|
|
| **Dbsafer** | DB 접근 제어/감사 | Dbsafer Proxy 서버 구성 |
|
|
|
|
### 클라우드 보안 (NF.5)
|
|
|
|
| SW | 용도 |
|
|
|----|------|
|
|
| **Azure Defender** | 위협 탐지 (VM + SQL) |
|
|
| **Azure Log Analytics** | 보안 이벤트 분석 |
|
|
| Azure WAF | 웹 방화벽 (App Gateway) |
|
|
| Azure DDoS Protection | DDoS 방어 |
|
|
| Azure Key Vault | 시크릿 관리 (DB PW, JWT 키) |
|
|
|
|
### 정보보호 심의 (NF.6~7)
|
|
|
|
```
|
|
□ 웹 애플리케이션 취약점 점검 (OWASP Top 10)
|
|
□ 서버/네트워크 인프라 보안 점검
|
|
□ 소스코드 보안 점검 (SonarQube / Fortify)
|
|
□ 모의해킹 (Penetration Testing)
|
|
□ 개인정보 보호 관리 (개인정보보호법 준수)
|
|
□ 한화그룹 보안 표준 준수 확인
|
|
```
|
|
|
|
## 모니터링 SW — 한화오션 표준 (NF.8~10)
|
|
|
|
| SW | 용도 | 대상 | 구성 |
|
|
|----|------|------|------|
|
|
| **onTune** | SMS (서버 모니터링) | Azure VM | Agent 설치 |
|
|
| **MCCS** | HA (클러스터) | WAS 이중화 | Linux: Keepalived 대안 검토 |
|
|
| **Maxguage** | DB 모니터링/성능 분석 | Azure SQL | Proxy 구성 |
|
|
| **Jennifer** | WAS(Tomcat) APM | Spring Boot | `-javaagent` 연동 |
|
|
|
|
### Jennifer APM 연동 (NF.10)
|
|
|
|
> Dockerfile, docker-compose 설정은 wbx-spring 표준을 사용합니다.
|
|
> 아래는 **WTM 전용** JVM 옵션 추가 사항입니다.
|
|
|
|
```yaml
|
|
# systemd 서비스 또는 docker-compose에 JVM 옵션 추가
|
|
JAVA_OPTS: >-
|
|
-javaagent:/opt/jennifer/agent.java/jennifer.jar
|
|
-Djennifer.config=/opt/jennifer/conf/jennifer.conf
|
|
|
|
# application-prod.yml (WTM 전용 메트릭 태그)
|
|
management:
|
|
metrics:
|
|
tags:
|
|
application: wtm-api
|
|
health:
|
|
db:
|
|
enabled: true
|
|
redis:
|
|
enabled: true
|
|
|
|
# 알림 규칙: CPU > 80%, Memory > 85%, 5xx > 10/min, Response Time > 3s
|
|
```
|
|
|
|
## 백업 전략 (NF.16~17)
|
|
|
|
| 항목 | 방식 | 주기 |
|
|
|------|------|------|
|
|
| Azure SQL | 자동 백업 (Point-in-Time) | 5분 간격 |
|
|
| Azure SQL | Long-term Retention | 주간/월간 |
|
|
| Blob Storage | GRS (Geo-Redundant) | 실시간 복제 |
|
|
| VM 설정 | Azure Backup | 일간 |
|
|
| 코드 | GitHub | 실시간 (Git) |
|