Vault seal 고가용성(HA) 구성

Vault seal 고가용성(HA) 구성

Seal High Availability는 seal 서비스 또는 메커니즘의 장애에 대비한 복원력을 위해 최소 2개(최대 3개)의 auto-seal을 구성할 수 있는 수단을 제공합니다. Shamir seal은 Seal HA 구성에서 사용할 수 없습니다.

출처: 문서

본문

Enterprise 적절한 Vault Enterprise 라이선스가 필요합니다.

Seal HA를 사용하려면 Vault 서버 구성 파일에 추가 seal을 구성하고 Vault를 다시 시작하거나 SIGHUP 신호로 구성을 리로드해야 합니다.

Seal HA를 사용하기 전에 Vault 1.16 이상으로 업그레이드해야 합니다. Seal HA는 Vault 구성에 다음 줄을 추가해 활성화합니다:

enable_multiseal = true

seal 추가 및 제거

Seal HA를 사용하려면 Vault 구성에 seal 스탠자가 두 개 이상 정의되어 있어야 합니다.

Seal HA는 이 스탠자에 namepriority라는 두 필드를 추가합니다:

seal [TYPE] {
  name = "seal_name"
  priority = "1"
  # ...
}

Name은 선택 사항이며, 지정하지 않으면 seal의 유형으로 설정됩니다. 이름은 고유해야 합니다. 같은 유형의 seal 두 개를 사용한다면 name을 지정해야 합니다. 내부적으로 name은 일부 경우 seal wrapping된 값을 구분하는 데 사용되므로 가능하면 seal 이름을 바꾸지 않는 것이 좋습니다. 많은 seal 유형은 구성 줄 대신 환경 변수로 민감한 값을 제공할 수 있습니다. 같은 유형의 seal이 두 개 있을 수 있으므로 사용되는 환경 변수를 구분해야 합니다. HA 구성에서는 환경 변수 이름에 밑줄과 seal의 구성된 이름(대소문자 일치)을 추가하세요. 예를 들어 아래 샘플 구성에서 AWS 접근 키는 ACCESS_KEY_aws_east로 제공할 수 있습니다. seal 이름이 환경 변수 이름에서 유효해야 사용할 수 있음을 유의하세요.

Priority는 seal이 둘 이상 지정된 경우 필수입니다. Priority는 Vault에게 봉인 해제 중 seal을 시도할 순서(우선순위가 낮은 것부터), 둘 이상의 seal이 seal wrapping된 값을 unwrap할 수 있을 때 복호화를 시도할 순서, 그리고 엔트로피 증강을 위해 엔트로피를 소싱할 순서를 알려줍니다. 이는 seal의 성능이나 비용 특성이 다를 때 유용할 수 있습니다.

다음은 Seal HA와 호환되는 AWS seal의 가상 구성입니다:

seal "awskms" {
  name       = "aws_east"
  priority   = "1"

  region     = "us-east-1"
  access_key = "«redacted:AKIA…»"
  secret_key = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
  kms_key_id = "19ec80b0-dfdd-4d97-8164-c6examplekey"
}

구성된 모든 정상 seal은 seal wrap 값을 래핑하는 데 사용됩니다. 즉 seal wrapping된 값이나 CSP를 쓸 때마다 구성된 모든 seal에 암호화가 요청되고, 결과가 스토리지 항목에 저장됩니다. seal이 비정상일 때 Vault는 완전히 래핑되지 못한 값을 추적하고, seal이 다시 정상이 되면 이를 다시 래핑합니다. 다만 seal을 사용할 수 없는 동안에는 데이터 암호화 키나 복구 키를 회전할 수 없습니다. 비활성화된 seal은 래핑된 값의 복호화에는 여전히 사용할 수 있지만, 값을 암호화할 때는 회피됩니다.

CSP나 seal wrap 값을 읽을 때 Vault는 사용 가능한 우선순위가 가장 높은 seal로 복호화를 시도하고, 실패하면 다른 seal로 시도합니다.

추가 seal을 추가하려면 priority와 선택적으로 name을 지정한 다른 seal 스탠자를 추가하고 Vault를 다시 시작하면 됩니다.

seal을 제거하려면 해당 seal 스탠자를 제거하고 다시 시작하면 됩니다. 최소한 하나의 seal은 남아 있어야 합니다.

seal 구성 변경을 적용하기 전에 Vault 스토리지의 스냅샷을 찍는 것을 적극 권장합니다.

새 seal 구성으로 Vault가 봉인 해제되면 re-wrapping이 진행되는 동안에도 트래픽을 처리할 수 있습니다.

다음은 AWS KMS seal을 기본(최고 우선순위) seal로, Azure KMS seal을 보조로 사용하는 두 seal HA 구성의 일부 스니펫입니다:

seal "awskms" {
  name = "AWS"
  priority = "1"
  # ...
}
 
seal "azurekeyvault" {
  name = "Azure"
  priority = "2"
  # ...
}

안전 검사

Vault는 안전 메커니즘으로 다음 상황에서 seal 구성 변경을 거부합니다:

  • 이전 seal 구성과 새 seal 구성이 공통 seal을 하나도 공유하지 않는 경우. 이전에 기록된 CSP나 seal wrap 값을 복호화할 수 있는 seal이 없을 것이므로 필요합니다.
  • seal re-wrapping이 진행 중인 경우. 구성 변경을 시도하기 전에 Vault가 이전 구성에서 깨끗하고 완전히 래핑된 상태여야 합니다.
  • 한 번에 둘 이상의 seal을 추가하거나 제거하는 경우.

드물게 안전 검사를 트리거하지 않고 seal 구성을 갱신하는 것이 불가능해질 수 있습니다. 이런 경우 환경 변수 VAULT_SEAL_REWRAP_SAFETYdisable로 설정해 검사를 우회할 수 있습니다.

경고: 환경 변수 VAULT_SEAL_REWRAP_SAFETY의 사용은 최후의 수단으로 간주해야 합니다.

Shamir seal과의 상호 작용

Seal HA는 auto seal 메커니즘에서만 지원됩니다. Shamir seal을 실행하면서 Seal HA를 사용하려면 먼저 전통적인 seal migration 메커니즘을 사용해 원하는 auto seal로 마이그레이션하세요. 그 후 위의 지침에 따라 두 번째 auto seal을 추가할 수 있습니다.

마찬가지로 Shamir seal로 다시 마이그레이션하려면 먼저 위의 지침으로 단일 auto seal로 이동하고, 전통적인 마이그레이션 방법으로 Shamir seal로 되돌아가세요.

Seal HA 제거

운영자가 HA seal 기능을 사용하지 않으면 단일 seal로 다시 마이그레이션하면 데이터 손실이 발생할 수 있습니다. 단일 seal로 마이그레이션하려면:

  • 설명된 대로 seal migration을 수행하세요.
  • API가 fully_wrapped=true를 반환할 때까지 sys/sealwrap/rewrap을 모니터링하세요.
  • 클러스터의 모든 Vault 구성 파일에서 enable_multiseal을 제거하세요.
  • Vault를 다시 시작하세요.

더 알아보기