본문 바로가기

리눅스

우분투 22.04에서 Vault CLI를 설치하는 방법

반응형

우분투 22.04에서 Vault CLI를 설치하는 방법

테스트 환경

컨테이너 환경

docker run -it --rm --privileged \
  --net vault-net \
  --name mysql-client \
  anti1346/ubuntu2204:latest \
  bash
apt update
apt install -y mysql-client
mysql --version
mysql  Ver 8.0.44-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

Vault 설치

필수 패키지 설치

apt install -y unzip jq

Vault 다운로드

export vault_version=1.21.1
cd /tmp
curl -fsSL https://releases.hashicorp.com/vault/${vault_version}/vault_${vault_version}_linux_amd64.zip \
  -o vault.zip

압축 해제

unzip vault.zip

바이너리 옮기기

sudo mv vault /usr/local/bin/
sudo chmod +x /usr/local/bin/vault

확인

vault --version
Vault v1.21.1 (2453aac2638a6ae243341b4e0657fd8aea1cbf18), built 2025-11-18T13:04:32Z

Vault Agent 구성

Vault Agent 설정 파일 생성

디렉토리 생성

sudo mkdir -p /etc/vault.d

설정 파일 생성

sudo tee /etc/vault.d/vault-agent.hcl > /dev/null <<'EOF'
# Vault 서버 연결
vault {
  address = "http://localhost:8200"
}

# 자동 인증
auto_auth {
  method "token_file" {
    config = {
      token_file_path = "/etc/vault.d/token"
    }
  }
}

# 템플릿 처리
template {
  source      = "/etc/vault.d/mysql-credentials.tpl"
  destination = "/tmp/mysql-credentials.env"
  perms       = 0644
}

# 템플릿 업데이트 시 명령 실행
template {
  source      = "/etc/vault.d/mysql-connection.tpl"
  destination = "/tmp/mysql-connection.sh"
  perms       = 0755
  command     = "chmod +x /tmp/mysql-connection.sh"
}
EOF

MySQL 자격 증명 템플릿 생성

sudo tee /etc/vault.d/mysql-credentials.tpl > /dev/null <<'EOF'
{{- with secret "secret/data/mysql" -}}
MYSQL_USER={{ .Data.data.user }}
MYSQL_PASSWORD={{ .Data.data.password }}
{{- end }}
EOF

토큰 파일 생성

echo "hvs.QyExhaigtg1IHdS0nd9kaSwI" | sudo tee /etc/vault.d/token
sudo chmod 600 /etc/vault.d/token

환경 변수 설정

export VAULT_TOKEN="hvs.QyExhaigtg1IHdS0nd9kaSwI"
export VAULT_ADDR="http://localhost:8200"

Vault Agent 실행

sudo vault agent -config=/etc/vault.d/vault-agent.hcl -log-level=debug

MySQL 연결 방법

Vault API 직접 조회

# 자격 증명 조회
curl -s -H "X-Vault-Token: $VAULT_TOKEN" \
  "$VAULT_ADDR/v1/secret/data/mysql" | jq -r '.data.data'

# Vault API로 직접 조회하여 연결
MYSQL_USER=$(curl -s -H "X-Vault-Token: hvs.QyExhaigtg1IHdS0nd9kaSwI" \
  http://localhost:8200/v1/secret/data/mysql | jq -r '.data.data.user')

MYSQL_PASSWORD=$(curl -s -H "X-Vault-Token: hvs.QyExhaigtg1IHdS0nd9kaSwI" \
  http://localhost:8200/v1/secret/data/mysql | jq -r '.data.data.password')

MySQL 접속

mysql -h127.0.0.1 -P3306 -u$MYSQL_USER -p$MYSQL_PASSWORD app_db

 

728x90
반응형