snow · 2026.5.27 13:46 · 조회 1

Logto 프로덕션 배포

LogtoIAM프로덕션보안Docker배포

Logto를 실제 서비스 환경에 배포하기 전에 반드시 확인해야 할 보안 체크리스트, Docker/Kubernetes 기반 배포 방법, 그리고 운영 중 모니터링 방법을 안내합니다.


8.1 프로덕션 보안 체크리스트

배포 전 아래 항목을 반드시 확인하십시오.

필수 보안 항목

항목확인 방법중요도
HTTPS 적용모든 엔드포인트에 TLS/SSL 인증서 적용🔴 필수
강력한 DB 비밀번호16자 이상, 특수문자 포함🔴 필수
환경변수 분리.env 파일을 git에 커밋하지 않음🔴 필수
Redirect URI 제한와일드카드(*) 사용 금지, 명시적 URL만 허용🔴 필수
CORS 설정허용 도메인을 명시적으로 제한🔴 필수
Cookie 보안Secure, HttpOnly, SameSite 플래그 설정🔴 필수
Rate Limiting로그인 시도 횟수 제한🟡 권장
감사 로그 보관최소 90일 이상🟡 권장
MFA 강제 적용관리자 계정에 필수🟡 권장

Redirect URI 보안 예시

❌ 잘못된 설정: https://*.yourapp.com/callback (와일드카드 사용 금지) http://yourapp.com/callback (HTTP 금지) ✅ 올바른 설정: https://app.yourapp.com/callback https://www.yourapp.com/callback

환경변수 관리

1# .env.production (절대 git에 포함하지 마십시오)2DB_URL=postgresql://logto:STRONG_PASS@db-host:5432/logto3LOGTO_SECRET=your-32-char-random-secret4ADMIN_ENDPOINT=https://admin.yourcompany.com5ENDPOINT=https://auth.yourcompany.com6 7# 랜덤 시크릿 생성8openssl rand -base64 32

8.2 Docker 프로덕션 배포

프로덕션용 docker-compose.yml

1version: '3.9'2 3services:4  postgres:5    image: postgres:15-alpine6    restart: unless-stopped7    environment:8      POSTGRES_DB: logto9      POSTGRES_USER: logto10      POSTGRES_PASSWORD: ${DB_PASSWORD}11    volumes:12      - postgres_data:/var/lib/postgresql/data13    networks:14      - internal15    healthcheck:16      test: ["CMD-SHELL", "pg_isready -U logto"]17      interval: 10s18      timeout: 5s19      retries: 520 21  logto:22    image: svhd/logto:latest23    restart: unless-stopped24    depends_on:25      postgres:26        condition: service_healthy27    networks:28      - internal29      - public30    environment:31      DB_URL: postgresql://logto:${DB_PASSWORD}@postgres:5432/logto32      ENDPOINT: https://auth.yourcompany.com33      ADMIN_ENDPOINT: https://admin.yourcompany.com34      LOGTO_SECRET: ${LOGTO_SECRET}35    expose:36      - "3000"37      - "3001"38 39  nginx:40    image: nginx:alpine41    restart: unless-stopped42    ports:43      - "443:443"44      - "80:80"45    volumes:46      - ./nginx.conf:/etc/nginx/nginx.conf:ro47      - ./ssl:/etc/ssl/certs:ro48    depends_on:49      - logto50    networks:51      - public52 53volumes:54  postgres_data:55 56networks:57  internal:58    driver: bridge59  public:60    driver: bridge

nginx.conf 예시

1server {2    listen 443 ssl http2;3    server_name auth.yourcompany.com;4 5    ssl_certificate     /etc/ssl/certs/fullchain.pem;6    ssl_certificate_key /etc/ssl/certs/privkey.pem;7    ssl_protocols       TLSv1.2 TLSv1.3;8 9    location / {10        proxy_pass         http://logto:3000;11        proxy_set_header   Host $host;12        proxy_set_header   X-Real-IP $remote_addr;13        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;14        proxy_set_header   X-Forwarded-Proto $scheme;15    }16}17 18server {19    listen 443 ssl http2;20    server_name admin.yourcompany.com;21 22    ssl_certificate     /etc/ssl/certs/fullchain.pem;23    ssl_certificate_key /etc/ssl/certs/privkey.pem;24 25    allow 10.0.0.0/8;26    deny all;27 28    location / {29        proxy_pass http://logto:3001;30        proxy_set_header Host $host;31        proxy_set_header X-Real-IP $remote_addr;32    }33}

데이터베이스 초기화 및 마이그레이션

1# 첫 배포 시: DB 초기화 및 시드2docker compose run --rm logto npm run cli db seed -- --swe3 4# 버전 업그레이드 시: 마이그레이션 실행5docker compose run --rm logto npm run cli db alteration deploy next

8.3 Kubernetes 배포

Helm Chart를 이용한 배포 (권장)

1helm repo add logto https://charts.logto.io2helm repo update3 4cat > values.yaml << EOF5replicaCount: 26 7image:8  repository: svhd/logto9  tag: latest10 11config:12  endpoint: "https://auth.yourcompany.com"13  adminEndpoint: "https://admin.yourcompany.com"14 15database:16  url: "postgresql://logto:password@postgres-service:5432/logto"17 18ingress:19  enabled: true20  className: nginx21  hosts:22    - host: auth.yourcompany.com23      paths: [{ path: /, pathType: Prefix, port: 3000 }]24    - host: admin.yourcompany.com25      paths: [{ path: /, pathType: Prefix, port: 3001 }]26  tls:27    - secretName: logto-tls28      hosts: [auth.yourcompany.com, admin.yourcompany.com]29 30resources:31  requests:32    cpu: 500m33    memory: 512Mi34  limits:35    cpu: 1000m36    memory: 1Gi37EOF38 39helm install logto logto/logto -n logto --create-namespace -f values.yaml

PostgreSQL 고가용성 권장 구성

권장 DB 옵션: - Cloud: AWS RDS PostgreSQL, Google Cloud SQL, Azure Database for PostgreSQL - Self-hosted: Patroni + pgBouncer, Citus, Supabase - 최소 사양: 2 vCPU, 4GB RAM, 50GB SSD

8.4 모니터링 및 운영

Audit Log 활용

Admin Console → Audit logs에서 모든 인증/인가 이벤트를 확인할 수 있습니다.

이벤트의미대응
PostSignIn (실패 반복)브루트포스 시도 가능성IP 차단 검토
User.SuspensionStatusUpdated계정 정지/복구내부 감사 기록
Role.Scopes.Updated권한 변경변경 승인 절차 확인
Organization.Membership.Updated조직 멤버 변경인가된 변경인지 확인

Webhook으로 외부 SIEM 연동

1app.post('/siem/logto', (req, res) => {2  const event = req.body;3  4  siemClient.ingest({5    source: 'logto',6    event: event.event,7    userId: event.data?.userId,8    ip: event.ip,9    userAgent: event.userAgent,10    timestamp: event.createdAt,11  });12 13  res.status(200).send();14});

백업 전략

1#!/bin/bash2DATE=$(date +%Y%m%d_%H%M%S)3BACKUP_DIR=/backups/logto4 5docker exec logto-postgres pg_dump -U logto logto \6  | gzip > "${BACKUP_DIR}/logto_${DATE}.sql.gz"7 8find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete9 10aws s3 cp "${BACKUP_DIR}/logto_${DATE}.sql.gz" s3://your-backup-bucket/logto/

8.5 업그레이드 절차

1# 1. 이미지 업데이트2docker compose pull logto3 4# 2. DB 마이그레이션 실행5docker compose run --rm logto npm run cli db alteration deploy next6 7# 3. 서비스 재시작8docker compose up -d logto9 10# 4. 헬스체크11curl https://auth.yourcompany.com/api/status

마무리

이 가이드를 통해 Logto를 도입하여 프로덕션 환경까지 배포하는 전 과정을 다루었습니다.

파트내용
1 — Logto 시작하기Cloud/셀프호스팅 선택, 테넌트 설정
2 — Logto 첫 번째 앱 연동SDK 설치, 로그인/로그아웃, 콜백 처리
3 — Logto 인증 방식 설정이메일, 소셜, OTP, MFA
4 — Logto 사용자 관리Admin Console, Management API, Webhook
5 — Logto 인가 설정API 리소스, RBAC, 토큰 검증
6 — Logto 멀티 테넌트Organizations, JIT 프로비저닝
7 — Logto 로그인 UI 커스터마이징브랜딩, CSS, 커스텀 도메인
8 — Logto 프로덕션 배포보안 체크리스트, Docker, K8s, 모니터링

문의 사항은 Logto Discord 커뮤니티 또는 GitHub Issues를 활용하십시오.


참고: Logto 공식 문서 — https://docs.logto.io

댓글

아직 댓글이 없습니다.

댓글을 작성하려면 로그인이 필요합니다.