Utilizzo di Hyper Protect Crypto Services PKCS #11 per Oracle Transparent Database Encryption
Transparent Data Encryption (TDE) è una tecnologia consolidata per la crittografia dei dati sensibili nei database. TDE è supportato da vari sistemi di database comuni, sia nel cloud che in loco, come il database Oracle®. Con TDE, un sistema di database crittografa i dati sui supporti di memorizzazione del database, come i tablespace e i file, e sui supporti di backup. Il sistema di database crittografa e decrittografa automaticamente e in modo trasparente i dati quando vengono utilizzati da applicazioni e utenti autorizzati. Gli utenti del database non devono essere a conoscenza di TDE e le applicazioni del database non devono essere adattate specificamente per TDE.
Tipicamente, TDE utilizza una gerarchia di chiavi a due livelli, composta da una chiave di codifica principale TDE e da una chiave di codifica dati TDE. La chiave di codifica dei dati TDE viene utilizzata per codificare e decodificare i dati, mentre la chiave di codifica principale TDE viene utilizzata per codificare e decodificare la chiave di codifica dei dati TDE.
Pertanto, una domanda importante quando si pianifica TDE è: dove si conserva la chiave di crittografia principale TDE e come la si protegge?
Obiettivi
Questa esercitazione mostra come puoi mantenere il controllo completo ed esclusivo delle tue chiavi di codifica master TDE memorizzandole in IBM Cloud® Hyper Protect Crypto Services. A questo scopo, devi utilizzare la funzione di integrazione PKCS #11 di Hyper Protect Crypto Services.
Con questa esercitazione, verrà implementata la configurazione illustrata nella seguente illustrazione.
In questa configurazione, il Oracle Database richiama le operazioni per la gestione delle chiavi di codifica principali TDE nella libreria Hyper Protect Crypto Services PKCS #11 . La libreria Hyper Protect Crypto Services PKCS #11 interagisce con la tua istanza Hyper Protect Crypto Services, che fornisce la miglior tecnologia di classe per archiviare e gestire le tue chiavi di crittografia master TDE.
Prima di iniziare
Per completare questa esercitazione, devi soddisfare i seguenti prerequisiti:
Flusso di fasi
Per completare questa soluzione, procedere come segue:
- Inizializza la tua istanza Hyper Protect Crypto Services.
- Configura la libreria PKCS #11 Hyper Protect Crypto Services nel tuo ambiente Oracle Database.
- Impostare Oracle Database TDE e codificare i dati.
Iniziamo con il processo di inizializzazione dell'istanza Hyper Protect Crypto Services.
Inizializza la tua istanza Hyper Protect Crypto Services
-
Per questa esercitazione, devi inizializzare prima un'istanza Hyper Protect Crypto Services.
Prendi nota della tua istanza Hyper Protect Crypto Services e dell'indirizzo endpoint EP11. Queste informazioni sono necessarie per le fasi successive.
-
Genera una chiave API per accedere alla tua istanza Hyper Protect Crypto Services. Immetti il seguente comando per creare una chiave API per il tuo account IBM Cloud:
ibmcloud iam api-key-create apikeyhpcs -d "API key for Hyper Protect Crypto Services PKCS11"
-
Salva il valore della chiave API per i passi successivi.
Imposta la libreria Hyper Protect Crypto Services PKCS #11 nell'ambiente Oracle Database
1. Impostare il Oracle Database
È necessaria un'installazione di Oracle Database Enterprise Edition con Oracle Advanced Security. Questa esercitazione utilizza un singolo contenitore Oracle Database 19.3 Enterprise Edition Docker. Per ulteriori informazioni sui contenitori Oracle Database e istruzioni sulla creazione di un rispettivo contenitore, vedi Oracle Database on Docker.
-
Avviare il contenitore Oracle Database:
docker run --name oradb -p 1521:1521 -p 5500:5500 -e ORACLE_PWD=password oracle/database:19.3.0-ee
Attendere il termine della creazione di istanza e database.
-
Immettere il seguente comando da una riga comandi sul sistema host:
docker exec -it --user root --workdir / oradb bash
Questa shell può essere utilizzata per eseguire i comandi come
root
per le fasi successive.
2. Configura la libreria Hyper Protect Crypto Services PKCS #11
Crea ora un file di configurazione per la funzione Hyper Protect Crypto Services PKCS #11 . Il file di configurazione è denominato grep11client.yaml
.
Adattare il seguente modello di file e denominare grep11client.yaml
:
- Sostituisci
<instance_ID>
con l'ID della tua istanza Hyper Protect Crypto Services. - Sostituisci
<EP11_endpoint_URL>
e<EP11_endpoint_port_number>
con i rispettivi parametri dell'indirizzo endpoint EP11 della tua istanza Hyper Protect Crypto Services. - Sostituisci
<your_api_key>
con il valore della chiave API che hai creato.
iamcredentialtemplate: &defaultiamcredential
enabled: true
endpoint: "https://iam.cloud.ibm.com"
# Keep the 'apikey' empty. It will be overridden by the Anonymous user API key configured later.
apikey:
# The Universally Unique IDentifier (UUID) of your Hyper Protect Crypto Services instance.
instance: "<instance_ID>"
tokens:
0:
grep11connection:
# The EP11 endpoint address starting from 'ep11'.
# For example: "<instance_ID>.ep11.us-south.hs-crypto.appdomain.cloud"
address: "<EP11_endpoint_URL>"
# The EP11 endpoint port number
port: "<EP11_endpoint_port_number>"
tls:
# Grep11 requires TLS connection.
enabled: true
# Grep11 requires server only authentication, so 'mutual' needs to be set as 'false'.
mutual: false
# 'cacert' is a full-path certificate file.
# In Linux with the 'ca-ca-certificates' package installed, this is normally not needed.
cacert:
# Grep11 requires the server-only authentication, so 'certfile' and 'keyfile' need to be empty.
certfile:
keyfile:
storage:
filestore:
enabled: false
storagepath:
# 'remotestore' needs to be enabled if you want to generate keys with the attribute CKA_TOKEN.
remotestore:
enabled: true
users:
0: # The index of the Security Officer (SO) user MUST be 0.
# The name for the Security Officer (SO) user. For example: "Administrator".
# NEVER put the API key under the SO user for security reasons.
name: "Administrator"
iamauth:
<<: *defaultiamcredential
1: # The index of the normal user MUST be 1.
# The name for the normal user. For example: "Normal user".
# NEVER put the API key under the normal user for security reasons.
name: "Normal user"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "f00db2f1-4421-4032-a505-465bedfa845b".
# 'tokenspaceID' under the normal user is to identify the private keystore.
tokenspaceID: "f00db2f1-4421-4032-a505-465bedfa845b"
iamauth:
<<: *defaultiamcredential
2: # The index of the anonymous user MUST be 2.
# The name for the anonymous user. For example: "Anonymous".
name: "Anonymous"
# The Space ID is a 128-bit UUID and can be chosen freely.
# The UUID can be generated by third-party tools, such as 'https://www.uuidgenerator.net/'.
# For example: "ca22be26-b798-4fdf-8c83-3e3a492dc215".
# 'tokenspaceID' under the anonymous user is to identify the public keystore.
tokenspaceID: "ca22be26-b798-4fdf-8c83-3e3a492dc215"
iamauth:
<<: *defaultiamcredential
# This API key for the Anonymous user must be provided.
# It will overide the 'apikey' in the previous defaultcredentials.iamauth.apikey field
apikey: "<your_api_key>"
logging:
# Set the logging level.
# The supported levels, in an increasing order of verboseness, are:
# 'panic', 'fatal', 'error', 'warning'/'warn', 'info', 'debug', 'trace'.
# The Default value is 'debug'.
loglevel: debug
# The full path of your logging file.
# For example: /tmp/grep11client.log
logpath: /tmp/grep11client.log
3. Installa la libreria Hyper Protect Crypto Services PKCS #11
-
Copiare il file di configurazione creato
grep11client.yaml
e la #11 libreriapkcs11-grep11-<platform>.so.<version>
PKCS nella cartella principale nel contenitore Oracle Database. -
Immetti i seguenti comandi come
root
per installare la libreria Hyper Protect Crypto Services PKCS #11 nella tua configurazione Oracle Database.mkdir /etc/ep11client chmod a+rx /etc/ep11client/ cp grep11client.yaml /etc/ep11client/grep11client.yaml chmod a+r /etc/ep11client/grep11client.yaml mkdir -p /opt/oracle/extapi/64/hsm/ibm cp pkcs11-grep11.so.1.1.3 /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so chown -R oracle:oinstall /opt/oracle/extapi touch /tmp/grep11client.log chmod a+rw /tmp/grep11client.log chown oracle:oinstall /tmp/grep11client.log
La directory /opt/oracle/extapi/64/hsm
e le sottodirectory possono contenere solo un file libreria. Rimuovere tutti gli altri file di libreria presenti in tale directory e nei sottoindirizzari.
4. Controllare l'impostazione della libreria
-
Installare il programma di utilità della riga comandi OpenSC (pkcs11-tool) con il seguente comando:
sudo yum install opensc
-
Eseguire il seguente comando come
root
per controllare l'impostazione della libreria:pkcs11-tool --module=/opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so -I
Questo comando stampa le informazioni sul produttore e sulla libreria, ad esempio:
Cryptoki version 2.40 Manufacturer IBM ... Library GREP11 PKCS11 client ...
5. Inizializza la libreria Hyper Protect Crypto Services PKCS #11
-
Immettere il seguente comando da una riga comandi sul sistema host:
docker exec -it oradb bash
Questa shell può essere utilizzata per eseguire i comandi come utente
oracle
per le fasi successive. -
Per inizializzare un token, immetti i seguenti comandi e sostituisci
<your_api_key>
con la chiave API che hai creato.pkcs11-tool --module /opt/oracle/extapi/64/hsm/ibm/pkcs11-grep11.so --init-token --label dbtoken --so-pin=<your_api_key>
Questo comando stampa il seguente messaggio di stato, ad esempio:
Using slot 0 with a present token (0x0) Token successfully initialized
Configurare Oracle Database TDE e codificare i propri dati
Ora assuma il ruolo di amministratore del database.
-
Aggiornare il file 'sqlnet.ora' nella directory '$ORACLE_HOME/network/admin' aggiungendo la riga:
encryption_wallet_location=(source=(method=hsm))
Per eseguire questa operazione, è possibile, ad esempio, eseguire il seguente comando:
echo "encryption_wallet_location=(source=(method=hsm))" >> $ORACLE_HOME/network/admin/sqlnet.ora
Assicurarsi che il file 'sqlnet.ora' non contenga un'altra impostazione per
encryption_wallet_location
. -
Aprire il keystore con il seguente comando. Sostituisci
<your_api_key>
con la chiave API che hai creato:export ORACLE_SID=<your SID, e.g. ORCLCDB> sqlplus / as sysdba SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<your_api_key>" CONTAINER=ALL;
-
Creare le chiavi principali con il seguente comando. Sostituisci
<your_api_key>
con la chiave API che hai creato:SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<your_api_key>" WITH BACKUP CONTAINER=ALL;
-
creare un tablespace codificato con il seguente comando:
SQL> CREATE TABLESPACE encrypted_ts DATAFILE 'tbs1_data.dbf' SIZE 128K AUTOEXTEND ON NEXT 64K ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
-
Per verificare l'impostazione, è possibile creare una tabella nel tablespace codificato e inserire alcuni dati di verifica:
SQL> CREATE TABLE tde_ts_test (id NUMBER(10), data VARCHAR2(50)) TABLESPACE encrypted_ts; SQL> INSERT INTO tde_ts_test VALUES (1, 'This is a secret!'); SQL> COMMIT; SQL> SELECT * FROM TDE_TS_TEST;
-
È anche possibile creare una tabella con una colonna crittografata e inserire alcuni dati di test:
SQL> CREATE USER C##test IDENTIFIED BY test; SQL> GRANT UNLIMITED TABLESPACE TO C##test; SQL> CREATE TABLE C##test.tde_test (id NUMBER(10), data VARCHAR2(50) ENCRYPT); SQL> INSERT INTO C##test.tde_test VALUES (1, 'This is also a secret!'); SQL> COMMIT; SQL> SELECT * FROM C##test.tde_test; # Verify encrypted tablespace and encrypted column SQL> SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES; SQL> SELECT * FROM dba_encrypted_columns ;
Passi successivi
I tuoi dati sensibili sono ora archiviati in modo sicuro in tabelle e colonne crittografate. E la chiave di crittografia master TDE viene conservata in Hyper Protect Crypto Services in modo altamente sicuro e a prova di manomissione.
In questa esercitazione, hai imparato come configurare Oracle Database TDE con Hyper Protect Crypto Services.
- Ulteriori informazioni su PKCS #11.
- Ulteriori informazioni sull'API PKCS #11.
- Avvia l'utilizzo dell'API PKCS #11.