Chuyển đến nội dung chính

レッスン 28: 本番準備チェックリスト — セキ​​ュリティ、信頼性、コンプライアンス

包括的な生産準備チェックリスト。セキュリティ: OWASP Top 10、シークレット管理、ネットワーク ポリシー。信頼性: ヘルスチェック、サーキットブレーカー、正常なシャットダウン。災害復旧、バックアップ戦略。

🏗️ アーキテクチャ — レッスン 28 レッスン 28: 本番準備チェックリスト — セキュリティ、信頼性、コンプライアンス

マイクロサービスとマイクロ フロントエンドのシステム設計 — 基本から運用まで

パート 9: 可観測性と実稼働の準備状況

xdev.asia

はじめに

運用を開始する前に、システムは 運用準備レビュー を受ける必要があります。この記事では、マイクロサービスとマイクロ フロントエンドの両方に関する包括的なチェックリストを提供します。


1. セキュリティチェックリスト

1.1 アプリケーションのセキュリティ

✅ OWASP Top 10 reviewed:
├── SQL Injection → Parameterized queries
├── XSS → CSP headers, output encoding
├── CSRF → SameSite cookies, CSRF tokens
├── Broken Auth → OAuth2/OIDC, MFA
├── Security Misconfiguration → Hardened defaults
├── Sensitive Data Exposure → Encrypt at rest + transit
├── Broken Access Control → RBAC, resource-level checks
└── Injection → Input validation, allow-lists

1.2 秘密の管理

❌ Secrets in code / environment variables:
DB_PASSWORD=mysecretpassword

✅ External secret management:
├── HashiCorp Vault
├── AWS Secrets Manager
├── Kubernetes External Secrets
└── Sealed Secrets (GitOps-friendly)

1.3 ネットワークセキュリティ

# Kubernetes Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: product-service
spec:
  podSelector:
    matchLabels:
      app: product-service
  policyTypes: [Ingress, Egress]
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: api-gateway
      ports:
        - port: 8080

2. 信頼性チェックリスト

2.1 ヘルスチェック

// Liveness: is the process alive?
app.get('/health/live', (req, res) => {
  res.status(200).json({ status: 'alive' });
});

// Readiness: can it serve traffic?
app.get('/health/ready', async (req, res) => {
  const dbOk = await checkDB();
  const redisOk = await checkRedis();
  
  if (dbOk && redisOk) {
    res.status(200).json({ status: 'ready' });
  } else {
    res.status(503).json({ status: 'not ready', db: dbOk, redis: redisOk });
  }
});

2.2 サーキットブレーカー

Normal:     Service A ──► Service B (responding)
Open:       Service A ──✕ Service B (down, circuit open)
Half-Open:  Service A ──? Service B (testing 1 request)
Closed:     Service A ──► Service B (recovered)

Settings:
├── Failure threshold: 5 failures in 30s → OPEN
├── Reset timeout: 30s → try HALF-OPEN
├── Success threshold: 3 successes → CLOSE
└── Fallback: return cached/default data

2.3 正常なシャットダウン

// Handle SIGTERM gracefully
process.on('SIGTERM', async () => {
  console.log('SIGTERM received, shutting down...');
  
  // 1. Stop accepting new requests
  server.close();
  
  // 2. Wait for in-flight requests (max 30s)
  await waitForInflightRequests(30000);
  
  // 3. Close DB connections
  await db.close();
  
  // 4. Close message broker connections
  await kafka.disconnect();
  
  console.log('Shutdown complete');
  process.exit(0);
});

2.4 リソース制限

# K8s resource limits
resources:
  requests:
    cpu: 100m
    memory: 256Mi
  limits:
    cpu: 500m
    memory: 512Mi

# HPA (auto-scaling)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

3. 実稼働準備チェックリスト

INFRASTRUCTURE:
☐ Kubernetes cluster with node pools
☐ Auto-scaling (HPA) configured
☐ Resource limits set for all pods
☐ Network policies defined
☐ Ingress/Load balancer configured
☐ SSL/TLS certificates (auto-renew)

SECURITY:
☐ OWASP Top 10 reviewed
☐ Secrets in Vault (not env vars)
☐ RBAC policies configured
☐ Container image scanning
☐ Dependency vulnerability scanning
☐ CSP headers configured

RELIABILITY:
☐ Health checks (liveness + readiness)
☐ Circuit breakers for external calls
☐ Graceful shutdown handlers
☐ Retry policies with backoff
☐ Timeouts configured
☐ PodDisruptionBudget set

OBSERVABILITY:
☐ Structured logging (JSON)
☐ Metrics (RED method)
☐ Distributed tracing
☐ Alerting rules defined
☐ Dashboards created
☐ On-call rotation set

DATA:
☐ Database backups (automated, tested)
☐ Database migration strategy
☐ Data retention policies
☐ GDPR/privacy compliance
☐ Encryption at rest

DEPLOYMENT:
☐ CI/CD pipeline tested
☐ Rollback strategy documented
☐ Canary deployment configured
☐ Feature flags for risky features
☐ Runbook documented

4. 災害復旧

コンポーネントRPORTO戦略
ポストグレSQL1分15分ストリーミングレプリカ + WAL アーカイブ
レディス5分5分Redis Sentinel + AOF
カフカ05分マルチブローカー、レプリケーション要素 3
MFE アセット01分マルチリージョン CDN
K8sクラスター該当なし30分マルチ AZ、バックアップされた etcd

概要

  • セキュリティ: OWASP、シークレット管理、ネットワーク ポリシー
  • 信頼性: ヘルスチェック、サーキットブレーカー、正常なシャットダウン
  • 可観測性: ログ、メトリクス、トレース、アラート
  • 災害復旧: バックアップはテスト済み、RPO/RTO は定義済み
  • チェックリスト: 実稼働展開の前に必ず確認してください

次の記事: レッスン 29: ケーススタディ — E コマース プラットフォームの移行