Bonnes pratiques
Ce guide fournit des bonnes pratiques et des recommandations pour mettre en œuvre et exploiter Oracle TDE avec DuoKey KMS dans des environnements de production.
Bonnes pratiques de sécurité
Séparation des tâches
Mettez en œuvre une séparation des tâches entre les administrateurs de bases de données et les administrateurs de sécurité pour renforcer la sécurité.
Administrateurs de bases de données (DBA) :
- Gèrent les opérations de la base de données
- Créent et modifient les objets de la base de données
- Effectuent les sauvegardes et les restaurations
- Surveillent les performances de la base de données
Administrateurs de sécurité :
- Gèrent les clés de chiffrement dans DuoKey KMS
- Contrôlent l'accès aux opérations de gestion des clés
- Surveillent les journaux d'audit des opérations sur les clés
- Appliquent les politiques de rotation des clés
Mise en œuvre :
-- Grant SYSKM privilege to security administrators
GRANT SYSKM TO security_admin IDENTIFIED BY password;
-- Security admin connects as SYSKM
sqlplus security_admin/password AS SYSKM
-- Perform key management operations
ADMINISTER KEY MANAGEMENT SET KEY
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
Gestion sécurisée de la configuration
Protégez les fichiers de configuration PKCS#11 contenant les identifiants DuoKey KMS :
# Strict permissions on pkcs11.toml
chmod 600 /etc/duokey/pkcs11.toml
chown oracle:oinstall /etc/duokey/pkcs11.toml
# Verify permissions
ls -la /etc/duokey/pkcs11.toml
# Expected: -rw------- oracle oinstall
Ne stockez jamais les identifiants dans :
- Les systèmes de contrôle de version
- Les sauvegardes non chiffrées
- Les emplacements réseau partagés
- Les e-mails ou la documentation
Calendrier de rotation des clés
Établissez et maintenez un calendrier régulier de rotation des clés :
Fréquences recommandées :
| Environnement | Fréquence de rotation | Exigence de conformité |
|---|---|---|
| Production | 6 à 12 mois | PCI DSS, SOC 2 |
| Haute sécurité | 3 à 6 mois | HIPAA, FedRAMP |
| Développement | Annuelle | Politique interne |
| Test | Au besoin | S.O. |
Exemple d'automatisation :
#!/bin/bash
# rotate_tde_keys.sh
# Set variables
ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1
ORACLE_SID=PRODDB
DKE_APP_PASSWORD="your-app-password"
# Connect and rotate key
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
ADMINISTER KEY MANAGEMENT SET KEY
FORCE KEYSTORE
IDENTIFIED BY "${DKE_APP_PASSWORD}"
CONTAINER = ALL;
EXIT;
EOF
# Verify rotation
$ORACLE_HOME/bin/sqlplus / as sysdba <<EOF
SELECT key_id, creation_time
FROM v\$encryption_keys
ORDER BY creation_time DESC
FETCH FIRST 1 ROWS ONLY;
EXIT;
EOF
Journalisation d'audit
Activez une journalisation d'audit complète :
Audit DuoKey KMS :
- Surveillez toutes les opérations sur les clés dans DuoKey Cockpit
- Exportez les journaux d'audit vers les systèmes SIEM
- Configurez des alertes pour les activités suspectes
- Conservez les journaux conformément aux exigences de conformité
Audit Oracle Database :
-- Enable unified auditing for TDE operations
CREATE AUDIT POLICY tde_audit_policy
ACTIONS
ADMINISTER KEY MANAGEMENT;
AUDIT POLICY tde_audit_policy;
-- Query TDE-related audit records
SELECT event_timestamp, dbusername, action_name, return_code
FROM unified_audit_trail
WHERE action_name LIKE '%KEY MANAGEMENT%'
ORDER BY event_timestamp DESC;
Sécurité réseau
Sécurisez les communications entre Oracle Database et DuoKey KMS :
Configuration TLS :
Le fournisseur se connecte toujours à DuoKey KMS via HTTPS. Définissez le point de terminaison dans le bloc [http_config] du fichier pkcs11.toml et laissez la vérification du certificat activée :
# In pkcs11.toml
[http_config]
server_url = "https://duokey-instance.com"
access_token = "<access_guid>"
verify_tls = true
Règles de pare-feu :
# Allow outbound HTTPS to DuoKey KMS
iptables -A OUTPUT -p tcp --dport 443 \
-d duokey-instance.com -j ACCEPT
# Block other outbound traffic (if applicable)
iptables -A OUTPUT -p tcp --dport 443 -j DROP
Segmentation réseau :
- Placez les serveurs de base de données dans un VLAN sécurisé
- Restreignez l'accès aux points de terminaison DuoKey KMS
- Utilisez un VPN ou des connexions réseau privées
- Mettez en œuvre une surveillance réseau
Bonnes pratiques de performance
Choisir le type de chiffrement approprié
Sélectionnez le bon type de chiffrement en fonction de votre cas d'usage :
Chiffrement de tablespace (recommandé)
Quand l'utiliser :
- La plupart des scénarios
- Chiffrement de l'ensemble de la base de données requis
- Charges de travail OLTP avec mises à jour fréquentes
- Meilleures performances que le chiffrement de colonne
Exemple :
-- Create encrypted tablespace
CREATE TABLESPACE sensitive_data_ts
DATAFILE '/u01/app/oracle/oradata/ORCL/sensitive_ts01.dbf'
SIZE 1G AUTOEXTEND ON
ENCRYPTION USING 'AES256'
DEFAULT STORAGE(ENCRYPT);
-- Move existing table to encrypted tablespace
ALTER TABLE hr.employees MOVE TABLESPACE sensitive_data_ts;
Impact sur les performances : 2 à 5 % de surcharge
Chiffrement de colonne
Quand l'utiliser :
- Peu de colonnes spécifiques contiennent des données sensibles
- Les colonnes sont identifiées à l'avance
- Une surcharge de stockage minimale est requise
Exemple :
-- Encrypt specific columns
CREATE TABLE employees (
employee_id NUMBER,
first_name VARCHAR2(50),
last_name VARCHAR2(50),
ssn VARCHAR2(11) ENCRYPT USING 'AES256' NO SALT,
salary NUMBER(10,2) ENCRYPT USING 'AES256' NO SALT
);
Impact sur les performances : 5 à 15 % de surcharge pour les colonnes chiffrées
Utilisez NO SALT pour les colonnes utilisées dans les clauses WHERE ou les jointures afin de permettre l'utilisation des index. SALT offre une sécurité supplémentaire, mais empêche les balayages d'intervalles d'index (index range scans).
Accélération matérielle
Tirez parti de l'accélération matérielle pour de meilleures performances :
# Verify AES-NI support
grep -m 1 -o aes /proc/cpuinfo
# Expected output: aes
# Check if Oracle is using AES-NI
# In Oracle 12.2+, AES-NI is automatically used if available
Avantages en termes de performances :
- Chiffrement/déchiffrement 50 à 70 % plus rapide
- Utilisation réduite du processeur
- Meilleure évolutivité
Optimisation du buffer cache
Pour les tables chiffrées fortement sollicitées :
-- Enable KEEP buffer pool for frequently accessed encrypted tables
ALTER SYSTEM SET DB_KEEP_CACHE_SIZE=2G SCOPE=BOTH;
-- Assign table to KEEP pool
ALTER TABLE hr.employees STORAGE (BUFFER_POOL KEEP);
Avantages :
- Réduit les E/S disque pour les données chiffrées
- Minimise les opérations de déchiffrement
- Améliore les performances des requêtes
Stratégie d'indexation
Optimisez les index pour les colonnes chiffrées :
Pour le chiffrement de colonne avec SALT :
-- Index range scans don't work with SALT
-- Use NO SALT for searchable columns
ALTER TABLE employees MODIFY (ssn ENCRYPT NO SALT);
-- Create index
CREATE INDEX idx_emp_ssn ON employees(ssn);
Pour le chiffrement de tablespace :
-- Indexes work normally
CREATE INDEX idx_emp_name ON employees(last_name, first_name);
Opérations parallèles
Activez le parallélisme pour les grandes tables chiffrées :
-- Set parallel degree for table
ALTER TABLE large_encrypted_table PARALLEL 4;
-- Use parallel hints in queries
SELECT /*+ PARALLEL(large_encrypted_table, 4) */
* FROM large_encrypted_table;
Réglage du délai de connexion
Sur les réseaux à latence élevée, laissez plus de temps à chaque requête vers DuoKey KMS en augmentant timeout_secs dans le bloc [http_config] du fichier pkcs11.toml :
# In pkcs11.toml
[http_config]
server_url = "https://duokey-instance.com"
access_token = "<access_guid>"
timeout_secs = 30
verify_tls = true
Le battement (heartbeat) lui-même relève d'un comportement d'Oracle : le processus d'arrière-plan Gen0 de la base de données interroge périodiquement le keystore externe. Les paramètres ci-dessous ajustent la tolérance d'Oracle vis-à-vis de ce battement, indépendamment du fournisseur.
Paramètres Oracle Database (12.1+) :
-- Increase heartbeat tolerance
ALTER SYSTEM SET "_heartbeat_period_multiplier"=20 SCOPE=SPFILE;
ALTER SYSTEM SET "_heartbeat_config"=AUTOCONNECT SCOPE=SPFILE;
-- Restart required
SHUTDOWN IMMEDIATE;
STARTUP;
Calcul :
- Battement par défaut : 3 secondes
- Multiplicateur : 20
- Tolérance totale : 20 × 3 + 3 = 63 secondes
Pour Oracle 11g R2 :
-- Set event for heartbeat tolerance
ALTER SYSTEM SET EVENT=
'28420 trace name context forever, level 10:
28421 trace name context forever, level 3'
COMMENT='HSM heartbeat timeout and reconnect'
SCOPE=SPFILE;
-- Restart required
SHUTDOWN IMMEDIATE;
STARTUP;
Bonnes pratiques opérationnelles
Documentation
Maintenez une documentation complète :
Documentation de configuration :
- Points de terminaison DuoKey KMS et emplacements des identifiants
- Versions et emplacements de la bibliothèque PKCS#11
- Configurations du wallet de la base de données
- Calendriers de rotation des clés
- Procédures de sauvegarde et de récupération
Exemple de runbook :
# Oracle TDE with DuoKey KMS Runbook
## Configuration
- DuoKey KMS: https://duokey-prod.company.com
- PKCS#11 Version: 4.34.2503
- PKCS#11 Config: /etc/duokey/pkcs11.toml
- Wallet Location: $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde
## Key Rotation Procedure
1. Verify DuoKey KMS connectivity
2. Execute key rotation SQL
3. Verify in DuoKey audit logs
4. Schedule database restart
5. Document rotation in CMDB
## Emergency Contacts
Tests et validation
Établissez des procédures de test régulières :
Tests en pré-production :
#!/bin/bash
# test_tde_operations.sh
echo "Testing TDE Operations..."
# Test 1: Connectivity
echo "1. Testing DuoKey KMS connectivity..."
curl -v https://duokey-instance.com
# Test 2: Wallet status
echo "2. Checking wallet status..."
sqlplus -s / as sysdba <<EOF
SET PAGESIZE 0 FEEDBACK OFF VERIFY OFF HEADING OFF ECHO OFF
SELECT status FROM v\$encryption_wallet;
EXIT;
EOF
# Test 3: Create test encrypted table
echo "3. Testing encryption operations..."
sqlplus -s / as sysdba <<EOF
CREATE TABLESPACE test_tde_ts
DATAFILE '/tmp/test_tde.dbf' SIZE 10M
ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
DROP TABLESPACE test_tde_ts INCLUDING CONTENTS AND DATAFILES;
EXIT;
EOF
echo "TDE testing complete."
Liste de contrôle de validation :
- Le wallet s'ouvre automatiquement au redémarrage
- Les données chiffrées sont accessibles
- La rotation des clés réussit
- La sauvegarde et la restauration fonctionnent correctement
- Les performances répondent aux exigences
- Les journaux d'audit sont générés
Surveillance
Mettez en œuvre une surveillance complète :
Indicateurs clés à surveiller :
-- Wallet status
SELECT wrl_type, status, wallet_type
FROM v$encryption_wallet;
-- Encrypted tablespaces
SELECT tablespace_name, encrypted, bytes/1024/1024 as mb
FROM dba_tablespaces
WHERE encrypted = 'YES';
-- Encrypted columns
SELECT owner, table_name, COUNT(*) as encrypted_columns
FROM dba_encrypted_columns
GROUP BY owner, table_name;
-- Key usage
SELECT key_id, activation_time,
ROUND((SYSDATE - activation_time)) as days_active
FROM v$encryption_keys
ORDER BY activation_time DESC;
Surveillance des journaux PKCS#11 :
# Monitor for errors
tail -f /var/log/dke-pkcs11/*.log | grep -i error
# Monitor for connection issues
tail -f /var/log/dke-pkcs11/*.log | grep -i "connection\|timeout"
Règles d'alerte :
- Wallet non ouvert après le redémarrage
- Échecs de connexion à DuoKey KMS
- Échecs de rotation des clés
- Délais d'attente de battement dépassés
- Erreurs de la bibliothèque PKCS#11
Stratégie de sauvegarde
Mettez en œuvre une stratégie de sauvegarde complète :
Quoi sauvegarder :
- Base de données (RMAN) :
# Encrypted tablespaces are backed up encrypted
rman target / <<EOF
BACKUP DATABASE PLUS ARCHIVELOG;
DELETE NOPROMPT OBSOLETE;
EXIT;
EOF
- Fichiers du wallet :
# Backup wallet directory
tar -czf wallet_backup_$(date +%Y%m%d).tar.gz \
$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
# Store in secure location
scp wallet_backup_*.tar.gz backup_server:/secure/backups/
- Configuration PKCS#11 :
# Backup configuration
cp /etc/duokey/pkcs11.toml \
/secure/backups/pkcs11.toml.$(date +%Y%m%d)
- Documentation :
- Identifiants de l'application DuoKey (dans un Vault sécurisé)
- Documentation de configuration
- Runbooks et procédures
Fréquence de sauvegarde :
- Base de données : quotidienne (ou selon les exigences RPO)
- Fichiers du wallet : après toute modification
- Configuration PKCS#11 : après toute modification
- Documentation : après toute mise à jour
Tests de restauration :
# Quarterly restore test procedure
1. Restore database to test environment
2. Copy wallet files
3. Configure PKCS#11 connection
4. Open database and verify data access
5. Document results
Reprise après sinistre
Planifiez les scénarios de reprise après sinistre :
Scénario 1 : défaillance du serveur de base de données
Étapes de récupération :
- Provisionnez un nouveau serveur de base de données
- Installez le logiciel Oracle Database
- Installez la bibliothèque DuoKey PKCS#11
- Copiez les fichiers du wallet depuis la sauvegarde
- Copiez pkcs11.toml depuis la sauvegarde
- Restaurez la base de données depuis la sauvegarde RMAN
- Vérifiez que le wallet s'ouvre et que les données sont accessibles
Scénario 2 : DuoKey KMS indisponible
Atténuation :
- Utilisez un wallet à ouverture automatique (permet à la base de données de démarrer)
- Surveillez les journaux PKCS#11 pour la reconnexion
- Contactez le support DuoKey
- Envisagez une instance DuoKey secondaire pour la haute disponibilité
Objectifs RTO/RPO :
- RTO (objectif de temps de reprise) : 4 heures
- RPO (objectif de point de reprise) : 15 minutes (envoi des journaux d'archives)
Bonnes pratiques de haute disponibilité
Configuration Oracle RAC
Pour les environnements Oracle RAC :
Installation :
# Install PKCS#11 library on all nodes
for node in node1 node2 node3; do
ssh $node "mkdir -p /opt/oracle/extapi/64/hsm/DuoKey/1.0"
scp libdke_pkcs11.so $node:/opt/oracle/extapi/64/hsm/DuoKey/1.0/
done
# Distribute wallet files
for node in node2 node3; do
scp $ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/* \
$node:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
done
# Distribute PKCS#11 configuration
for node in node1 node2 node3; do
scp /etc/duokey/pkcs11.toml $node:/etc/duokey/
done
Configuration :
-- Set parameters for all instances
ALTER SYSTEM SET WALLET_ROOT='$ORACLE_BASE/admin/$ORACLE_SID/wallet'
SCOPE=SPFILE SID='*';
ALTER SYSTEM SET TDE_CONFIGURATION='KEYSTORE_CONFIGURATION=HSM|FILE'
SCOPE=BOTH SID='*';
Bonnes pratiques :
- Utilisez un stockage partagé pour les fichiers du wallet (si possible)
- Synchronisez les fichiers du wallet entre les nœuds
- Surveillez chaque nœud indépendamment
- Testez les scénarios de basculement
Configuration Data Guard
Pour les environnements Data Guard :
Configuration de la base de données de secours :
# Copy configuration from primary
scp primary:/etc/duokey/pkcs11.toml standby:/etc/duokey/
scp primary:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/* \
standby:$ORACLE_BASE/admin/$ORACLE_SID/wallet/tde/
Vérification :
-- On standby database
SELECT * FROM V$ENCRYPTION_WALLET;
-- Expected: HSM wallet open with auto-login
Tests de basculement :
-- 1. Switchover primary to standby
DGMGRL> SWITCHOVER TO standby_db;
-- 2. Verify wallet opens automatically
SELECT * FROM V$ENCRYPTION_WALLET;
-- 3. Verify encrypted data accessible
SELECT * FROM encrypted_table FETCH FIRST 1 ROWS ONLY;
Bonnes pratiques de conformité
Conformité PCI DSS
Pour la conformité à la norme de sécurité de l'industrie des cartes de paiement :
Exigences :
- Chiffrer les données des titulaires de cartes au repos
- Effectuer une rotation annuelle des clés de chiffrement
- Restreindre l'accès aux clés
- Maintenir une piste d'audit
- Tester régulièrement le chiffrement
Mise en œuvre :
-- Encrypt credit card data
CREATE TABLE payments (
payment_id NUMBER PRIMARY KEY,
card_number VARCHAR2(19) ENCRYPT USING 'AES256' NO SALT,
cvv VARCHAR2(4) ENCRYPT USING 'AES256',
expiry_date VARCHAR2(5) ENCRYPT USING 'AES256'
) TABLESPACE secure_payments_ts;
Conformité HIPAA
Pour les informations médicales protégées :
Exigences :
- Chiffrer les ePHI au repos
- Contrôles d'accès et pistes d'audit
- Accords avec les partenaires commerciaux
- Évaluations régulières des risques
Mise en œuvre :
-- Encrypt patient data
CREATE TABLE patient_records (
patient_id NUMBER PRIMARY KEY,
ssn VARCHAR2(11) ENCRYPT USING 'AES256' NO SALT,
medical_history CLOB ENCRYPT USING 'AES256',
diagnosis VARCHAR2(500) ENCRYPT USING 'AES256'
) TABLESPACE phi_tablespace;
Conformité RGPD
Pour la protection des données de l'UE :
Exigences :
- Chiffrer les données à caractère personnel
- Minimisation des données
- Droit à l'effacement (crypto-shredding)
- Notification des violations
Crypto-shredding :
-- Create separate key per tenant/user
-- Deletion = key destruction in DuoKey KMS
-- Example: Tenant-specific encryption
CREATE TABLESPACE tenant_123_ts
ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);
-- To "delete" data: rotate/destroy the key
-- Data becomes permanently unreadable
Bonnes pratiques de dépannage
Problèmes courants et solutions
Problème 1 : le wallet ne s'ouvre pas après le redémarrage
-- Check wallet status
SELECT * FROM V$ENCRYPTION_WALLET;
-- If closed, open manually
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
IDENTIFIED BY "<DKE_APP_PASSWORD>"
CONTAINER = ALL;
Problème 2 : échec de la connexion à DuoKey KMS
# Test connectivity
curl -v https://duokey-instance.com
# Check PKCS#11 logs
tail -100 /var/log/dke-pkcs11/*.log
# Verify configuration
cat /etc/duokey/pkcs11.toml
Problème 3 : dégradation des performances
-- Check for full table scans on encrypted tables
SELECT * FROM v$sql_plan
WHERE operation = 'TABLE ACCESS'
AND options = 'FULL'
AND object_name IN (
SELECT table_name FROM dba_encrypted_columns
);
-- Consider adding indexes or using KEEP buffer pool
Escalade vers le support
Quand contacter le support :
- Impossible de se connecter à DuoKey KMS
- Erreurs de la bibliothèque PKCS#11
- Échecs de rotation des clés
- Fermetures inattendues du wallet
- Problèmes de performance
Informations à fournir :
- Version et plateforme Oracle
- Version de la bibliothèque PKCS#11
- Messages d'erreur et journaux
- Configuration pkcs11.toml (masquez les identifiants)
- Extraits du journal d'alertes de la base de données
Liste de contrôle récapitulative
Mise en œuvre initiale
- DuoKey KMS configuré avec un groupe et une application
- Bibliothèque PKCS#11 installée et configurée
- Clé maître TDE créée dans DuoKey KMS
- Wallet à ouverture automatique configuré
- Chiffrement de test fonctionnant correctement
Sécurité
- Séparation des tâches mise en œuvre
- Configuration PKCS#11 sécurisée (chmod 600)
- Journalisation d'audit activée et surveillée
- Calendrier de rotation des clés défini
- Sécurité réseau configurée
Performance
- Chiffrement de tablespace choisi (le cas échéant)
- Accélération matérielle activée
- Index optimisés pour les colonnes chiffrées
- Buffer cache configuré de manière appropriée
- Performances testées et validées
Opérations
- Documentation complétée
- Runbooks créés
- Surveillance configurée
- Stratégie de sauvegarde mise en œuvre
- Plan de reprise après sinistre documenté
Conformité
- Exigences réglementaires identifiées
- Périmètre de chiffrement défini
- Piste d'audit configurée
- Validation de la conformité effectuée
- Revues annuelles planifiées
Ressources supplémentaires
Assistance
Pour obtenir de l'aide concernant les bonnes pratiques d'Oracle TDE :
- E-mail : [email protected]
- Documentation : Support DuoKey
- Services professionnels : [email protected]