PKCS#11을 Oracle TDE로 구성하기

PKCS#11을 Oracle TDE로 구성하기

Oracle TDE(Transparent Data Encryption, 투명 데이터 암호화) 는 Vault PKCS#11 provider로 지원됩니다. 이 설정에서 Vault의 KMIP 엔진이 Oracle Database가 "TDE 테이블 키"를 암호화·복호화하는 데 사용하는 "TDE 마스터 암호화 키" 를 생성·저장합니다. Oracle은 TDE 마스터 암호화 키 자체에는 접근할 수 없습니다.

출처: 문서

본문

요구사항 (Requirements)

Vault로 지원되는 Oracle TDE를 구성하려면 다음이 필요합니다.

  • Oracle 19c Enterprise Edition을 실행하는 데이터베이스
  • KMIP 지원을 위한 고급 데이터 보호가 포함된 Vault Enterprise 1.11+ 서버
  • Oracle 데이터베이스에서 접근 가능한 TCP 포트 5696이 있는 Vault
  • Oracle 데이터베이스를 실행하는 운영 체제용으로 releases.hashicorp.com에서 다운로드한 libvault-pkcs11.so

Vault 설정

Vault 서버에서 KMIP 시크릿 엔진을 설정해야 합니다.

  1. KMIP 시크릿 엔진과 리스너 시작하기.
vault secrets enable kmip
vault write kmip/config listen_addrs=0.0.0.0:5696

중요: Oracle용 KMIP를 구성할 때 server_hostnamesserver_ips 구성 매개변수를 설정해야 할 것입니다. 그렇지 않으면 인증서 검증 오류로 KMIP 시크릿 엔진에 대한 TLS 연결이 실패합니다. Oracle TDE를 구성할 때 이 오류는 sqlplus 세션이 조용히 중단되는 것으로 나타날 수 있습니다.

  1. TDE 키와 개체를 담을 KMIP 스코프를 생성하기. KMIP 스코프는 본질적으로 격리된 네임스페이스입니다. 예를 들어 my-service라는 스코프를 만들 수 있습니다.
vault write -f kmip/scope/my-service
  1. 스코프에 접근할 수 있는 KMIP 역할을 생성하기.
vault write kmip/scope/my-service/role/admin operation_all=true
  1. KMIP 역할에 대한 TLS 자격증명(인증서, 키, CA 번들)을 생성하기.

참고: 이 명령은 자격증명을 평문으로 출력합니다.

vault write -f -format=json kmip/scope/my-service/role/admin/credential/generate | tee kmip.json

credential/generate 엔드포인트의 응답은 JSON입니다. .data.certificate 항목에는 Oracle에서 KMIP에 연결하는 데 사용할 TLS 클라이언트 키와 인증서 번들이 들어 있습니다. .data.ca_chain[] 항목에는 KMIP 서버 인증서를 검증하는 CA 번들이 들어 있습니다. cert.pemca.pem 같은 파일로 저장하세요.

jq --raw-output --exit-status '.data.ca_chain[]' kmip.json > ca.pem
jq --raw-output --exit-status '.data.certificate' kmip.json > cert.pem

Oracle TDE 준비

나머지 단계는 Oracle 서버에서 수행됩니다. Vault PKCS#11 provider를 구성해야 합니다.

  1. libvault-pkcs11.so 바이너리를 $ORACLE_BASE/extapi/64/hsm에 복사하고, $ORACLE_BASE/extapi/64/hsm에 다른 PKCS#11 라이브러리가 없는지 확인합니다.

  2. KMIP 역할의(위에서 구성한) TLS 인증서와 키 번들(예: /etc/cert.pem) 및 CA 번들(예: /etc/ca.pem)을 Oracle 서버에 복사합니다. Oracle 프로세스가 접근할 수 있기만 하면 정확한 위치는 중요하지 않습니다.

  3. 다음 내용으로 /etc/vault-pkcs11.hcl 같은 구성 파일을 만듭니다.

slot {
  server = "VAULT_ADDRESS:5696"
  tls_cert_path = "/etc/cert.pem"
  ca_path = "/etc/ca.pem"
  scope = "my-service"
}

이 파일은 libvault-pkcs11.so가 Vault의 KMIP 엔진을 찾고 통신하는 방법을 알기 위해 사용합니다. 특히:

  • slot 블록은 첫 번째 PKCS#11 슬롯이 Vault를 가리키도록 구성합니다. Oracle은 이 첫 번째 슬롯을 사용합니다.
  • server는 Vault 서버의 IP(또는 DNS 이름)와 포트 번호(기본 5696)를 가리켜야 합니다.
  • tls_cert_path는 Vault 서버에 연결하는 데 사용하는 클라이언트 TLS 인증서와 키 번들의 Oracle 데이터베이스 내 위치여야 합니다.
  • ca_path는 Oracle 데이터베이스의 CA 번들 위치여야 합니다.
  • scope는 인증할 KMIP 스코프이자 TDE 마스터 키와 관련 메타데이터가 저장될 곳입니다.

PKCS#11 라이브러리가 구성 파일을 찾는 기본 위치는 현재 디렉토리(./vault-pkcs11.hcl)와 /etc/vault-pkcs11.hcl이지만, VAULT_KMIP_CONFIG 환경 변수를 어떤 파일로든 설정해 재정의할 수 있습니다.

  1. Vault 로그를 보려면(오류 메시지를 찾는 데 유용) VAULT_LOG_FILE(기본 stdout)과 VAULT_LOG_LEVEL(기본 INFO)을 지정할 수 있습니다. VAULT_LOG_FILE/tmp/vault.log 또는 /var/log/vault.log 같은 것으로 설정하는 것을 권장합니다. 다른 유용한 로그 수준은 WARN(더 조용함)과 TRACE(상세하며 원시 네트워크 패킷 같은 민감한 정보를 포함할 수 있음)입니다.

TDE 활성화

남은 유일한 단계는 공유 라이브러리 libvault-pkcs11.so를 사용하는 외부 HSM용 Oracle TDE를 설정하는 것입니다. 이러한 단계는 공유 라이브러리, HCL 구성, 인증서가 있어야 한다는 것 외에는 Vault에 특정하지 않습니다. TDE는 복잡하지만 활성화하는 예시 방법은 다음과 같습니다.

  1. 루트 컨테이너에 sqlplus 세션을 엽니다. (또는 ALTER SESSION SET CONTAINER = CDB$ROOT;로 전환합니다.)

  2. Oracle 데이터베이스에 WALLET_ROOTTDE_CONFIGURATION 매개변수를 설정합니다. 지갑 루트 디렉토리는 TDE 구성 매개변수를 설정하는 데만 사용됩니다. 지갑 매개변수에 대한 자세한 내용은 Oracle TDE 문서를 참고하세요.

SQL> alter system set wallet_root='/opt/oracle/admin/ORCLCDB/wallet' scope=spfile;
SQL> shutdown immediate;
SQL> startup;
SQL> alter system set TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=HSM" SCOPE=both;
  1. V$PARAMETER를 조회해 매개변수가 설정되었는지 검증합니다.
SQL> SELECT name, value from V$PARAMETER WHERE NAME IN ('wallet_root','tde_configuration');
NAME             VALUE
---------------- --------------------------------------------------
wallet_root      /opt/oracle/admin/ORCLCDB/wallet
tde_configuration KEYSTORE_CONFIGURATION=HSM
  1. HSM 지갑을 엽니다. ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "1234" CONTAINER = ALL;. 여기의 비밀번호 1234는 TLS 키가 디스크에 암호화되어 저장된 경우 이를 복호화하는 비밀번호로 사용됩니다. TLS 키가 암호화되어 있지 않으면 이 비밀번호는 무시됩니다.

  2. TDE 마스터 키를 만듭니다. ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY USING TAG 'default' IDENTIFIED BY "1234" CONTAINER = ALL; — 필요하면 TLS 키 비밀번호를 다시 지정합니다.

  3. 마지막으로 PDB에서 TDE를 사용합니다. 예: CREATE TABLE test_tde (something CHAR(32) ENCRYPT);.

Oracle TDE의 세부사항과 절차에 대한 더 포괄적인 정보는 Oracle 문서에서 확인할 수 있습니다.

통합 문제 해결: Vault를 Oracle TDE와 통합하는 데 문제가 있으면, 자세한 문제 해결 지침과 리소스가 있는 Troubleshoot KMIP secrets engine with Oracle TDE 튜토리얼을 검토하세요.

더 알아보기 (Learn more)