Sécurisation des environnements colocatifs

A partir de la version 20c, l’architecture colocative deviendra la norme – l’architecture historique étant dépréciée.
Cette architecture n’a pas encore été largement adoptée, et pour cause, elle nécessite l’acquisition d’une option payante : Multitenant.
Un mode gratuit est néanmoins possible en créant un conteneur (CDB) avec une seule Pluggable Database (PDB) : Single Tenant.

Pour populariser cette option, Oracle permet, à partir de la version 19c, de créer jusqu’à 3 PDBs dans une base de données de conteneurs sans surcoût.

Une bonne occasion pour présenter une nouvelle fonctionnalité permettant de sécuriser des environnements consolidés (notamment avec des PDB) : Database Service Firewall.

Pour rappel :

Le nombre maximum de PDB par Edition en 12c :

La version 12cR2 apportait les fonctionnalités suivantes :

  • Clonage à chaud d’une Pluggable Database,
  • Simplification des Plug/Unplug de PDB,
  • Création d’Application Containers permettant de regrouper logiquement des PDB,
  • Proxy PDBs : permettant le référencement et l’accès de PDB situés dans d’autres CDB,
  • PDB Lockdown Profile : profil de ressources que l’on associera à un ensemble de PDB,
  • Gestion améliorée de la mémoire permettant de définir la mémoire au niveau PDB.

La version 18c apportait les fonctionnalités suivantes :

  • CDB Fleet permettant de gérer un groupe de CDB comme une seule. Deux rôles existent pour définir les membres de ce groupe (LEAD ou MEMBER). Le « leader » permet de gérer toutes les PDB (qui doivent être unique dans la flotte) des autres CDB.
  • PDB Snapshot Carousel : les clichés de PDB et un fichier d’archive .pdb permettent de restaurer des PDB anciennes sans utiliser la technologie de FLASHBACK. Un « Carousel » est un référentiel pour les copies périodiques d’un PDB. Cela permet par exemple d’effectuer un cliché tous les jours, conservé sur 7 jours glissants (MAX_PDB_SNAPSHOTS inférieur à 8).
  • En 12cR2, il était possible de définir une stratégie de partitionnement dans plusieurs PDB selon les valeurs d’une colonne. En 18c, la propriété CONTAINER_MAP est maintenant dynamique.
  • En 12c, il était possible de créer des clones réguliers d’une PDB (Refreshable Cloned PDB). En 18c, il est possible d’échanger le rôle entre la base principale et un clone.
  • Clonage d’une Pluggable Database avec DBCA.

La version 19c apporte les fonctionnalités suivantes :

  • Clonage d’une Pluggable Database avec DBCA en mode silencieux,
  • Relocalisation d’une Pluggable Database avec DBCA en mode silencieux,
  • Duplication d’une Pluggable Database avec DBCA en mode silencieux.

 

Database Service Firewall se configure à deux niveaux :

  • Sur le module d’écoute, en positionnant l’option FIREWALL=ON,
  • Dans la base, en associant des listes de contrôle d’accès (ACL) aux services : Service-Level Access Control Lists (ACLs).

La configuration du module d’écoute s’effectue avec la commande suivante :

   $ srvctl modify listener -endpoints TCP:1521:FIREWALL=ON

ou (sans la Grid Infrastructure) en modifiant le fichier listener.ora :

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = )(FIREWALL=ON))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

Dans les deux cas, il est nécessaire de positionner le paramètre « LOCAL_REGISTRATION_ADDRESS_LISTENER = ON ».

 

Pour rappel, la création d’un service de deux manières :

  • Avec une Grid Infrastructure (Oracle Restart ou Oracle Clusterware) : srvctl add service
  • Sans Grid Infrastructure : DBMS_SERVICE.CREATE_SERVICE

Ensuite, la création des ACL s’effectue de la manière suivante :

BEGIN
   DBSFWUSER.DBMS_SFW_ACL_ADMIN.IP_ADD_ACE(p_service_name => '', p_host => '');
   DBSFWUSER.DBMS_SFW_ACL_ADMIN.COMMIT_ACL;
END;
/

Le paramètre P_HOST de la procédure IP_ADD_ACE permet de définir l’hôte qui est autorisé à accéder aux services de base de données. Cette valeur peut être un nom d’hôte, une adresse IPv4 ou une adresse IPv6. Les caractères génériques « * » pour les formats IPv4 et CIDR sont également autorisés.

La procédure COMMIT_ACL du package DBMS_SFW_ACL_ADMIN envoie la configuration à tous les modules d’écoute locaux.

La procédure IP_REMOVE_ACE du package DBMS_SFW_ACL_ADMIN permet d’annuler la configuration.

 

Dans le cas de l’architecture colocative, il est possible de positionner ces ACL au niveau de chaque PDB :

BEGIN
   DBSFWUSER.DBMS_SFW_ACL_ADMIN.IP_ADD_PDB_ACE (p_pdb_name => '', p_host => '');
   DBSFWUSER.DBMS_SFW_ACL_ADMIN.COMMIT_ACL;
END;
/

Pour rappel, il est également possible de démarrer une PDB en créant un service associé (srvctl add service … -pdb ) et ainsi de démarrer une PDB sur un nœud et d’ouvrir cette PDB sur un autre nœud en cas d’arrêt planifié ou d’incident.

L’association des services et des PDB permet ainsi de contrôler la disponibilité, l’évolutivité et la sécurité des applications.