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. Elle comprend un service de chiffrement, de déchiffrement, de signature et de validation compatible avec divers types de clés et sources, dont Cloud HSM pour les clés intégrées au 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

Vous allez capturer les données abrégées d'Enron Corus, les chiffrer et les charger dans Cloud Storage.

Vous découvrirez

  • Chiffrer des données et gérer les 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 n'avez 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:

Capture d'écran du 10/02/2016 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 Cloud Console afin d'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 offert de 300 $.

Démarrer Cloud Shell

Dans cet atelier de programmation, vous allez utiliser Cloud Shell, un environnement virtualisé offert 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 instruction contraire, exécutez toutes les commandes à partir de cette interface système.

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

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

Créez ensuite le bucket:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus est une grande base de données de plus de 600 000 e-mails généré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 de messagerie 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 des images. Ce tutoriel utilise à la fois des e-mails en texte brut et des images.

Avant de pouvoir utiliser Cloud KMS, vous devez activer le service dans votre projet. Cette opération n'est à effectuer 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. Une fois l'opération terminée, la commande indique que l'opération a réussi.

Créez un trousseau de clés Cloud KMS. Dans Cloud KMS, un trousseau est une collection logique de clés cryptographiques. Le trousseau contient des métadonnées sur les clés, par exemple 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 ensuite une clé cryptographique nommée enron-emails avec l'objectif encryption dans le trousseau 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 nouvellement créées. Cette option est disponible sous IAM et administration dans le menu principal.

Vous pouvez consulter et gérer les trousseaux et les clés cryptographiques dans Cloud Console.

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 les 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

Cette opération crée un fichier sur le disque 1.enc, qui contient un contenu chiffré. Maintenant que les données sont chiffrées à l'aide de 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 IAM Cloud KMS sont principalement 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 à l'application de créer des trousseaux de clés, des clés cryptographiques, de définir des stratégies IAM et d'effectuer des opérations liées à la gestion. Le roles/cloudkms.cryptoKeyEncrypterDecrypter accorde au titulaire le chiffrement et déchiffre les données, mais n'inclut pas les autorisations de gestion.

Les rôles IAM sont hérités par leur ressource parente. Si un utilisateur dispose du rôle roles/cloudkms.admin sur le projet Google Cloud, il est administrateur de toutes les clés de ce projet. S'il dispose de roles/cloudkms.admin dans un trousseau, il s'agit d'un administrateur de toutes les clés de ce trousseau. S'ils possèdent roles/cloudkms.admin sur une seule clé de chiffrement, ils ne sont administrateurs 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 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 des clés, mais uniquement de les gérer. Pour permettre à votre identité de chiffrer et de déchiffrer les données à l'aide de la clé cryptographique enron-emails, procédez comme suit:

$ 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 attribue le rôle roles/cloudkms.admin au trousseau, qui inclut toutes les ressources de chiffrement cryptographique enfants. La deuxième commande accorde roles/cloudkms.cryptoKeyEncrypterDecrypter, mais uniquement sur la clé cryptographique enron-emails.

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

En plus de chiffrer un seul fichier, vous pouvez chiffrer une collection de fichiers à l'aide de scripts. Cet exemple diffuse tous les e-mails pour allen-p, les chiffre et importe les valeurs chiffrées obtenues 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

Tous les fichiers du répertoire figurant dans l'exemple de bucket Cloud Storage sont itérés, chiffrés dans Cloud KMS et importés dans Google Cloud Storage.

Une fois le script terminé, vous pouvez afficher les fichiers chiffrés dans l'interface utilisateur Cloud Storage. Ce type de message devrait s'afficher :

Cloud Audit Logging propose deux flux de journaux (les journaux d'activité d'administration et les 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 afficher l'activité de n'importe quelle ressource dans KMS, cliquez sur le trousseau, puis sélectionnez View Activity (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 réussi à chiffrer les données à l'aide de Cloud KMS et à stocker 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}

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

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

Nous avons abordé

  • Gérer les autorisations Cloud KMS à l'aide de Cloud IAM
  • Chiffrer des données à l'aide de Cloud KMS
  • Stocker des données chiffrées avec Cloud Storage
  • Consulter toute l'activité liée aux clés et aux trousseaux à l'aide de Cloud Audit Logging

Étapes suivantes

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

En savoir plus

Licence

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