지정해주신 원칙 및 스키마 구조를 엄격히 준수하여 개념 노트 동적 시크릿을 작성하였습니다.

생성된 위키 노크 파일 위치:


작성된 위키 노트 내용 요약

---
type: concept
status: draft
core: false
tags:
  - security
  - secret-management
  - devops
  - zero-trust
  - infrastructure
aliases:
  - Dynamic Secrets
  - 동적 자격 증명
  - 임시 자격 증명
sources:
  - raw/API_Key_관리_및_Infisical_도입_가이드.md
created: 2026-08-28
updated: 2026-08-28
---
 
# 동적 시크릿
 
## 한 줄 정의
**동적 시크릿(Dynamic Secrets)**은 정적인 API Key나 비밀번호를 장기 보관하는 대신, 요청 시점에 임시 자격 증명(Credential)을 즉시 생성하고 지정된 유효 기간(TTL/Lease)이 지나면 자동으로 폐기하는 보안 메커니즘입니다.
 
## 핵심 요지
- **Zero Trust 및 임시 접근 제어**: 정적 자격 증명의 보관 비용 및 유출 위험을 근본적으로 제거하며, 필요 시점에만 최소 권한으로 자격 증명을 생성합니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
- **자동 폐기 및 임대(Lease) 기반 만료**: 생성된 시크릿에는 명확한 수명 주기(TTL)가 부여되며, 별도의 수동 폐기 작업 없이도 시간이 지나면 자동 만료됩니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
- **피해 범위(Blast Radius)의 극소화**: 개발자 노트북 도난이나 설정 파일 유출 사고가 발생하더라도 자격 증명이 이미 만료되었거나 짧은 TTL을 가지므로 잠재적 피해를 극도로 제한합니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
- **멀티 데이터베이스 및 서비스 연동**: PostgreSQL, MongoDB 등 데이터베이스 자격 증명이나 클라우드 인프라 IAM 계정을 요청 단위로 자동 발급·삭제할 수 있습니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
 
## 상세
 
### 1. 정적 시크릿 vs 동적 시크릿 비교
전통적인 시크릿 관리 방식은 지속적이고 장기적인 자격 증명을 생성하여 `.env` 파일이나 데이터베이스에 저장합니다. 반면 동적 시크릿은 필요할 때만 발급받아 사용합니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
 
| 비교 항목 | 정적 시크릿 (Static Secrets) | 동적 시크릿 (Dynamic Secrets) |
|---|---|---|
| **생성 시점** | 관리자가 사전 생성 | 애플리케이션/클라이언트 요청 시 실시간 생성 |
| **수명 주기 (TTL)** | 무기한 또는 장기 (30~180일 주기 수동/자동 로테이션) | 단기 (몇 분~몇 시간 단위 Lease 만료) |
| **유출 위험성** | 코드/Git 히스토리/로컬 파일 유출 시 장기 악용 가능 | 유출되더라도 만료 시점 이후 즉시 무효화 |
| **폐기 메커니즘** | 관리자의 수동 Revoke 또는 정기 로테이션 절차 | 시크릿 관리자에 의한 자동 탈옥/폐기 (Auto-revoke) |
| **적용 대상** | 외부 SaaS API Key (Stripe, SendGrid 등) | PostgreSQL, MongoDB, AWS IAM 등 자격 증명 생성 API를 제공하는 백엔드 인프라 |
 
### 2. 주요 아키텍처 및 작동 원리
동적 시크릿 체계는 [[시크릿 관리자]](예: [[Infisical]], HashiCorp Vault)가 타깃 인프라(예: PostgreSQL)의 마스터 관리자 권한을 갖고, 인가된 클라이언트의 요청이 올 때마다 전용 사용자를 즉시 생성해 주는 방식으로 동작합니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).
 
1. **시크릿 요청**: 애플리케이션 또는 CI/CD 파이프라인이 Universal Auth 또는 IAM 인증을 통해 [[시크릿 관리자]]에 동적 시크릿 발급을 요청합니다.
2. **자격 증명 실시간 생성**: [[시크릿 관리자]]가 연동된 타깃 서비스(예: PostgreSQL DB)에 접속하여 임시 사용자 계정과 임의의 고복잡도 비밀번호를 생성하고, 특정 역할(Role)을 부여합니다.
3. **Lease(임대 기간) 전달**: 생성된 자격 증명과 Lease ID, TTL(예: 1시간)을 클라이언트에 반환합니다.
4. **자동 폐기(Revocation)**: TTL이 만료되거나 요청에 의해 Lease가 취소되면 [[시크릿 관리자]]가 타깃 서비스에서 해당 임시 사용자 계정을 자동으로 Drop/Revoke 처리합니다.
 
### 3. 주요 활용 시나리오
- **CI/CD 파이프라인 및 통합 테스트**: 빌드/테스트 런타임에만 일회성 DB 계정을 생성하여 테스트 수행 후 빌드가 끝나면 즉시 계정을 파기합니다.
- **개발자 데이터베이스 직접 접근**: 개발자가 운영/스테이징 DB 조회가 필요할 때 개인용 장기 계정을 주는 대신, 1시간 유효한 동적 DB 계정을 발급하여 접근 로그를 완벽히 남깁니다.
- **클라우드 인프라 프로비저닝**: Terraform 또는 K8s 오케스트레이터가 작업을 수행할 때 임시 AWS IAM 자격 증명을 받아 사용한 후 파기합니다.
 
## 예시
 
### 1. Infisical / Vault 체계에서의 동적 PostgreSQL 자격 증명 생성 흐름 (Node.js SDK)
애플리케이션이 런타임에 정적 DB 비밀번호를 보관하지 않고, 동적 시크릿 엔진을 호출하여 1시간짜리 임시 DB 연결 문자열을 받아오는 예시입니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md):
 
```typescript
import { InfisicalClient } from "@infisical/sdk";
import { Client } from "pg";
 
const infisical = new InfisicalClient({
  siteUrl: "https://infisical.my-company.com",
  auth: {
    universalAuth: {
      clientId: process.env.INFISICAL_CLIENT_ID!,
      clientSecret: process.env.INFISICAL_CLIENT_SECRET!,
    },
  },
});
 
async function connectToDatabaseWithDynamicSecret() {
  // PostgreSQL용 동적 시크릿 발급 요청 (1시간 TTL)
  const dynamicSecret = await infisical.secrets().getDynamicSecret({
    slug: "postgres-db-dynamic",
    environment: "prod",
    projectId: "proj-12345",
  });
 
  const { username, password } = dynamicSecret.value;
 
  // 발급받은 임시 자격 증명으로 DB 연결
  const dbClient = new Client({
    host: "postgres.internal.net",
    port: 5432,
    database: "production_db",
    user: username,       // 예: v-token-app-usr-8f3a1b-1724800000
    password: password,   // 임의 생성된 일회성 암호
  });
 
  await dbClient.connect();
  console.log(`Connected to DB with dynamic user: ${username}`);
  return dbClient;
}

2. Infisical CLI 기반 임시 자격 증명 주입 실행 예시

로컬 개발 또는 디버깅 시 CLI 명령을 통해 임시 자격 증명을 받아 프로세스를 구동하는 형태입니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md):

# PostgreSQL 또는 MongoDB 동적 시크릿이 설정된 환경에서 CLI 실행
# 명령 실행 동안만 임시 DB_USER / DB_PASS가 환경 변수로 주입됨
infisical run --env=dev --dynamic-secret=postgres-db -- python manage.py migrate

충돌

  • SaaS API Key와의 호환성 제약: PostgreSQL, MongoDB, AWS IAM 등 자체 계정 생성/삭제 API를 제공하는 인프라 솔루션과 달리, 외부 SaaS(예: OpenAI API Key, Stripe Live Key 등)는 요청 단위의 실시간 동적 발급 API를 제공하지 않는 경우가 많습니다. 이러한 외부 API Key의 경우 ‘동적 시크릿 발급’ 대신 ‘무중단 API Key 로테이션’ 및 중앙집중식 시크릿 관리자 주입 방식을 결합하여 보안을 유지해야 합니다 (raw/API_Key_관리_및_Infisical_도입_가이드.md).

관련 노트

  • 시크릿 관리자: 동적 시크릿 발급, E2EE 저장 및 Lease 관리를 총괄하는 중앙 인프라 노트
  • Infisical: PostgreSQL, MongoDB 동적 시크릿(Dynamic Secrets) 생성을 지원하는 오픈소스 시크릿 플랫폼 노트
  • API Key 관리: 정적 및 동적 자격 증명을 다루는 전반적인 API Key 관리 원칙 노트
  • API Key 로테이션: 동적 시크릿 조달이 불가능한 외부 API Key의 정기/무중단 교체 전략 노트
  • Zero Trust 보안 모델: 모든 요청에 대해 최소 권한과 동적 자격 증명을 요구하는 보안 패러다임 노트