본문 바로가기
IT & Tech 정보

🔐 Terraform + Vault + ArgoCD 기반 전환경 비밀정보(Secrets) 자동 관리 파이프라인 구축기

by 지식과 지혜의 나무 2025. 5. 29.
반응형



🔎 왜 이 전략이 필요한가?

DevOps의 고질적 문제는 Secrets 관리의 파편화입니다.
개발 환경에서는 .env, 운영 환경에서는 AWS Secrets Manager, 일부는 K8s Secret 등…

결과적으로:
• 접근 권한이 불분명해 보안 위험 발생
• CI/CD 자동화 시 Secrets 삽입 위치가 복잡해짐
• 운영자 수동 배포 → 사람 오류 발생 가능성 증가

이를 해결하기 위해 실리콘밸리 및 대형 기업들은 다음과 같은 통합 전략을 사용합니다:

Terraform으로 Vault 인프라를 정의하고,
Vault에서 Secret을 관리하고,
ArgoCD에서 동적으로 Secrets를 주입하며,
CI/CD와 통합하여 자동화합니다.



🧱 전체 아키텍처 요약

Terraform  → Vault 생성 및 초기화
Vault      → Secrets 저장 및 K8s 인증 연동
ArgoCD     → Vault와 연동된 Helm/Kustomize 템플릿으로 배포 시점에 Secrets 주입
GitHub Actions  → Vault에 API로 Secrets 쓰기 + ArgoCD Refresh 트리거




📁 디렉토리 구조 예시

repo-root/
├── infra/
│   └── terraform/
│       └── vault/
├── app/
│   ├── values.yaml       ← Vault 연동 변수 포함
│   └── templates/
└── .github/workflows/
    ├── vault-upload.yml
    └── argo-refresh.yml




🔧 Terraform으로 Vault 구성 예시

provider "vault" {
  address = "https://vault.example.com"
}

resource "vault_kv_secret_v2" "db_password" {
  mount = "secret"
  name  = "prod/db"

  data_json = jsonencode({
    password = var.db_password
    user     = "admin"
  })
}




🧪 GitHub Actions에서 Vault로 Secrets Push

name: Upload Secrets to Vault

on:
  push:
    branches: [main]

jobs:
  upload:
    runs-on: ubuntu-latest
    steps:
      - name: Write secret to Vault
        run: |
          curl --header "X-Vault-Token: ${{ secrets.VAULT_TOKEN }}" \
               --request POST \
               --data '{"data": {"password": "${{ secrets.DB_PASS }}"}}' \
               https://vault.example.com/v1/secret/data/prod/db




🛠️ ArgoCD 연동: Vault-plugin으로 실시간 주입

ArgoCD + Helm 또는 Kustomize로 배포할 때, 아래처럼 Secret Generator Plugin을 연동:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: backend
spec:
  source:
    repoURL: https://github.com/org/repo
    path: app/
    plugin:
      name: vault-helm

Helm chart 내부에서는 다음처럼 작성:

env:
  DB_PASSWORD: "{{ .Values.vault.secret.db_password }}"




🧩 보안 강화 기술 스택

기술 목적
Vault Policies 팀·환경별 읽기/쓰기 권한 분리
AWS IAM 연동 K8s ServiceAccount 인증 허용
Lease TTL Secret 자동 만료/갱신 설정
ArgoCD RBAC 배포 주체별 권한 관리
Vault Audit Log 누가 어떤 시점에 어떤 Secret에 접근했는지 기록




✅ 기대 효과

항목 변화
Secrets 저장 Git이 아닌 Vault에 저장됨 (보안 강화)
CI/CD 환경 PR마다 Secrets 자동 주입 (사람 개입 최소화)
보안 감사 접근 기록 명확, 내부 감사를 위한 로깅 완비
운영 안정성 운영자 수동 관리 불필요, 자동 갱신 체계




🧠 결론

Vault, Terraform, ArgoCD를 결합하면 단순히 “Secret을 잘 저장한다” 수준을 넘어서,
CI/CD, 인프라, 애플리케이션에 안전하게 자동으로 주입되는 보안 시스템을 완성할 수 있습니다.

이는 보안이 최우선인 금융권, 헬스케어, 국방·정부 클라우드 환경에서도 사용되는 전략이며,
GitOps + Zero Trust 보안 철학을 실제로 구현하는 가장 실용적인 방식입니다.

반응형