Docker로 Vault 로컬 구성
HashiCorp 에서 만든 Vault는 애플리케이션 외부 비밀 시크릿 속성을 외부에서 중앙으로 관리할 수 있는 서비스
Spring Boot 환경에서 Vault로 시크릿 정보를 읽고 쓰는 것이 가능. 이러한 중요한 정보는 코드에서 분리하여 보안의 안정성을 높이는 것이 주 목적임
Vault가 제공하는 기능으로는 동적 시크릿키, 중앙 집중 관리, 액세스 제어, 감사 기능이 있음
Vault 이미지 가져오기
docker pull hashicorp/vault:latestVault 이미지 실행
docker run --cap-add=IPC_LOCK -e 'VAULT_LOCAL_CONFIG={"storage": {"file": {"path": "/vault/file"}}, "listener": [{"tcp": { "address": "0.0.0.0:8200", "tls_disable": true}}], "default_lease_ttl": "168h", "max_lease_ttl": "720h", "ui": true}' -p 8200:8200 hashicorp/vault:latest server독특하게 끝부분에 CLI 명령어 전달로 server 를 입력하여 서버 모드로 실행시키는 명령어이다.
--cap-add컨테이너 보안 capability 옵션으로 디스크 스왑하지 않고 메모리로 관리하도록 IPC_LOCK 옵션을 주었다.-e환경 변수로 VAULT_LOCAL_CONFIG 이름으로 전달하면 환경 변수 따라서 vault 주어진 옵션으로 실행된다.
Dockerfile 신규 작성으로 Vault 실행하기
본인은 윈도우 wsl 에서 실행하였는데 capability 허용을 해주지 않으므로 hashicorp의 이미지로 실행할 수 없었다.
unable to set CAP_SETFCAP effective capability: Operation not permitted도커를 Dockerfile 과 vault.hcl 작성하여 빌드에 대해 알아보자.
먼저 파일을 작성해야한다.
Dockerfile
FROM alpine:3.20
# 필요한 패키지
RUN apk add --no-cache \
ca-certificates \
curl \
unzip
# Vault 버전 (원하는 버전으로 변경 가능)
ENV VAULT_VERSION=2.0.0
# Vault 다운로드 및 설치
RUN curl -fsSL https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip -o vault.zip \
&& unzip vault.zip \
&& mv vault /usr/local/bin/ \
&& chmod +x /usr/local/bin/vault \
&& rm vault.zip
# Vault 데이터/설정 디렉토리
RUN mkdir -p /vault/data /vault/config
# 설정 파일 복사
COPY vault.hcl /vault/config/vault.hcl
# 환경 변수
ENV VAULT_DISABLE_MLOCK=true
# 포트
EXPOSE 8200
# 실행
ENTRYPOINT ["vault"]
CMD ["server", "-config=/vault/config/vault.hcl"]vault.hcl
ui = true
default_lease_ttl = "876000h"
max_lease_ttl = "876000h"
log_level = "info"
api_addr = "http://vault.kiioio.org:8200"
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 1
}
storage "file" {
path = "/vault/data"
}
disable_mlock = true이후 두 파일이 있는 디렉토리에서 터미널을 열고 빌드한다.
Dockerfile 빌드
docker build -t vault-alpine .
docker images -aDocker - Vault 실행
docker volume create vault_home
docker run -d -it --name vault-server -p 8200:8200 -v vault_home:/vault/data vault-alpine