Vault backend storage용 Consul 구성

Vault backend storage용 Consul 구성

Consul storage backend는 Vault의 데이터를 Consul의 키-값 저장소에 영구 저장하는 데 사용됩니다. 내구성 있는 저장을 제공하는 것 외에도 이 backend를 포함하면 Vault를 기본 상태 검사와 함께 Consul의 서비스로 등록합니다.

출처: 문서

본문

호환성 정보: Consul 1.14.0부터 Consul on Kubernetes는 클라이언트 에이전트 대신 기본적으로 Consul Dataplane을 사용합니다. Vault는 현재 Consul Dataplane을 지원하지 않습니다. Consul 1.14.0 업그레이드 가이드를 따라 Consul on Kubernetes 배포가 계속 클라이언트 에이전트를 사용하도록 하세요.

  • 고가용성 – Consul storage backend는 고가용성을 지원합니다.
  • HashiCorp 지원 – Consul storage backend는 HashiCorp가 공식 지원합니다.
storage "consul" {
  address = "127.0.0.1:8500"
  path    = "vault/"
}

올바르게 구성되면 봉인 해제된 Vault 설치가 다음에서 접근 가능해야 합니다:

active.vault.service.consul

standby 모드의 봉인 해제된 Vault 인스턴스는 다음에서 접근 가능합니다:

standby.vault.service.consul

모든 봉인 해제된 Vault 인스턴스는 정상 상태로 다음에서 접근 가능합니다:

vault.service.consul

봉인된 Vault 인스턴스는 Consul의 서비스 검색 레이어에서 반환되지 않도록 스스로 비정상 상태로 표시합니다.

Vault에 대해 여러 listener를 구성했다면 api_addrcluster_addr를 사용해 Consul이 클러스터에 어떤 것을 알릴지 지정해야 합니다(예시).

consul 파라미터

  • address (string: "127.0.0.1:8500") – 통신할 Consul 에이전트의 주소를 지정합니다. IP 주소, DNS 레코드, 또는 unix 소켓일 수 있습니다. 로컬 Consul 에이전트와 통신하는 것을 권장합니다. 서버와 직접 통신하지 마세요.

  • check_timeout (string: "5s") – 상태 검사 정보를 Consul로 다시 보내는 데 사용되는 검사 간격을 지정합니다. "30s""1h" 같은 라벨 접미사로 지정합니다.

  • consistency_mode (string: "default") – Consul 일관성 모드를 지정합니다. 가능한 값은 "default" 또는 "strong"입니다.

  • disable_registration (string: "false") – Vault가 Consul에 스스로를 등록해야 하는지 여부를 지정합니다.

  • max_parallel (string: "128") – Consul에 대한 최대 동시 요청 수를 지정합니다. Consul 에이전트가 이 수준의 병렬 처리를 지원하도록 구성되어 있는지 확인하세요. http_max_conns_per_client를 참고하세요.

  • path (string: "vault/") – Vault 데이터가 저장될 Consul 키-값 저장소의 경로를 지정합니다.

  • scheme (string: "http") – Consul과 통신할 때 사용할 스킴을 지정합니다. "http" 또는 "https"로 설정할 수 있습니다. 비로컬 연결에서는 Consul과 https로 통신하는 것을 적극 권장합니다. unix 소켓으로 통신할 때는 이 옵션이 무시됩니다.

  • service (string: "vault") – Consul에 등록할 서비스의 이름을 지정합니다.

  • service_tags (string: "") – Consul의 서비스 등록에 연결할 태그의 쉼표로 구분된 목록을 지정합니다.

  • service_meta (map[string]string: {}) – Consul의 서비스 등록에 연결할 메타 태그의 키-값 목록을 지정합니다. 자세한 내용은 Consul 문서의 ServiceMeta를 참고하세요.

  • service_address (string: nil) – Consul의 서비스 등록에 설정할 서비스별 주소를 지정합니다. 설정하지 않으면 Vault가 자신이 아는 HA 리다이렉트 주소를 사용하는데, 보통 바람직합니다. 이 파라미터를 ""로 설정하면 Consul이 서비스가 등록된 노드의 구성을 동적으로 활용하도록 지시합니다. 이는 Consul의 translate_wan_addrs 파라미터를 활용하려는 경우 유용할 수 있습니다.

  • token (string: "") – Consul 키-값 저장소의 path에서 읽고 쓸 권한이 있는 Consul ACL 토큰을 지정합니다. 이는 Vault 토큰이 아닙니다. 환경 변수 CONSUL_HTTP_TOKEN으로도 제공할 수 있습니다. 도움이 필요하면 아래 ACL 섹션을 참고하세요.

  • session_ttl (string: "15s") - 허용되는 최소 세션 TTL을 지정합니다. 새 세션이 생성될 때 Vault는 이 값을 강화합니다. 이 설정은 이 값보다 큰 다른 TTL 세션을 무효화하지 않습니다. 이 설정은 session_ttl보다 작은 TTL을 가진 세션을 갖지 않도록 합니다.

  • lock_wait_time (string: "15s") - 잠금 획득이 이루어지기 전의 대기 시간을 지정합니다. 이는 잠금 획득을 취소하는 데 걸리는 최소 시간에 영향을 줍니다.

다음 설정은 암호화된 연결로 Consul과 통신할 때 적용됩니다. Consul 연결 암호화에 대한 자세한 내용은 Consul encryption 페이지에서 읽을 수 있습니다.

  • tls_ca_file (string: "") – Consul 통신에 사용되는 CA 인증서의 경로를 지정합니다. 지정하지 않으면 시스템 번들로 기본 설정됩니다. Consul의 ca_file 설정에 따라 설정해야 합니다.

  • tls_cert_file (string: "") (선택 사항) – Consul 통신을 위한 인증서의 경로를 지정합니다. Consul의 cert_file 설정에 따라 설정해야 합니다.

  • tls_key_file (string: "") – Consul 통신을 위한 개인 키의 경로를 지정합니다. Consul의 key_file 설정에 따라 설정해야 합니다.

  • tls_min_version (string: "tls12") – 사용할 최소 TLS 버전을 지정합니다. 허용되는 값은 "tls10", "tls11", "tls12" 또는 "tls13"입니다.

  • tls_skip_verify (string: "false") – TLS 인증서 검증을 비활성화합니다. 이 옵션 사용은 권장되지 않습니다.

ACL

Consul에서 ACL을 사용한다면 적절한 권한이 필요합니다. Consul 0.8의 경우, 서비스 이름이 vault이고 사용되는 접두사가 vault/라고 가정할 때 다음이 대부분의 사용 사례에 작동합니다:

{
  "key": {
    "vault/": {
      "policy": "write"
    }
  },
  "service": {
    "vault": {
      "policy": "write"
    }
  },
  "agent": {
    "": {
      "policy": "read"
    }
  },
  "session": {
    "": {
      "policy": "write"
    }
  }
}

Consul 1.4+의 경우 다음 예시는 변경된 ACL 언어를 고려합니다:

{
  "key_prefix": {
    "vault/": {
      "policy": "write"
    }
  },
  "service": {
    "vault": {
      "policy": "write"
    }
  },
  "agent_prefix": {
    "": {
      "policy": "read"
    }
  },
  "session_prefix": {
    "": {
      "policy": "write"
    }
  }
}

consul 예시

로컬 에이전트

이 예시는 127.0.0.1:8500에서 실행 중인 로컬 Consul 에이전트와 통신하는 샘플 물리 backend 구성을 보여줍니다.

storage "consul" {}

상세 사용자 지정

이 예시는 ACL 토큰과 함께 사용자 지정 주소의 Consul과 통신하는 방법을 보여줍니다.

storage "consul" {
  address = "10.5.7.92:8194"
  token   = "abcd1234"
}

사용자 지정 storage 경로

이 예시는 Consul 키-값 저장소의 사용자 지정 경로에 데이터를 저장하는 방법을 보여줍니다. Consul이 ACL을 사용하도록 구성된 경우 이 경로는 Consul ACL 토큰이 읽고 쓸 수 있어야 합니다.

storage "consul" {
  path = "vault/"
}

unix 소켓을 통한 Consul

이 예시는 로컬 unix 소켓을 통해 Consul과 통신하는 방법을 보여줍니다.

storage "consul" {
  address = "unix:///tmp/.consul.http.sock"
}

사용자 지정 TLS

이 예시는 사용자 지정 CA, 인증서, 키 파일을 사용해 TLS로 Consul과 안전하게 통신하는 방법을 보여줍니다.

storage "consul" {
  scheme        = "https"
  tls_ca_file   = "/etc/pem/vault.ca"
  tls_cert_file = "/etc/pem/vault.cert"
  tls_key_file  = "/etc/pem/vault.key"
}

더 알아보기