💡 Vault - HashCorp 사에서 만든 Vault는 다양한 환경에서 애플리케이션의 외부 비밀 속성(예: 데이터베이스 비밀번호, 비밀번호, API 키 등)을 외부화된 구성으로 중앙에서 관리할 수 있습니다.
- Spring Boot 환경에서 Vault로부터 시크릿 정보를 읽어오며 Vault에 시크릿 정보를 쓰는 것도 가능합니다. 이러한 방식으로 애플리케이션의 중요한 정보는 코드에서 분리되어 보안이 보장됩니다. - 기밀정보의 동적인 제공, 중앙 집중식 시크릿 관리, 즉각적인 액세스 제어, 감사 추적 기능 등을 제공하여, 기업의 보안 정책을 준수하는 데 도움이 됩니다.
https://www.vaultproject.io/
2) Dockerfile
💡 도커 파일(Dockerfile) - 도커 이미지를 만들고 빌드하기 위한 ‘텍스트 파일’을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다. - 도커 파일을 사용하면 반복적이고 일관적인 컨테이너 이미지 빌드 프로세스를 자동화할 수 있습니다.
1. Dockerfile 수행과정
💡 Dockerfile 수행과정
1. Dockerfile
- 도커파일에서 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 또한 이미지를 지정하고 필요한 패키지를 설치하고 파일을 복사하여 명령을 실행하는 등의 작업을 수행합니다.
2. Dockerfile → (Build)
- 도커 엔진이 도커 파일을 한 줄씩 읽어서 이미지를 빌드합니다 : Dockerfile Layer
3. Docker Image → (Run) → Docker Container
- 빌드된 이미지를 실행하여 도커 컨테이너를 구성합니다.
2) Dockerfile + Vault 사용예시 : 구성하기
💡 Dockerfile + Vault 구성하기 - 해당 부분에서는 Dockerfile을 통해 Vault를 구성하고 Vault 관리자 페이지에 접근하는 것을 목표로 합니다.
1. 프로젝트 구조 구성
파일 및 디렉터리
설명
Dockerfile
해당 파일을 실행시켜 레이어를 구성하고 hashicorp/vault 이미지를 받아 재구성에 사용할 파일입니다.
config
설정 파일을 관리하는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.
config/config.json
hashicorp/vault를 실행하기 위한 환경설정이 구성된 파일입니다.
file
vault의 백엔드 스토리지로 사용되는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.
logs
vault의 로그 스토리지로 사용되는 디렉터리로 docker의 vault/logs와 마운팅 됩니다.
[ 더 알아보기 ] 💡 Vault를 사용하는 것이 아닌 hashicorp/vault 이미지를 사용하는 이유는?
- 'vault'는 Docker Hub에서 공식적으로 제공되는 Vault 이미지이며, 'hashicorp/vault'는 HashiCorp가 관리하는 Vault 이미지입니다. 두 이미지 모두 Vault 애플리케이션을 실행하는 데 사용할 수 있습니다. 그러나 'hashicorp/vault'는 보통 최신 기능과 업데이트를 더 자주 제공하므로, 최신 Vault 기능을 사용하려면 'hashicorp/vault'를 사용하는 것이 좋습니다.
💡 Docker에서 디렉터리 마운팅은 무슨 말인가?
- 호스트 시스템의 특정 디렉토리를 Docker 컨테이너 내부의 디렉터리에 연결하는 것을 의미합니다. 이렇게 하면 컨테이너가 호스트의 파일 시스템에 접근할 수 있게 됩니다. 이를 통해 데이터를 영구적으로 저장하거나, 컨테이너 간에 데이터를 공유하거나, 컨테이너와 호스트 간에 데이터를 이동하는 등의 작업을 수행할 수 있습니다.
2. Dockerfile 구성
💡 Dockerfile 구성
- 해당 Dockerfile은 Vault 환경을 구성하기 위한 설정으로 구성되어 있습니다.
Vault 서버가 어떤 프로토콜과 주소로 통신을 받을지를 설정합니다. 여기서는 TCP 프로토콜을 사용하며, 모든 IP의 8200 포트에서 통신을 받습니다. TLS는 비활성화 상태입니다.
backend
Vault의 데이터 저장 방식을 설정합니다. 여기서는 파일 시스템을 사용하며, 데이터는../file 경로에 저장됩니다.
default_lease_ttl과 max_lease_ttl
Vault에서 관리하는 비밀키의 기본 및 최대 유효기간을 설정합니다. 여기서는 각각 876000시간으로 설정되어 있습니다.
ui
Vault의 사용자 인터페이스를 활성화합니다.
log_level
Vault의 로그 레벨을 설정합니다. 여기서는 정보 수준(info)의 로그를 출력합니다.
4. file, logs
💡 file, logs
- 해당 폴더는 구조만 생성하고 다른 파일을 구성하지는 않습니다. 추후 Dockerfile을 수행하며 생성되는 Dockerfile에 디렉터리 마운팅을 수행합니다.
3) Dockerfile + Vault 사용예시 : 실행하기
1. 컨테이너 이미지 생성
💡 컨테이너 이미지 생성
- dockefile을 통해 구성한 컨테이너 이미지를 생성합니다.
# format
$ docker build -t <컨테이너 이미지 이름> .
# 컨테이너 이미지 생성
$ docker build -t hashicorp/vault .
💡 [참고] Docker Desktop에서 생성된 컨테이너 이미지를 확인합니다.
2. 컨테이너 생성 및 실행
💡 컨테이너 생성 및 실행
# format
$ docker run -d --cap-add IPC_LOCK --name <컨테이너 이름> -p 8200:8200 <실행할 이미지 이름>
# 컨테이너 생성 및 실행
$ docker run -d --cap-add IPC_LOCK --name vault -p 8200:8200 hashicorp/vault
명령어
설명
docker run
Docker 이미지를 기반으로 새로운 컨테이너를 만들고 실행합니다.
-d
컨테이너를 백그라운드에서 실행하고 컨테이너 ID를 출력합니다.
-cap-add IPC_LOCK
컨테이너가 IPC_LOCK 권한을 가질 수 있도록 합니다. 이는 Vault가 메모리에서 중요 정보를 안전하게 보호하는 데 필요합니다.
-name vault
생성된 컨테이너의 이름을 'vault'로 지정합니다.
-p 8200:8200
호스트의 8200 포트와 컨테이너의 8200 포트를 연결합니다. 이렇게 하면 호스트 머신에서 8200 포트로 Vault에 접근할 수 있게 됩니다.
hashicorp/vault
실행할 Docker 이미지의 이름입니다.
💡 [참고] Docker Desktop에서 생성된 컨테이너 상태를 확인합니다.
💡 [참고] Docker 컨테이너 상태를 확인합니다
$ docker ps
3. Vault 관리자 페이지를 확인합니다.
💡 Vault 관리자 페이지를 확인합니다
- 구성한 http://localhost:8200으로 접근하여 구성이 잘됨을 확인합니다.
💡 Vault의 추후 수행방법은 아래의 페이지를 참고하시면 관리자 구성까지 완료하실 수 있습니다.