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 시크릿 엔진을 설정해야 합니다.
- KMIP 시크릿 엔진과 리스너 시작하기.
vault secrets enable kmip
vault write kmip/config listen_addrs=0.0.0.0:5696
중요: Oracle용 KMIP를 구성할 때
server_hostnames와server_ips구성 매개변수를 설정해야 할 것입니다. 그렇지 않으면 인증서 검증 오류로 KMIP 시크릿 엔진에 대한 TLS 연결이 실패합니다. Oracle TDE를 구성할 때 이 오류는 sqlplus 세션이 조용히 중단되는 것으로 나타날 수 있습니다.
- TDE 키와 개체를 담을 KMIP 스코프를 생성하기. KMIP 스코프는 본질적으로 격리된 네임스페이스입니다. 예를 들어
my-service라는 스코프를 만들 수 있습니다.
vault write -f kmip/scope/my-service
- 스코프에 접근할 수 있는 KMIP 역할을 생성하기.
vault write kmip/scope/my-service/role/admin operation_all=true
- 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.pem과 ca.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를 구성해야 합니다.
-
libvault-pkcs11.so바이너리를$ORACLE_BASE/extapi/64/hsm에 복사하고,$ORACLE_BASE/extapi/64/hsm에 다른 PKCS#11 라이브러리가 없는지 확인합니다. -
KMIP 역할의(위에서 구성한) TLS 인증서와 키 번들(예:
/etc/cert.pem) 및 CA 번들(예:/etc/ca.pem)을 Oracle 서버에 복사합니다. Oracle 프로세스가 접근할 수 있기만 하면 정확한 위치는 중요하지 않습니다. -
다음 내용으로
/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 환경 변수를 어떤 파일로든 설정해 재정의할 수 있습니다.
- 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는 복잡하지만 활성화하는 예시 방법은 다음과 같습니다.
-
루트 컨테이너에 sqlplus 세션을 엽니다. (또는
ALTER SESSION SET CONTAINER = CDB$ROOT;로 전환합니다.) -
Oracle 데이터베이스에
WALLET_ROOT와TDE_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;
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
-
HSM 지갑을 엽니다.
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "1234" CONTAINER = ALL;. 여기의 비밀번호1234는 TLS 키가 디스크에 암호화되어 저장된 경우 이를 복호화하는 비밀번호로 사용됩니다. TLS 키가 암호화되어 있지 않으면 이 비밀번호는 무시됩니다. -
TDE 마스터 키를 만듭니다.
ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY USING TAG 'default' IDENTIFIED BY "1234" CONTAINER = ALL;— 필요하면 TLS 키 비밀번호를 다시 지정합니다. -
마지막으로 PDB에서 TDE를 사용합니다. 예:
CREATE TABLE test_tde (something CHAR(32) ENCRYPT);.
Oracle TDE의 세부사항과 절차에 대한 더 포괄적인 정보는 Oracle 문서에서 확인할 수 있습니다.
통합 문제 해결: Vault를 Oracle TDE와 통합하는 데 문제가 있으면, 자세한 문제 해결 지침과 리소스가 있는 Troubleshoot KMIP secrets engine with Oracle TDE 튜토리얼을 검토하세요.