Premiers pas avec Cloud KMS

Cloud KMS est un service de gestion de clés hébergé dans le cloud qui vous permet de gérer les clés cryptographiques de vos services cloud de la même manière que sur site. Il est compatible avec le chiffrement, le déchiffrement, la signature et la validation à l'aide de différents types et sources de clés, y compris Cloud HSM pour les clés avec support matériel.

Dans ce tutoriel, vous allez apprendre à utiliser les fonctionnalités avancées des API Cloud Security and Privacy, y compris :

  • Configurer un bucket Cloud Storage sécurisé
  • Gérer des clés et des données chiffrées à l'aide de Cloud KMS
  • Consulter des journaux d'audit Cloud Storage

Pour cela, vous allez récupérer, chiffrer et charger des données partielles du corpus Enron dans Cloud Storage.

Vous allez apprendre à :

  • Chiffrer des données et gérer des clés de chiffrement à l'aide de Key Management Service (KMS)

Vous ne devez utiliser

  • Cloud KMS
  • Cloud Storage
  • Cloud SDK

Configuration de l'environnement au rythme de chacun

Si vous ne possédez pas encore de compte Google (Gmail ou Google Apps), vous devez en créer un. Connectez-vous à la console Google Cloud Platform (console.cloud.google.com) et créez un projet :

Screenshot from 2016-02-10 12:45:26.png

Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID tout au long de cet atelier de programmation.

Vous devez ensuite activer la facturation dans la console Cloud pour pouvoir utiliser les ressources Google Cloud.

Suivre cet atelier de programmation ne devrait pas vous coûter plus d'un euro. Cependant, cela peut s'avérer plus coûteux si vous décidez d'utiliser davantage de ressources ou si vous n'interrompez pas les ressources (voir la section "Effectuer un nettoyage" à la fin du présent document).

Les nouveaux utilisateurs de Google Cloud Platform peuvent bénéficier d'un essai sans frais avec 300$de crédits.

Démarrer Cloud Shell

Dans cet atelier de programmation, vous allez utiliser Cloud Shell, un environnement virtualisé sans frais exécuté sur Google Cloud. Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle intègre un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Sauf indication contraire, exécutez toutes les commandes à partir de ce shell.

Pour stocker les données de ce tutoriel, créez un bucket Cloud Storage. Étant donné que les noms de bucket Cloud Storage doivent être uniques, ajoutez l'ID de votre projet en préfixe du nom du bucket :

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Créez ensuite le bucket :

$ gsutil mb gs://${BUCKET_NAME}

Le corpus Enron est une vaste base de données contenant plus de 600 000 e-mails rédigés par 158 employés d'Enron Corporation. Ces données ont été copiées dans le bucket Cloud Storage nommé gs://enron_emails/.

Téléchargez l'un des fichiers d'e-mails en local :

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

Examinez le fichier téléchargé pour vérifier qu'il s'agit bien d'un e-mail :

$ tail 1.

L'e-mail contiendra un message tel que :

Attached is the Delta position for 1/18...
# ...

En plus des e-mails, le bucket contient également des images. Ce tutoriel utilise à la fois les e-mails en texte brut et les images.

Avant de pouvoir utiliser Cloud KMS, vous devez d'abord activer le service dans votre projet. Vous n'aurez à le faire qu'une seule fois par projet. Pour activer le service Cloud KMS, exécutez la commande suivante :

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

L'activation peut prendre jusqu'à une minute. La commande indiquera la réussite de l'opération une fois celle-ci terminée.

Créez un trousseau de clés Cloud KMS. Dans Cloud KMS, un trousseau de clés est un ensemble logique de clés cryptographiques. Le trousseau de clés contient des métadonnées sur les clés, telles que leur emplacement. Créez un trousseau de clés nommé my-keyring dans la région global :

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Créez maintenant une clé de chiffrement nommée enron-emails avec l'objectif encryption dans le trousseau de clés que vous venez de créer.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

Ouvrez l'interface utilisateur Web des clés cryptographiques et affichez les ressources que vous venez de créer. Cette option est disponible sous IAM et administration dans le menu principal.

Vous pouvez afficher et gérer les trousseaux de clés et les clés de chiffrement dans la console Cloud.

Chiffrez le contenu de l'e-mail que nous avons téléchargé précédemment à l'aide de Cloud KMS. Ce tutoriel utilise l'outil de ligne de commande gcloud, mais vous pouvez également chiffrer des données à l'aide de l'API Cloud KMS.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

Cela crée un fichier sur le disque 1.enc, qui contient le contenu du fichier chiffré. Maintenant que les données sont chiffrées avec Cloud KMS, importez le fichier chiffré dans le bucket Cloud Storage.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS est intégré à Google Cloud Identity and Access Management (IAM). Les rôles Cloud KMS IAM sont en grande partie divisés en deux catégories :

  • Autorisation de gérer les clés
  • Autorisation d'utiliser des clés

Par exemple, le rôle roles/cloudkms.admin permet au titulaire de créer des trousseaux de clés et des clés de chiffrement, de définir des stratégies IAM et d'effectuer des opérations de gestion. Le rôle roles/cloudkms.cryptoKeyEncrypterDecrypter permet au titulaire de chiffrer et de déchiffrer des données, mais n'inclut pas les autorisations de gestion.

Les rôles IAM sont hérités de leur ressource parente. Si une personne dispose du rôle roles/cloudkms.admin sur le projet Google Cloud, elle est administratrice de toutes les clés de ce projet. S'il dispose du rôle roles/cloudkms.admin sur un trousseau, il est administrateur de toutes les clés de ce trousseau. S'il dispose de roles/cloudkms.admin sur une seule clé de chiffrement, il n'est administrateur que de cette clé.

Pour cet exercice, utilisez votre identité :

$ export MY_IDENTITY=you@gmail.com # or you@example.com

Attribuez à l'identité la possibilité de gérer les ressources Cloud KMS dans le trousseau de clés créé ci-dessus à l'aide de l'outil de ligne de commande gcloud :

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

Le rôle roles/cloudkms.admin n'inclut pas l'autorisation d'utiliser les clés, mais uniquement de les gérer. Pour autoriser votre identité à chiffrer et déchiffrer des données à l'aide de la clé de chiffrement enron-emails :

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

Notez que la première commande accorde le rôle roles/cloudkms.admin sur le trousseau de clés, ce qui inclut toutes les ressources de clé de chiffrement enfant. La deuxième commande accorde roles/cloudkms.cryptoKeyEncrypterDecrypter, mais uniquement sur la clé CryptoKey enron-emails.

Vous pouvez également afficher et attribuer des rôles dans l'interface utilisateur Cloud KMS de la console Cloud.

En plus de chiffrer un seul fichier, vous pouvez également chiffrer une collection de fichiers à l'aide de scripts. Cet exemple diffuse tous les e-mails associés à allen-p, les chiffre et importe les valeurs chiffrées résultantes dans le bucket Cloud Storage :

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

Ce script parcourt tous les fichiers du répertoire donné dans l'exemple de bucket Cloud Storage, les chiffre à l'aide de Cloud KMS, puis les importe dans votre Google Cloud Storage.

Une fois l'exécution du script terminée, vous pouvez afficher les fichiers chiffrés dans l'interface utilisateur Cloud Storage. L'écran qui s'affiche devrait ressembler à ce qui suit :

Cloud Audit Logging comprend deux flux de journaux (journaux des activités d'administration et journaux d'accès aux données) générés par les services Google Cloud pour vous aider à répondre à la question "qui a fait quoi, où et quand ?" dans vos projets Google Cloud Platform.

Pour consulter l'activité associée à une ressource dans KMS, cliquez sur le trousseau de clés, puis sélectionnez Afficher l'activité. L'interface utilisateur de l'activité Cloud s'affiche alors. Il contient des informations sur la création du trousseau et sur toutes les modifications qui lui ont été apportées.

Vous avez chiffré des données à l'aide de Cloud KMS et stocké des données chiffrées dans Cloud Storage.

Effectuer un nettoyage

Libérez les ressources créées au cours de ce tutoriel. Supprimez le bucket Cloud Storage créé précédemment :

$ gsutil rm -r gs://${BUCKET_NAME}

Il est impossible de supprimer les ressources Cloud KMS. Toutefois, vous pouvez détruire le matériel de clé pour qu'il ne puisse plus être utilisé :

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

Points abordés

  • Utiliser Cloud IAM pour gérer les autorisations Cloud KMS
  • Chiffrer des données avec Cloud KMS
  • Utiliser Cloud Storage pour stocker des données chiffrées
  • Consulter toute l'activité des clés et des trousseaux avec Cloud Audit Logs

Étapes suivantes

  • Utiliser Cloud KMS pour chiffrer une colonne dans une base de données comme BigQuery
  • Définir un calendrier de rotation automatique pour vos clés Cloud KMS

En savoir plus

Licence

Ce document est publié sous une licence Creative Commons Attribution 2.0 Generic.