transit 시크릿 엔진을 관리 키로 PKCS 11 HSM 구성하기
transit 시크릿 엔진을 관리 키로 PKCS 11 HSM 구성하기
transit 시크릿 엔진을 Vault의 중앙 추상화 계층인 관리 키(managed keys) 에 연결하면 암호화 작업을 신뢰할 수 있는 외부 KMS 또는 HSM에 위임할 수 있습니다. 이를 통해 개인 키 자료의 처리·저장·상호작용에 Vault 외부의 키 관리 시스템을 활용할 수 있습니다.
출처: 문서
본문
요구사항
PKCS 11 기반 HSM으로 transit 시크릿 엔진을 구성하려면 다음이 필요합니다.
- 실행 중인 Vault Enterprise 서버
- PKCS 11 기반 HSM
Vault 설정
- 관리 키 구성하기. PKCS#11 HSM은 Vault가 HSM과 통신하도록 구성하기 위한 공유 라이브러리가 필요합니다. 이 라이브러리를 선언하려면 Vault 서버 구성을 편집해
kms_library스탠자를 추가하세요.
kms_library "pkcs11" {
name = "myhsm"
library = "/usr/vault/lib/libCryptoki2_64.so"
}
- IBM EP11 토큰과 함께 PKCS 11 사용하기. LinuxOne 및 Linux on IBM Z 인스턴스에서 Crypto Express 어댑터를 활성화하고 EP11 토큰을 사용하도록 구성해야 하며, EP11 토큰과 통신할 수 있는 opencryptoki도 설치해야 합니다. 자세한 내용은 IBM EP11 Token 페이지를 참고하세요.
kms_library "pkcs11" {
name = "myhsm"
library = "/usr/local/lib/opencryptoki/libopencryptoki.so"
}
- SIGHUP으로 Vault 구성 다시 시작하거나 재로드하기.
$ kill -HUP $(pidof vault)
- 관리 키 구성하기. 각 관리 키는 유형별 구성이 필요합니다. HSM에 접근하기 위한 키의 위치와 PIN을 지정해야 합니다. 이는 Vault의 PKCS#11 자동 봉인 해제 메커니즘과 매우 유사합니다.
$ vault write sys/managed-keys/pkcs11/transit-rsa-key \
library=myhsm \
slot=4 \
pin=12345678 \
key_label="vault-rsa-key" \
allow_generate_key=true \
mechanism=0x0001 \
allow_store_key=true \
key_bits=2048 \
any_mount=false
PKCS#11 전용 매개변수는 이전에 구성한 kms_library 스탠자를 가리키는 library, slot, pin, key_label, 그리고 키를 보유할 HSM의 개체를 식별하는 mechanism입니다. 그 메커니즘은 CKM_RSA_PKCS(PKCS#11 v1.5 서명이 있는 RSA)이며 2048비트 키가 필요합니다. allow_generate_key 플래그는 Vault가 HSM에 키 생성을 요청할 수 있음을 나타냅니다. allow_store_key 매개변수는 새 키를 백엔드에 저장할 수 있음을 나타냅니다. 이 플래그가 없으면 HSM에서 키를 직접 구성하고 Vault가 그 결과를 가리키도록 할 수 있습니다. any_mount는 네임스페이스의 모든 마운트가 관리 키에 접근할 수 있음을 의미합니다. 이 예시에서는 false로 설정해 관리 키 접근을 특정 마운트로 잠그는 방법을 보여줍니다.
Success! Data written to: sys/managed-keys/pkcs11/transit-rsa-key
- 키를 다시 읽어 이름 있는 관리 키가 성공적으로 생성됐는지 확인하기.
$ vault read sys/managed-keys/pkcs11/transit-rsa-key
Key Value
--- -----
UUID fe8f3c8c-8f11-571d-b4ce-411314fcaf98
allow_generate_key true
allow_replace_key false
allow_store_key true
any_mount false
key_bits 2048
key_label vault-rsa-key
library myhsm
mechanism 1
name transit-rsa-key
pin redacted
slot 4
type pkcs11
usages [3 4]
transit 시크릿 엔진 구성하기
transit경로에 transit 시크릿 엔진 활성화하기.
$ vault secrets enable transit
Success! Enabled the transit secrets engine at: transit/
- 시크릿 엔진을 관리 키를 사용하도록 튜닝하기.
$ vault secrets tune --allowed-managed-keys=transit-rsa-key transit
Success! Tuned the secrets engine at: transit/
이전 단계에서 관리 키를 any_mount=false로 구성했습니다. 이 명령은 Transit 시크릿 엔진의 마운트에 transit-rsa-key에 대한 접근 권한을 부여합니다.
- transit 키 생성하기.
$ vault write transit/keys/hsm-transit-key \
type=managed_key \
managed_key_name=transit-rsa-key \
allow_plaintext_backup=false \
exportable=false
Key Value
--- -----
allow_plaintext_backup false
auto_rotate_period 0s
deletion_allowed false
derived false
exportable false
imported_key false
latest_version 1
min_available_version 0
min_decryption_version 1
min_encryption_version 0
name hsm-transit-key
supports_decryption true
supports_derivation false
supports_encryption true
supports_signing true
type managed_key
이 단계에서 transit 키를 만들면서 HSM에 RSA 2048 공개·개인 키 쌍도 생성됩니다. 키 라벨은 vault-rsa-key입니다.
암호화 작업 수행하기
- 데이터 서명 작업 수행하기.
$ vault write transit/sign/hsm-transit-key \
input=$(echo -n "data to sign" | base64) \
hash_algorithm=sha2-256
Key Value
--- -----
key_version 1
signature vault:v1:bqLeknlTuvrPt99ubS0CZyDs5iG8q9n+7kLG+2qHmg1xcHxUdKYCvtIUO5ZpCjJ6SUA/cTJgeFqdhK5rOcSfTzhU5B+HABEYeVb+H7yQ4+sLWrJQ5fNAQZCly+AiXM4q2lAvMW651oq0D4R86f0tOUHVjsaQyqhrrtaA1GQoIcNikx4llTXiGRmc3A1dZmpFCpG7ejQuUF8mGj1tFmY/dyrV0V9o58rmqGe/ddfg+bAfpewNcqWPoWtB+o9QuFhw3L8eqxVCbF8lGfZlqJmudep13So4bC03bWdlZBET8nYpX51Bi5yz0C9wth666IiqE61JnPBlmcJFEyd3FCJ4yQ==
- 서명된 데이터 검증하기.
$ vault write transit/verify/hsm-transit-key \
input=$(echo -n "data to sign" | base64) \
hash_algorithm=sha2-256 \
signature="vault:v1:..."
signature는 서명 명령의 출력입니다.
Key Value
--- -----
valid true
참고 자료
- Encrypt data in transit with Vault
- Transit 시크릿 엔진
- Transit 시크릿 엔진 (API)
/sys/managed-keys엔드포인트