# 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) |