Redis 데이터베이스 시크릿 엔진

Redis 데이터베이스 시크릿 엔진

Redis는 Vault의 데이터베이스 시크릿 엔진이 지원하는 플러그인 중 하나예요. 이 플러그인은 Redis 데이터베이스에 대해 설정된 롤(role)을 기준으로 데이터베이스 자격 증명을 동적으로 생성하고, 정적 롤(Static Role)도 지원해요.

데이터베이스 시크릿 엔진을 어떻게 구성하는지에 대한 더 자세한 내용은 데이터베이스 시크릿 엔진 문서를 참고해 주세요.

출처: 문서

본문

지원 기능(Capabilities)

플러그인 이름 루트 자격 증명 회전 동적 롤 정적 롤 사용자 이름 커스터마이징
redis-database-plugin 아니요

설정(Setup)

데이터베이스 시크릿 엔진이 아직 활성화되어 있지 않다면 먼저 활성화해요.

$ vault secrets enable database
Success! Enabled the database secrets engine at: database/

기본적으로 시크릿 엔진은 엔진 이름 그대로의 경로에 활성화돼요. 다른 경로에 두고 싶다면 -path 인자를 사용하면 됩니다.

다음으로 Vault에 올바른 플러그인과 연결 구성을 설정해요.

$ vault write database/config/my-redis-database \
    plugin_name="redis-database-plugin" \
    host="localhost" \
    port=6379 \
    tls=true \
    ca_cert="$CACERT" \
    username="user" \
    password="pass" \
    allowed_roles="my-*-role"

관리자 비밀번호의 회전도 고려해 보는 게 좋아요. 다만 회전을 하면 새 비밀번호가 Vault를 통해서는 절대 제공되지 않으므로, 이런 용도를 위한 Vault 전용 데이터베이스 관리자 사용자를 만들어 두는 것이 좋아요.

$ vault write -force database/rotate-root/my-redis-database

사용법(Usage)

시크릿 엔진을 구성한 뒤에는 동적 롤과 정적 롤을 Vault에 작성해 자격 증명 생성을 활성화해요.

동적 롤(Dynamic roles)

Vault 안의 이름을 Redis ACL 규칙이 담긴 JSON 문자열에 매핑하는 동적 롤을 구성해요. ACL 규칙에 대한 자세한 내용은 여기 또는 Redis의 ACL CAT 명령 출력에서 확인할 수 있어요.

$ vault write database/roles/my-dynamic-role \
    db_name="my-redis-database" \
    creation_statements='["+@admin"]' \
    default_ttl="5m" \
    max_ttl="1h"
Success! Data written to: database/roles/my-dynamic-role

creation_statement를 제공하지 않으면 사용자 계정은 기본적으로 읽기 전용 사용자, 즉 어떤 키든 읽을 수 있는 ["~*", "+@read"]로 설정된다는 점을 알아 두세요.

이제 롤 이름을 사용해 /creds 엔드포인트를 읽어 새 자격 증명 세트를 생성해요.

$ vault read database/creds/my-dynamic-role
Key                Value
---                -----
lease_id           database/creds/my-dynamic-role/OxCTXJcxQ2F4lReWPjbezSnA
lease_duration     5m
lease_renewable    true
password           dACqHsav6-attdv1glGZ
username           V_TOKEN_MY-DYNAMIC-ROLE_YASUQUF3GVVD0ZWTEMK4_1608481717

정적 롤(Static roles)

Vault 안의 이름을 기존 Redis 사용자에 매핑하는 정적 롤을 구성해요.

$ vault write database/static-roles/my-static-role \
    db_name="my-redis-database" \
    username="my-existing-redis-user" \
    rotation_period=5m
Success! Data written to: database/static-roles/my-static-role

/static-creds 엔드포인트에서 자격 증명을 가져와요.

$ vault read database/static-creds/my-static-role
Key                    Value
---                    -----
last_vault_rotation    2020-12-20T10:39:49.647822-06:00
password               ylKNgqa3NPVAioBf-0S5
rotation_period        5m
ttl                    4m39s
username               my-existing-redis-user

API

구성 가능한 전체 옵션 목록은 Redis Database Plugin API 페이지에서 확인할 수 있어요.

데이터베이스 시크릿 엔진의 HTTP API에 대한 자세한 내용은 Database Secrets Engine API 페이지를 참고해 주세요.

더 알아보기 (Learn more)

  • 데이터베이스 시크릿 엔진 문서에서 시크릿 엔진 구성 방법을 살펴보세요.
  • Redis DB 플러그인 API 페이지에서 세부 옵션을 확인해 보세요.