HashiCorp/Vault

[ Vault ] HashiCorp Vault 심화 기능과 명령어 활용

busylee 2024. 11. 29. 09:46
728x90
반응형

이번 글에서는 HashiCorp Vault의 심화 기능들에 대해 다루겠습니다. Vault는 단순한 비밀번호 관리에 그치지 않고, 다양한 보안 요구를 해결하는 강력한 기능을 제공합니다. 이번 글에서는 특히 엔터프라이즈 환경에서 자주 활용되는 고급 기능들, 예를 들어 동적 비밀 관리, 정책 관리, 키 롤링(key rolling), 그리고 고급 인증 방법 등에 대해 설명하겠습니다. 실제 명령어 예시도 함께 제공하므로 실무에서 바로 활용할 수 있습니다.

1. 동적 비밀 관리 (Dynamic Secrets)

Vault의 가장 강력한 기능 중 하나는 "동적 비밀 관리"입니다. 동적 비밀이란, 요청 시 Vault가 비밀을 생성하고 해당 비밀의 수명이 끝나면 자동으로 만료되는 방식입니다. 예를 들어, 데이터베이스에 연결하는 비밀번호를 Vault가 생성하고, 이 비밀번호는 일정 시간이 지나면 자동으로 만료되어 사용할 수 없게 됩니다.

예시: MySQL 동적 비밀번호 생성

  • MySQL 인증 방법 활성화
    Vault가 MySQL의 동적 비밀을 관리할 수 있도록 MySQL 인증 방법을 활성화해야 합니다. 먼저 MySQL 인증 방법을 등록합니다.
vault auth enable database
  • MySQL 연결 구성
    Vault에서 MySQL에 연결할 수 있도록 인증 정보를 설정합니다.
vault write database/config/mysql \
	plugin_name=mysql-database-plugin \
	connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \
	allowed_roles="readonly"
  • 역할 설정
    Vault가 동적으로 생성할 수 있는 역할을 정의합니다. 예를 들어 readonly 역할을 만들어 해당 역할에 맞는 권한을 부여합니다.
vault write database/roles/readonly \
    db_name=mysql \ 
    creation_statements="GRANT SELECT ON *.* TO '{{name}}'@'%' IDENTIFIED BY '{{password}}'" \
    default_ttl="1h" \ 
    max_ttl="24h"
  • 동적 비밀 요청
    이제 readonly 역할을 가진 사용자를 요청하여 동적 비밀을 생성할 수 있습니다.이 명령어를 실행하면, Vault는 readonly 역할에 맞는 MySQL 계정의 사용자명과 비밀번호를 동적으로 생성해 반환합니다. 이 비밀번호는 1시간 후에 만료됩니다.
vault read database/creds/readonly

2. 정책 관리 (Policies)

Vault의 정책은 비밀에 접근할 수 있는 권한을 세밀하게 제어하는 방법입니다. Vault의 정책은 HashiCorp Configuration Language (HCL)로 작성됩니다. 각 정책은 Vault의 API에 대한 접근 권한을 정의하며, 특정 경로에 대한 읽기, 쓰기, 삭제 권한 등을 설정할 수 있습니다.

예시: 기본적인 정책 작성

  • 정책 파일 작성
    Vault의 정책은 .hcl 파일로 작성할 수 있습니다. 예를 들어 readonly-policy.hcl 파일을 작성하여 secret/data/myapp/* 경로에 대한 읽기 권한만 부여하는 정책을 만들 수 있습니다.
path "secret/data/myapp/*" { capabilities = ["read"] }
  • 정책 적용
    위 정책을 Vault에 적용하려면 아래와 같이 명령어를 실행합니다.
vault policy write readonly-policy readonly-policy.hcl
  • 사용자에게 정책 부여
    Vault에 인증된 사용자에게 이 정책을 부여할 수 있습니다. 예를 들어, user1이라는 사용자에게 readonly-policy를 부여하려면 다음과 같이 합니다.
vault auth enable userpass vault write auth/userpass/users/user1 password="password" policies="readonly-policy"

3. 키 롤링 (Key Rolling)

Vault에서는 키 롤링 기능을 통해 중요한 키들이 일정 주기마다 자동으로 변경되도록 할 수 있습니다. 이 기능은 보안상 중요한 데이터를 관리할 때 매우 유용합니다. 키 롤링은 Vault의 transit 엔진에서 주로 사용됩니다.

예시: Transit 엔진을 이용한 키 롤링

  • Transit 엔진 활성화
    Transit 엔진을 활성화하고 비밀 키를 생성합니다.
vault secrets enable transit vault write -f transit/keys/my-key
  • 키 롤링 설정
    my-key에 대한 키 롤링을 활성화하고 주기를 설정합니다.
vault write transit/keys/my-key/rotate
  • 키 상태 확인
    생성된 키의 상태를 확인하려면 다음 명령어를 사용합니다.
vault read transit/keys/my-key

4. 고급 인증 방법

Vault는 다양한 인증 방법을 지원하며, 이를 통해 보다 안전하고 유연한 인증을 구현할 수 있습니다. 예를 들어, GitHub, LDAP, AWS IAM 등을 이용한 인증 방법을 지원합니다.

예시: GitHub 인증 방법 설정

  • GitHub 인증 활성화
    GitHub 인증 방법을 활성화합니다.
vault auth enable github
  • GitHub 액세스 토큰 등록
    Vault에서 GitHub 조직 또는 팀의 사용자만 인증할 수 있도록 설정합니다.
vault write auth/github/config organization="my-org"
  • GitHub 사용자 인증
    GitHub 인증을 통해 사용자 인증을 수행할 수 있습니다. 예를 들어, GitHub 사용자 user1을 인증하려면 아래 명령어를 사용합니다.
vault login -method=github token="user1-github-token"

결론

이번 글에서는 HashiCorp Vault의 고급 기능들에 대해 다뤄보았습니다. Vault는 단순한 비밀 관리 도구를 넘어, 동적 비밀 관리, 세밀한 정책 제어, 키 롤링, 다양한 인증 방법을 제공함으로써 복잡한 보안 요구를 해결할 수 있는 강력한 툴입니다. Vault를 효과적으로 사용하면, 보안 관리를 자동화하고, 각종 민감한 정보를 안전하게 처리할 수 있습니다. 실제 명령어 예시를 통해 Vault의 활용법을 익히고, 이를 여러분의 환경에 맞게 적용해 보시기 바랍니다.

728x90
반응형