transit KMS

transit KMS

Transit KMS는 키 관리를 위해 Boundary가 Vault의 Transit Secret Engine을 사용하도록 구성해요. Transit KMS는 Boundary 구성 파일에 kms "transit" 블록이 있으면 활성화돼요.

출처: HashiCorp Boundary docs

본문

Transit KMS는 키 관리를 위해 Boundary가 Vault의 Transit Secret Engine을 사용하도록 구성해요.

Transit KMS는 Boundary 구성 파일에 kms "transit" 블록이 있으면 활성화돼요.

transit 예시

이 예시는 필요한 모든 값을 제공해 Boundary 구성 파일을 통해 Transit KMS를 구성하는 방법을 보여줘요.

kms "transit" {
  purpose            = "root"
  address            = "https://vault:8200"
  token              = "s.Qf1s5zigZ4OX6akYjQXJC1jY"
  disable_renewal    = "false"
  key_id             = "global_worker-auth"

  // Key configuration
  key_name           = "transit_key_name"
  mount_path         = "transit/"
  namespace          = "ns1/"

  // TLS Configuration
  tls_ca_cert        = "/etc/vault/ca_cert.pem"
  tls_client_cert    = "/etc/vault/client_cert.pem"
  tls_client_key     = "/etc/vault/ca_cert.pem"
  tls_server_name    = "vault"
  tls_skip_verify    = "false"
}

transit 파라미터

이 파라미터들은 Boundary 구성 파일의 kms 스탠자에 적용돼요.

  • purpose — 이 KMS의 목적이에요. 허용되는 값은 bsr, config, downstream-worker-auth, previous-root, recovery, root, worker-auth, worker-auth-storage예요. 세션 녹화를 활성화하려면 purpose에 bsr 값을 구성해야 해요. 지원되는 KMS purpose에 대한 자세한 내용은 Data encryption in Boundary를 참고하세요.
  • address (string: <required>) — Vault 클러스터의 전체 주소예요. VAULT_ADDR 환경 변수로도 지정할 수 있어요.
  • token (string: <required>) — 사용할 Vault 토큰이에요. VAULT_TOKEN 환경 변수로도 지정할 수 있어요.
  • key_name (string: <required>) — 암호화와 복호화에 사용할 transit 키예요. TRANSIT_WRAPPER_KEY_NAME 환경 변수로도 제공할 수 있어요.
  • mount_path (string: <required>) — transit 시크릿 엔진의 마운트 경로예요. TRANSIT_WRAPPER_MOUNT_PATH 환경 변수로도 제공할 수 있어요.
  • namespace (string: "") — transit 시크릿 엔진의 네임스페이스 경로예요. VAULT_NAMESPACE 환경 변수로도 제공할 수 있어요.
  • disable_renewal (string: "false") — 토큰의 수명 주기가 Vault 밖의 다른 메커니즘(예: Vault Agent)으로 관리되는 경우 토큰의 자동 갱신을 비활성화해요. TRANSIT_WRAPPER_DISABLE_RENEWAL 환경 변수로도 지정할 수 있어요.
  • tls_ca_cert (string: "") — Vault 서버와 통신하는 데 사용하는 CA 인증서 파일의 경로를 지정해요. VAULT_CA_CERT 환경 변수로도 지정할 수 있어요.
  • tls_client_cert (string: "") — Vault 서버와 통신하는 데 사용하는 클라이언트 인증서의 경로를 지정해요. VAULT_CLIENT_CERT 환경 변수로도 지정할 수 있어요.
  • tls_client_key (string: "") — Vault 서버와 통신하는 데 사용하는 개인 키의 경로를 지정해요. VAULT_CLIENT_KEY 환경 변수로도 지정할 수 있어요.
  • tls_server_name (string: "") — TLS로 Vault 서버에 연결할 때 SNI 호스트로 사용할 이름이에요. VAULT_TLS_SERVER_NAME 환경 변수로도 지정할 수 있어요.
  • tls_skip_verify (bool: "false") — TLS 인증서 검증을 비활성화해요. 이 옵션을 사용하는 것은 매우 권장되지 않으며, Vault 서버와 주고받는 데이터 전송의 보안을 떨어뜨려요. VAULT_SKIP_VERIFY 환경 변수로도 지정할 수 있어요.
  • key_id — 이 키의 고유한 이름이에요. 루트 키 마이그레이션을 수행할 때 키를 식별하는 데 사용돼요. key_id 필드는 모든 KMS 스탠자에서 사용할 수 있어요.

인증

인증 관련 값은 환경 변수나 구성 파라미터로 제공해야 해요.

Note: 구성 파일에서 KMS 스탠자의 파라미터로 token을 전달할 수는 있지만, 구성 파일에서 token 파라미터를 생략하고 VAULT_TOKEN 환경 변수로 Vault에 인증하는 데 사용할 토큰을 설정하는 것을 강력히 권장해요.

인증에 사용하는 Vault 토큰은 transit 키에 대해 다음 권한이 필요해요.

path "<mount path>/encrypt/<key name>" {
  capabilities = ["update"]
}

path "<mount path>/decrypt/<key name>" {
  capabilities = ["update"]
}