비밀 관리: 소프트웨어의 비밀 문제
I 비밀 (자격 증명, API 키, 인증서, 액세스 토큰)은 요소입니다. 소프트웨어 인프라보다 더 민감합니다. 노출된 단일 비밀이 손상될 수 있음 전체 시스템, 데이터베이스 및 클라우드 계정. GitGuardian 연구에 따르면 2024년에는 추가로 발견되었습니다 1200만 개의 비밀 GitHub의 공개 저장소에 노출됩니다.
비밀 관리는 단순히 "코드에 비밀번호를 입력하지 않는 것"이 아닙니다. 완전한 시스템이다 생성, 안전한 저장, 배포, 순환 및 취소를 다룹니다. 수명주기 내내 비밀입니다.
무엇을 배울 것인가
- 비밀 관리 시스템의 아키텍처
- HashiCorp Vault: 설정, 구성 및 통합
- AWS Secrets Manager 및 클라우드 대안
- 자동 자격 증명 순환 전략
- GitLeaks 및 TruffleHog를 사용하여 저장소에서 비밀 탐지
- 일반적인 안티 패턴과 이를 방지하는 방법
안티 패턴: 비밀을 관리하지 않는 방법
솔루션을 살펴보기 전에 노출로 이어지는 가장 일반적인 오류를 살펴보겠습니다. 자격 증명:
- 코드에 하드코딩됨: 소스코드에 직접 작성된 비밀번호와 API키
- 저장소의 .env 파일: 실수로 커밋된 비밀이 포함된 구성 파일
- 보호되지 않은 환경 변수: 암호화 없이 env var로 전달된 비밀
- 채팅을 통해 공유된 비밀: Slack, Teams 또는 이메일로 전송된 자격 증명
- 보안 비밀은 순환되지 않았습니다.: 절대 변경되지 않는 정적 자격 증명
- 권한이 너무 광범위함: 필요한 최소한의 서비스가 아닌 모든 서비스에 접근할 수 있는 API Key
노출된 비밀의 비용
공개 저장소에 노출된 비밀은 평균적으로 자동화된 봇에 의해 발견됩니다. 나는 들어간다 24초. 1분도 안 되어 악의적인 행위자가 공격을 시작할 수 있습니다. 자격 증명을 악용합니다. 조직의 평균 교정 시간은 다음과 같습니다. 자동화된 프로세스와 327일.
HashiCorp Vault: 참조 표준
HashiCorp 금고 기업 비밀 관리를 위한 가장 널리 사용되는 솔루션입니다. 안전한 저장소, 제어된 액세스, 감사 로깅 및 동적 순환 지원을 제공합니다. 비밀의. Vault는 제한된 TTL로 주문형 사용자 인증 정보를 생성하여 정적 비밀 문제.
Docker로 Vault 설정
# docker-compose.vault.yml
version: "3.8"
services:
vault:
image: hashicorp/vault:1.15
container_name: vault
ports:
- "8200:8200"
environment:
VAULT_DEV_ROOT_TOKEN_ID: "dev-root-token"
VAULT_DEV_LISTEN_ADDRESS: "0.0.0.0:8200"
cap_add:
- IPC_LOCK
volumes:
- vault-data:/vault/data
volumes:
vault-data:
Vault CLI를 사용한 기본 작업
# Configurare il client
export VAULT_ADDR="http://127.0.0.1:8200"
export VAULT_TOKEN="dev-root-token"
# Abilitare il secrets engine KV v2
vault secrets enable -version=2 kv
# Scrivere un secret
vault kv put kv/myapp/database \
username="dbadmin" \
password="super-secret-password" \
host="db.internal.company.com"
# Leggere un secret
vault kv get kv/myapp/database
# Leggere un campo specifico
vault kv get -field=password kv/myapp/database
# Creare una policy di accesso
vault policy write myapp-read - <<EOF
path "kv/data/myapp/*" {
capabilities = ["read", "list"]
}
EOF
# Creare un token con policy limitata
vault token create -policy=myapp-read -ttl=1h
동적 비밀: 주문형 자격 증명
Vault의 가장 강력한 기능 중 하나는 다음과 같습니다. 동적 비밀: 자격 증명 제한된 TTL로 요청 시 생성됩니다. TTL이 만료되면 Vault에서 TTL을 취소합니다. 자동으로 자격 증명. 이는 정적 비밀 문제를 제거합니다.
# Abilitare il database secrets engine
vault secrets enable database
# Configurare la connessione PostgreSQL
vault write database/config/mydb \
plugin_name=postgresql-database-plugin \
allowed_roles="readonly" \
connection_url="postgresql://{{username}}:{{password}}@db:5432/mydb?sslmode=disable" \
username="vault_admin" \
password="vault_admin_password"
# Creare un ruolo con credenziali dinamiche
vault write database/roles/readonly \
db_name=mydb \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="1h" \
max_ttl="24h"
# Ottenere credenziali dinamiche
vault read database/creds/readonly
AWS 비밀 관리자
AWS를 운영하는 조직의 경우, AWS 비밀 관리자 서비스를 제공합니다 통합 자동 순환, 기본 지원으로 비밀 관리를 위해 관리됩니다. RDS, Redshift 및 DocumentDB, AWS 서비스와의 원활한 통합.
비밀 관리 솔루션 비교
- HashiCorp 금고: 멀티 클라우드, 자체 호스팅 또는 관리형(HCP), 유연성 극대화
- AWS 비밀 관리자: AWS 네이티브, RDS 자동 회전, 사용이 간편함
- Azure Key Vault: 네이티브 Azure, AD 통합, HSM 지원
- GCP 비밀 관리자: 네이티브 GCP, IAM 통합, 버전 관리
- 쿠버네티스 비밀: base64로 인코딩됨(암호화되지 않음!), 외부 비밀 연산자와 함께 사용
저장소의 비밀 탐지
예방과 첫 번째 방어선. 비밀 탐지 도구 분석 원격 저장소에 도달하기 전에 노출된 자격 증명을 찾는 코드입니다.
GitLeaks: 사전 커밋 후크
# .pre-commit-config.yaml
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks
# .gitleaks.toml - configurazione personalizzata
[extend]
useDefault = true
[[rules]]
id = "custom-api-key"
description = "Custom API Key pattern"
regex = '''MYAPP_API_KEY\s*=\s*['"]([A-Za-z0-9_-]+)['"]'''
secretGroup = 1
entropy = 3.5
[allowlist]
paths = [
'''test/.*''',
'''.*_test\.go''',
'''.*\.md'''
]
CI/CD 통합
# .github/workflows/secret-detection.yml
name: Secret Detection
on:
push:
branches: [main, develop]
pull_request:
jobs:
gitleaks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: GitLeaks scan
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
순환 전략
La 비밀 순환 정기적으로 자격 증명을 교체하는 프로세스입니다. 회전은 손상 시 노출 창을 줄이고 손상을 제한합니다. 아직 발견되지 않은 유출된 비밀.
- 자동 회전: AWS Secrets Manager와 같은 서비스는 구성 가능한 간격으로 자격 증명을 자동으로 교체할 수 있습니다.
- 동적 비밀: Vault는 제한된 TTL로 사용자 인증 정보를 생성하므로 순환이 필요하지 않습니다.
- 계획된 수동 순환: 자동으로 순환될 수 없는 비밀의 경우 분기별 순환을 예약하세요.
- 비상교대: 위반 시 모든 비밀을 취소하고 교체하는 절차
비밀 관리 모범 사례
- 코드에 절대 포함되지 않음: 소스 코드, 구성 파일 또는 컨테이너 이미지에 비밀이 없습니다.
- 중앙 집중화: 조직 전체를 위한 단일 비밀 관리 시스템
- 최소 권한: 각 애플리케이션은 필요한 비밀에만 액세스합니다.
- 감사 로깅: 규정 준수 및 포렌식을 위해 비밀에 대한 모든 액세스를 기록합니다.
- 자동 회전: 최대 TTL이 90일인 모든 비밀에 대한 순환을 구현합니다.
- 사전 커밋 후크: 푸시하기 전에 비밀을 잠그기 위한 사전 커밋인 GitLeaks 또는 TruffleHog
- 미사용 암호화: 비밀은 사용하지 않을 때 암호화되어야 합니다.
결론
비밀 관리는 DevSecOps의 가장 중요한 핵심 중 하나입니다. 노출된 비밀은 안전에 대한 다른 모든 투자를 무효화하십시오. 안전한 스토리지의 결합 (Vault), 예방적 탐지(GitLeaks) 및 자동 순환으로 방어 시스템을 구축합니다. 자격 증명 손상에 강력합니다.
다음 기사에서는 살펴보겠습니다. 코드로서의 정책, 정의 방법 분석 OPA/Rego, Kyverno 및 Sentinel을 통해 보안 정책을 자동으로 시행합니다.







