콘텐츠로 이동

볼트

비밀 관리, 암호화, 민감한 데이터에 대한 안전한 접근을 위한 포괄적인 HashiCorp Vault 명령어와 워크플로우.

설치 및 설정

명령어설명
vault versionVault 버전 표시
vault server -dev개발 서버 시작
vault server -config=config.hcl구성 파일로 시작하기
vault status서버 상태 확인

인증 및 로그인

기본 인증

명령어설명
vault auth -method=userpass username=myuser사용자 이름/비밀번호로 로그인
vault auth -method=ldap username=myuserLDAP로 로그인
vault auth -method=github token=mytokenGitHub으로 로그인
vault auth -method=awsAWS IAM으로 로그인
vault auth -method=kubernetesKubernetes로 로그인

토큰 관리

명령어설명
vault token create새 토큰 생성
vault token create -ttl=1hTTL로 토큰 생성
vault token lookup현재 토큰 조회
vault token renew현재 토큰 갱신
vault token revoke TOKEN특정 토큰 취소

비밀 관리

키-값 비밀 (v2)

명령어설명
vault kv put secret/myapp username=admin password=secret비밀 저장소
vault kv get secret/myapp비밀 검색
vault kv get -field=password secret/myapp특정 필드 가져오기
vault kv delete secret/myapp비밀 삭제
vault kv list secret/비밀 목록
vault kv metadata get secret/myapp메타데이터 가져오기

비밀 버전

명령어설명
vault kv put secret/myapp @data.jsonJSON 파일에서 저장
vault kv get -version=2 secret/myapp특정 버전 가져오기
vault kv rollback -version=1 secret/myapp버전으로 롤백
vault kv destroy -versions=2,3 secret/myapp버전 제거
vault kv undelete -versions=2 secret/myapp삭제 취소 버전

데이터베이스 비밀 엔진

데이터베이스 구성

명령어설명
vault secrets enable database데이터베이스 엔진 활성화
vault write database/config/my-mysql-database plugin_name=mysql-database-plugin connection_url="\\{\\{username\\}\\}:\\{\\{password\\}\\}@tcp(localhost:3306)/" allowed_roles="my-role" username="vaultuser" password="vaultpass"MySQL 구성하기
vault write database/roles/my-role db_name=my-mysql-database creation_statements="CREATE USER '\\{\\{name\\}\\}'@'%' IDENTIFIED BY '\\{\\{password\\}\\}';GRANT SELECT ON *.* TO '\\{\\{name\\}\\}'@'%';" default_ttl="1h" max_ttl="24h"역할 생성

동적 자격 증명

명령어설명
vault read database/creds/my-role데이터베이스 자격 증명 생성
vault write database/rotate-root/my-mysql-database루트 자격 증명 회전

PKI (공개 키 인프라)

PKI 설정

명령어설명
vault secrets enable pkiPKI 엔진 활성화
vault secrets tune -max-lease-ttl=87600h pki최대 TTL 설정
vault write pki/root/generate/internal common_name=example.com ttl=87600h루트 CA 생성
vault write pki/config/urls issuing_certificates="http://vault.example.com:8200/v1/pki/ca" crl_distribution_points="http://vault.example.com:8200/v1/pki/crl"URL 구성하기

인증서 관리

명령어설명
vault write pki/roles/example-dot-com allowed_domains=example.com allow_subdomains=true max_ttl=72h역할 생성
vault write pki/issue/example-dot-com common_name=test.example.com인증서 발급
vault write pki/revoke serial_number=39:dd:2e:90:b7:23:1f:8d:d3:7d:31:c5:1b:da:84:d0:5b:65:31:58인증서 취소

AWS 비밀 엔진

AWS 구성

명령어설명
vault secrets enable awsAWS 엔진 활성화
vault write aws/config/root access_key=AKIAI... secret_key=R4nm...root 자격 증명 구성
vault write aws/roles/my-role credential_type=iam_user policy_document=-<<EOF \\{...\\} EOFIAM 역할 생성

AWS 자격 증명

명령어설명
vault read aws/creds/my-roleAWS 자격 증명 생성
vault write aws/sts/my-role ttl=15mSTS 자격 증명 생성

전송 비밀 엔진

암호화 설정

명령어설명
vault secrets enable transit트랜짓 엔진 활성화
vault write transit/keys/my-key type=aes256-gcm96암호화 키 생성
vault write transit/encrypt/my-key plaintext=$(base64 <<< "my secret data")데이터 암호화
vault write transit/decrypt/my-key ciphertext=vault:v1:8SDd3WHDOjf7mq69CyCqYjBXAiQQAVZRkFM13ok481zoCmHnSeDX9vyf7w==데이터 복호화

키 관리

명령어설명
vault write transit/keys/my-key/rotate암호화 키 회전
vault read transit/keys/my-key주요 정보 읽기
vault write transit/rewrap/my-key ciphertext=vault:v1:...최신 키로 다시 래핑

정책

정책 관리

명령어설명
vault policy write my-policy policy.hcl정책 생성/업데이트
vault policy read my-policy정책 읽기
vault policy list모든 정책 나열하기
vault policy delete my-policy삭제 정책

정책 예시

# Read operation on the k/v secrets
path "secret/data/*" \\\\{
  capabilities = ["read"]
\\\\}

# Write operation on the k/v secrets
path "secret/data/myapp/*" \\\\{
  capabilities = ["create", "update"]
\\\\}

# Deny all access to secret/admin
path "secret/data/admin" \\\\{
  capabilities = ["deny"]
\\\\}

인증 방법

인증 방법 활성화

명령어설명
vault auth enable userpass사용자 이름/비밀번호 활성화
vault auth enable ldapLDAP 활성화
vault auth enable githubGitHub 활성화
vault auth enable awsAWS IAM 활성화
vault auth enable kubernetesKubernetes 활성화

인증 방법 구성

명령어설명
vault write auth/userpass/users/myuser password=mypass policies=my-policy사용자 생성
vault write auth/ldap/config url="ldap://ldap.example.com" userdn="ou=Users,dc=example,dc=com"LDAP 구성
vault write auth/github/config organization=myorgGitHub 구성하기

감사 로깅

감사 장치 활성화

명령어설명
vault audit enable file file_path=/vault/logs/audit.log파일 감사 활성화
vault audit enable syslogsyslog 감사 활성화
vault audit list감사 장치 목록
vault audit disable file/감사 장치 비활성화

고가용성 및 클러스터링

클러스터 작업

명령어설명
vault operator initVault 클러스터 초기화
vault operator unseal볼트 열기
vault operator seal실 볼트
vault operator step-down지도자 직에서 물러나다
vault operator raft list-peersRaft 피어 목록
명령어설명
vault operator raft snapshot save backup.snap스냅샷 생성
vault operator raft snapshot restore backup.snap스냅샷 복원

서버 구성

storage "consul" \\\\{
  address = "127.0.0.1:8500"
  path    = "vault/"
\\\\}

listener "tcp" \\\\{
  address     = "0.0.0.0:8200"
  tls_disable = 1
\\\\}

api_addr = "http://127.0.0.1:8200"
cluster_addr = "https://127.0.0.1:8201"
ui = true
seal "awskms" \\\\{
  region     = "us-east-1"
  kms_key_id = "12345678-1234-1234-1234-123456789012"
\\\\}
```## 환경 변수

| 변수 | 설명 |
|----------|-------------|
| `VAULT_ADDR` | Vault 서버 주소 |
| `VAULT_TOKEN` | 인증 토큰 |
| `VAULT_NAMESPACE` | Vault 네임스페이스 (Enterprise) |
| `VAULT_CACERT` | CA 인증서 파일 |
| `VAULT_CLIENT_CERT` | 클라이언트 인증서 파일 |
| `VAULT_CLIENT_KEY` | 클라이언트 개인 키 파일 |## 모범 사례

### 보안