Sécurisation du service de volumes par blocs

Cette rubrique fournit des informations de sécurité et des recommandations relatives aux volumes par blocs.

Le service Volumes par blocs vous permet de provisionner et de gérer dynamiquement des volumes de stockage par blocs . Vous pouvez créer, attacher, connecter et déplacer des volumes selon vos besoins en matière de stockage et d'applications, de stockage et de performance. Une fois un volume attaché et connecté à une instance, vous pouvez l'utiliser comme un disque dur classique. Vous pouvez également déconnecter un volume et l'attacher à une autre instance sans perte de données.

Responsabilités en matière de sécurité

Pour utiliser le service de volumes par blocs en toute sécurité, découvrez vos responsabilités en matière de sécurité et de conformité.

En général, Oracle assure la sécurité de l'infrastructure et des opérations en nuage, comme les contrôles de l'accès des opérateurs au nuage et l'application de correctifs de sécurité à l'infrastructure. Vous êtes responsable de la configuration sécurisée de vos ressources en nuage. La sécurité dans le nuage est une responsabilité partagée entre vous et Oracle.

Oracle est responsable des exigences de sécurité suivantes :

  • Physical Security : :Oracle est responsable de la protection de l'infrastructure globale qui exécute tous les services offerts dans Oracle Cloud Infrastructure. Cette infrastructure se compose du matériel, du logiciel, du réseau et des installations qui exécutent les services Oracle Cloud Infrastructure.

Vos responsabilités en matière de sécurité sont décrites dans cette page, qui comprend les domaines suivants :

  • Contrôle de l'accès : Limitez le plus possible les privilèges. Les utilisateurs ne doivent disposer que de l'accès nécessaire pour effectuer leur travail.
  • Chiffrement et confidentialité : Utilisez des clés de chiffrement et des clés secrètes pour protéger vos données et vous connecter à des ressources sécurisées. Faites pivoter ces clés régulièrement.

Tâches de sécurité initiales

Utilisez cette liste de vérification pour identifier les tâches que vous effectuez pour sécuriser le service de volume par blocs d'une nouvelle location Oracle Cloud Infrastructure.

Tâche Informations supplémentaires
Utiliser les politiques GIA pour accorder l'accès aux utilisateurs et aux ressources Politiques GIA
Chiffrer les ressources à l'aide d'une clé personnalisée Chiffrement des données
Activer et configurer le service de protection d'infrastructure en nuage (facultatif) Service infonuagique
Créer une zone de sécurité (facultatif) Zones de sécurité

Tâches de sécurité régulières

Après avoir commencé à utiliser le service de volume par blocs, utilisez cette liste de vérification pour identifier les tâches de sécurité qu'il est recommandé d'effectuer régulièrement.

Tâche Informations supplémentaires
Effectuer la rotation des clés de chiffrement Chiffrement des données
Répondre aux problèmes détectés dans le service de protection d'infrastructure en nuage Service infonuagique
Effectuer des sauvegardes périodiques Durabilité des données
Vérifier la sécurité Vérification

Politiques GIA

Utilisez des politiques pour limiter l'accès au service de volumes par blocs.

Une politique indique qui peut accéder aux ressources Oracle Cloud Infrastructure et comment. Pour plus d'informations, voir Fonctionnement des politiques.

Affectez à un groupe les privilèges minimaux nécessaires à l'exercice de ses responsabilités. Chaque politique comporte un verbe qui décrit les actions que le groupe est autorisé à effectuer. De l'accès le plus restreint à l'accès le plus élevé, les verbes disponibles sont les suivants : inspect, read, use et manage.

Nous vous recommandons d'accorder des autorisations DELETE à un jeu minimal d'utilisateurs et de groupes IAM. Cette pratique minimise la perte de données résultant de suppressions accidentelles par des utilisateurs autorisés ou d'acteurs malveillants. N'accordez les autorisations DELETE qu'aux administrateurs de location et de compartiment.

Oracle Cloud Infrastructure prend en charge deux types de volume : volumes par blocs et volumes de démarrage. Les volumes par blocs permettent d'étendre la capacité de stockage des instances de manière dynamique. Un volume de démarrage contient l'image utilisée pour démarrer l'instance de calcul. Le service GIA regroupe la famille des types de ressource de volume connexes en un type de ressource combiné appelé volume-family.

Affectez aux utilisateurs et groupes GIA un accès avec privilège minimal aux types de ressource dans volume-family. Les types de ressource dans volume-family sont volumes, volume-attachments et volume-backups.

  • Les ressources volumes sont des périphériques de volume par blocs détachables qui permettent une expansion dynamique de la capacité de stockage d'une instance ou qui contiennent l'image de démarrage de l'instance.
  • Les ressources volume-attachments sont des attachements entre des volumes et des instances.
  • Les ressources volume-backups sont des copies de volumes à un instant donné qui peuvent être utilisées pour créer ou récupérer des volumes par blocs.
Empêcher la suppression de volumes

L'exemple de politique suivant permet de regrouper les utilisateurs VolumeUsers pour exécuter toutes les actions sur les volumes et les sauvegardes, sauf la suppression.

Allow group VolumeUsers to manage volumes in tenancy
 where request.permission!='VOLUME_DELETE' 
Allow group VolumeUsers to manage volume-backups in tenancy
 where request.permission!='VOLUME_BACKUP_DELETE'

Si les utilisateurs VolumeUsers ne peuvent pas détacher des volumes d'instances, vous pouvez ajouter la politique suivante à l'exemple précédent.

Allow group VolumeUsers to manage volume-attachments in tenancy
 where request.permission!='VOLUME_ATTACHMENT_DELETE'

Pour plus d'informations sur les politiques du service de volumes par blocs et pour voir d'autres exemples, voir Informations détaillées sur les services de base.

Cloud Guard

Activez le service de protection d'infrastructure en nuage et utilisez-le pour détecter les problèmes de sécurité dans le service de volumes par blocs et y répondre.

Lors de la détection d'un problème, le service de protection d'infrastructure en nuage suggère des mesures correctives. Vous pouvez également configurer le service de protection d'infrastructure en nuage pour qu'il effectue automatiquement certaines actions. Le service de protection d'infrastructure en nuage inclut les règles de détecteur suivantes pour le volume par blocs.

  • Le volume par blocs est chiffré avec une clé gérée par Oracle.
  • Le volume par blocs n'est pas attaché

Pour obtenir la liste de toutes les règles de détecteur disponibles dans le service de protection d'infrastructure en nuage, voir Informations de référence sur les recettes de détecteur.

Si vous ne l'avez pas encore fait, activez le service de protection d'infrastructure en nuage et configurez-le pour surveiller les compartiments qui contiennent vos ressources. Vous pouvez configurer des cibles du service de protection d'infrastructure en nuage pour examiner l'ensemble de votre location (compartiment racine et tous les sous-compartiments) ou pour vérifier uniquement des compartiments spécifiques. Voir Introduction au service de protection d'infrastructure en nuage.

Après avoir activé le service de protection d'infrastructure en nuage, vous pouvez voir et résoudre les problèmes de sécurité détectés. Voir Traitement des problèmes signalés.

Zones de sécurité

L'utilisation de zones de sécurité garantit que vos ressources dans le service de volumes par blocs sont conformes aux meilleures pratiques de sécurité.

Une zone de sécurité est associée à un ou plusieurs compartiments et à une recette de zone de sécurité. Lors de la création et de la mise à jour de ressources dans le compartiment d'une zone de sécurité, Oracle Cloud Infrastructure valide ces opérations en fonction de la liste des politiques de zone de sécurité dans la recette. En cas de violation d'une politique dans la recette, l'opération est refusée. Les politiques de zone de sécurité suivantes sont disponibles pour les ressources du service de volumes par blocs.

  • deny block_volume_not_in_security_​zone_attach_to_instance_​in_security_zone
  • deny block_volume_in_security_​zone_attach_to_instance_​not_in_security_zone
  • deny boot_volume_not_in_security_​zone_attach_to_instance_​in_security_zone
  • deny boot_volume_in_security_​zone_attach_to_instance_​not_in_security_zone
  • deny attached_block_volume_not_​in_security_zone_move_to_​compartment_in_security_zone
  • deny attached_boot_volume_not_in_​security_zone_move_to_​compartment_in_security_zone
  • deny block_volume_without_​vault_key
  • deny boot_volume_without_​vault_key

Pour obtenir la liste de toutes les politiques de zone de sécurité, voir Politiques de zone de sécurité.

Pour déplacer des ressources existantes vers un compartiment qui se trouve dans une zone de sécurité, les ressources doivent être conformes à toutes les politiques de zone de sécurité de la recette de la zone. De même, les ressources dans une zone de sécurité ne peuvent pas être déplacées vers un compartiment à l'extérieur de la zone de sécurité, car cela peut être moins sécurisé. Voir Gestion des zones de sécurité.

Chiffrement des données

Le service de volume par blocs chiffre toujours tous les volumes par blocs, les volumes de démarrage et les sauvegardes de volume au repos à l'aide de l'algorithme AES avec un chiffrement de 256 bits. Vous pouvez utiliser une clé de chiffrement fournie par Oracle ou une clé personnalisée dans le service de chambre forte. Vous pouvez également chiffrer vos volumes de données à l'aide d'outils comme dm-crypt, veracrypt et Bit-Locker.

Par défaut, tous les volumes et leurs sauvegardes sont chiffrés au moyen des clés de chiffrement fournies par Oracle. Chaque fois qu'un volume est cloné ou restauré à partir d'une sauvegarde, une nouvelle clé de chiffrement unique lui est affectée.

Chiffrement des volumes avec le service de chambre forte

Bien que les clés de chiffrement par défaut puissent être générées automatiquement lorsque vous créez certaines ressources Oracle Cloud Infrastructure, nous vous recommandons de créer et de gérer vos propres clés de chiffrement personnalisées dans le service de chambre forte.

Une chambre forte est une entité logique qui stocke les clés de chiffrement que vous utilisez pour protéger vos données. Selon le mode de protection, les clés sont soit stockées sur le serveur, soit stockées sur des modules de sécurité matériels hautement disponibles et durables. Nos modules de sécurité matériels répondent aux normes fédérales de traitement des informations (FIPS) 140-2 Certification de sécurité de niveau 3. Voir Gestion des chambres fortes et Gestion des clés.

Créez et faites pivoter des clés de chiffrement dans le service de chambre forte pour protéger vos ressources dans le service de volume par blocs. Voir Création d'un volume par blocs et Affectation d'une clé à un volume par blocs.

Une version de clé est affectée automatiquement à chaque clé principale de chiffrement. Lorsque vous effectuez la rotation d'une clé, le service de chambre forte génère une nouvelle version de clé. Une rotation régulière permet de limiter le volume des données chiffrées ou signées avec une version de clé. Si une clé est comprise, la rotation réduit les risques pour vos données. Voir Gestion des clés.

Nous vous recommandons d'utiliser des politiques IAM pour limiter strictement la création, la rotation et la suppression des clés de chiffrement. Voir Détails du service de chambre forte.

Chiffrement de volumes autres que des volumes racines à l'aide de dm-crypt

dm-crypt est un mécanisme de chiffrement au niveau du noyau (faisant partie du cadre Linux devicemapper) qui fournit des volumes chiffrés. Il chiffre les données transmises à partir du système de fichiers (par exemple, ext4 et NTFS) et les stocke sur un périphérique de stockage dans le format LUKS (Linux Unified Key Setup).

Les volumes chiffrés peuvent être stockés sur un disque, une partition de disque, un volume logique ou un stockage basé sur fichier créé à l'aide de périphériques de bouclage. Cryptsetup est l'utilitaire de niveau utilisateur utilisé pour gérer dm-crypt et pour chiffrer des partitions et des fichiers. dm-crypt utilise les API Linux crypto pour les sous-programmes de chiffrement.

  1. Attachez un volume de stockage par blocs à une instance (par exemple, /dev/sdb)
  2. Formatez /dev/sdb pour le chiffrement LUKS. Entrez la phrase secrète LUKS à l'invite. La phrase secrète sert à chiffrer la clé principale LUKS servant au chiffrement du volume.
    cryptsetup -y luksFormat /dev/sdb
  3. Vérifiez que le formatage LUKS a réussi.
    cryptsetup isLuks /dev/sdb && echo Success
  4. Obtenez les informations de chiffrement concernant le périphérique.
    cryptsetup luksDump /dev/sdb
  5. Obtenez l'UUID LUKS du périphérique La valeur de l'UUID permet de configurer /etc/crypttab.
    cryptsetup luksUUID /dev/sdb
  6. Créez un conteneur LUKS avec le nom du périphérique, dev_name. Cette commande crée également un noeud de périphérique, /dev/mapper/<dev_name>.
    cryptsetup luksOpen /dev/sdb <dev_name>
  7. Obtenez les informations sur le périphérique mappé.
    dmsetup info <dev_name>
  8. Formulez le noeud de périphérique en tant que système de fichier ext4.
    sudo mkfs -t ext4 /dev/sdb 
  9. Montez le noeud de périphérique.
    mount /dev/mapper/<dev_name> /home/encrypt_fs
  10. Ajoutez une entrée à /etc/crypttab.
    <dev_name> UUID=<LUKS UUID of /dev/sdb> none

    Tous les fichiers copiés sur /home/encrypt_fs sont chiffrés par LUKS.

  11. Ajoutez un fichier de clés à un emplacement disponible du volume chiffré. Ce fichier de clés peut être utilisé pour accéder au volume chiffré.
    dd if=/dev/urandom of=$HOME/keyfile bs=32 count=1
    chmod 600 $HOME/keyfile
    cryptsetup luksAddKey /dev/sdb ~/keyfile
  12. Vérifiez le statut de chiffrement des fichiers.
    cryptsetup status /home/encrypt_fs
  13. Démontez le noeud de périphérique lorsque vous avez terminé.
    umount /home/encrypt_fs
    cryptsetup luksClose <dev_name>
                                    

Si vous devez accéder au volume chiffré :

cryptsetup luksOpen /dev/sdb <dev_name> --key-file=/home/opc/keyfile
mount /dev/mapper/<dev_name> /home/encrypt_fs

Si vous perdez le fichier de clés ou si la phrase secrète ou le fichier de clés est endommagé, vous ne pourrez pas déchiffrer le volume chiffré. Il en résulte une perte permanente de données. Nous vous recommandons de stocker des copies durables du fichier de clés sur un hôte sur place.

Montage à distance de volumes de données chiffrés avec dm-crypt

Les étapes suivantes supposent que le fichier de clés se trouve sur un hôte sur place (SRC_IP) et que <OCI_SSH_KEY> est la clé privée SSH de l'instance.

  1. Copiez le fichier de clés de l'hôte sur place vers une instance.
    scp -i <OCI_SSH_KEY> keyfile opc@<SRC_IP>:/home/opc
  2. Ouvrez le volume chiffré.
    ssh i <OCI_SSH_KEY> opc@<SRC_IP> "cryptsetup luksOpen /dev/sdb <dev_name> --key-file=/home/opc/keyfile"
  3. Montez le volume.
    ssh -i <OCI_SSH_KEY> opc@<SRC_IP> "mount /dev/mapper/<dev_name> /home/encrypt_fs"
  4. Effectuez des opérations sur les données du volume monté.
  5. Démontez le volume chiffré.
    ssh -i <OCI_SSH_KEY> opc@<SRC_IP> "umount /home/encrypt_fs"
    ssh -i <OCI_SSH_KEY> opc@<SRC_IP> "cryptsetup luksClose <dev_name>"
  6. Supprimez le fichier de clés de l'instance.
    ssh -i <OCI_SSH_KEY> opc@<SRC_IP> "\rm -f /home/opc/keyfile"

Durabilité des données

Effectuez régulièrement des sauvegardes de vos données dans le service de volume par blocs. Nous vous recommandons d'autoriser au moins un jeu d'utilisateurs et de groupes à supprimer des sauvegardes.

Pour minimiser la perte de données causée par les suppressions ou la corruption, nous vous recommandons de faire des sauvegardes périodiques des volumes. Oracle Cloud Infrastructure permet d'effectuer des sauvegardes programmées automatisées. Pour plus d'informations à propos des sauvegardes programmées, voir Sauvegardes basées sur une politique.

Pour minimiser la perte de données causée par des suppressions par inadvertance par un utilisateur autorisé ou par des suppressions malveillantes, nous vous recommandons d'accorder les autorisations VOLUME_DELETE, VOLUME_ATTACHMENT_DELETE et VOLUME_BACKUP_DELETE à un jeu minimal possible d'utilisateurs et de groupes IAM. Accordez les autorisations DELETE uniquement aux administrateurs de location et de compartiment.

Vérification

Localisez les journaux d'accès et les autres données de sécurité pour le service de volumes par blocs.

Le service de vérification enregistre automatiquement tous les appels d'API aux ressources Oracle Cloud Infrastructure. Vous pouvez atteindre vos objectifs de sécurité et de conformité en utilisant le service de vérification pour surveiller toutes les activités des utilisateurs dans votre location. Comme tous les appels de console, de trousse SDK et de ligne de commande (interface de ligne de commande) sont effectués par l'intermédiaire de nos API, toute l'activité provenant de ces sources est incluse. Les enregistrements de vérification sont disponibles au moyen d'une API d'interrogation authentifiée et filtrable ou ils peuvent être extraits en tant que fichiers par lots à partir du stockage d'objets. Le contenu du journal de vérification inclut l'activité survenue, l'utilisateur qui l'a lancée, la date et l'heure de la demande, ainsi que l'adresse IP source, l'agent utilisateur et les en-têtes HTTP de la demande. Voir Affichage des événements du journal de vérification.

Exemple de journal de vérification
{
  "datetime": 1642993213028,
  "logContent": {
    "data": {
      "additionalDetails": {
        "X-Real-Port": 55984
      },
      "availabilityDomain": "AD3",
      "compartmentId": "ocid1.compartment.oc1..<unique_ID>",
      "compartmentName": "mycompartment",
      "definedTags": null,
      "eventGroupingId": "<unique_ID>",
      "eventName": "ListBootVolumes",
      "freeformTags": null,
      "identity": {
        "authType": null,
        "callerId": null,
        "callerName": null,
        "consoleSessionId": null,
        "credentials": "<key>",
        "ipAddress": "<IP_address>",
        "principalId": "<user_ID>",
        "principalName": "<user_name>",
        "tenantId": "ocid1.tenancy.oc1..<unique_ID>",
        "userAgent": "Oracle-JavaSDK/1.37.1 (Linux/4.14.35-2047.510.4.1.el7uek.x86_64; Java/1.8.0_301; Java HotSpot(TM) 64-Bit Server VM GraalVM EE 20.3.3/25.301-b09-jvmci-20.3-b18)"
      },
      "message": "ListBootVolumes succeeded",
      "request": {
        "action": "GET",
        "headers": {
          "Accept": [
            "application/json"
          ],
          "Authorization": [
            "Signature headers=\"date (request-target) host\",keyId=<key>"
          ],
          "Connection": [
            "keep-alive"
          ],
          "Date": [
            "Mon, 24 Jan 2022 03:00:12 GMT"
          ],
          "User-Agent": [
            "Oracle-JavaSDK/1.37.1 (Linux/4.14.35-2047.510.4.1.el7uek.x86_64; Java/1.8.0_301; Java HotSpot(TM) 64-Bit Server VM GraalVM EE 20.3.3/25.301-b09-jvmci-20.3-b18)"
          ],
          "opc-client-info": [
            "Oracle-JavaSDK/1.37.1"
          ],
          "opc-request-id": [
            "<unique_ID>"
          ]
        },
        "id": "<unique_ID>",
        "parameters": {
          "availabilityDomain": [
            "EMIr:PHX-AD-3"
          ],
          "compartmentId": [
            "ocid1.compartment.oc1..<unique_ID>"
          ],
          "limit": [
            "1000"
          ]
        },
        "path": "/20160918/bootVolumes"
      },
      "resourceId": null,
      "response": {
        "headers": {
          "Connection": [
            "close"
          ],
          "Content-Length": [
            "2"
          ],
          "Content-Type": [
            "application/json"
          ],
          "Date": [
            "Mon, 24 Jan 2022 03:00:13 GMT"
          ],
          "X-Content-Type-Options": [
            "nosniff"
          ],
          "opc-request-id": [
            "<unique_ID>"
          ]
        },
        "message": null,
        "payload": {},
        "responseTime": "2022-01-24T03:00:13.028Z",
        "status": "200"
      },
      "stateChange": {
        "current": null,
        "previous": null
      }
    },
    "dataschema": "2.0",
    "id": "<unique_ID>",
    "oracle": {
      "compartmentid": "ocid1.compartment.oc1..<unique_ID>",
      "ingestedtime": "2022-01-24T03:00:45.483Z",
      "loggroupid": "_Audit",
      "tenantid": "ocid1.tenancy.oc1..<unique_ID>"
    },
    "source": "",
    "specversion": "1.0",
    "time": "2022-01-24T03:00:13.028Z",
    "type": "com.oraclecloud.BlockVolumes.ListBootVolumes"
  }
}

Si vous avez activé le service de protection d'infrastructure en nuage dans votre location, toutes les activités d'utilisateur pouvant poser des problèmes de sécurité sont signalées. Lors de la détection d'un problème, le service de protection d'infrastructure en nuage suggère des mesures correctives. Vous pouvez également configurer le service de protection d'infrastructure en nuage pour qu'il effectue automatiquement certaines actions. Voir Introduction au service de protection d'infrastructure en nuage et Traitement des problèmes signalés.