Autorisations et rôles

Dans Cloud KMS, les ressources sont organisées hiérarchiquement. Cette hiérarchie vous aide à gérer et accorder l'accès aux ressources selon différents niveaux de précision. Les clés sont contenues dans des trousseaux de clés, et les trousseaux de clés existent au sein d'un projet. Des connexions EKM existent également dans un projet. Les projets peuvent être organisés à leur tour en dossiers ou en organisations.

Cette rubrique fournit des détails supplémentaires sur la hiérarchie des ressources dans Cloud KMS. Pour en savoir plus sur les ressources Google Cloud en général, consultez la section Hiérarchie des ressources.

Hiérarchie des ressources

Le champ d'application d'un rôle IAM varie en fonction du niveau de la hiérarchie des ressources auquel le rôle a accès. Ce tableau présente les capacités effectives accordées par le rôle Chiffreur de clés cryptographiques Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) à différents niveaux de la hiérarchie.

Vous pouvez gérer l'accès aux clés ou aux trousseaux de clés, mais pas aux versions de clé individuelles.

Hiérarchie des ressources Capacité
Organisation Chiffrer à l'aide de toutes les clés de tous les projets de l'organisation
Dossier Chiffrer à l'aide de toutes les clés de tous les projets du dossier
Projet Chiffrer à l'aide de toutes les clés du projet
Trousseau de clés Chiffrer à l'aide de toutes les clés du trousseau de clés
Clé Chiffrer uniquement à l'aide de cette clé

Principes de sécurité

Cloud IAM permet d'appliquer les principes de sécurité interdépendants de la séparation des tâches et du moindre privilège :

  • Lorsque vous appliquez le principe de séparation des tâches, aucun membre ne dispose de tous les accès nécessaires pour remplir une fonction métier critique. Par exemple, un employé de banque ne peut retirer des fonds d'un compte que si le titulaire du compte est physiquement présent et lance la transaction.

  • Lorsque vous appliquez le principe du moindre privilège, un membre ne dispose que du niveau d'accès minimal requis pour remplir ses fonctions spécifiques. Par exemple, un employé de banque n'a pas automatiquement la capacité d'approuver un prêt client.

Rôles prédéfinis

IAM fournit des rôles prédéfinis qui permettent d'accorder l'accès pour chaque type de ressources Google Cloud. Si aucun rôle prédéfini ne répond à vos besoins, vous pouvez créer un rôle personnalisé.

IAM propose les rôles prédéfinis suivants pour Cloud KMS :

Role Permissions

(roles/cloudkms.admin)

Provides access to Cloud KMS resources, except for access to restricted resource types and cryptographic operations.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.autokeyConfigs.*

  • cloudkms.autokeyConfigs.get
  • cloudkms.autokeyConfigs.update

cloudkms.cryptoKeyVersions.create

cloudkms.cryptoKeyVersions.destroy

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeyVersions.restore

cloudkms.cryptoKeyVersions.update

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.cryptoKeys.*

  • cloudkms.cryptoKeys.create
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.getIamPolicy
  • cloudkms.cryptoKeys.list
  • cloudkms.cryptoKeys.setIamPolicy
  • cloudkms.cryptoKeys.update

cloudkms.ekmConfigs.*

  • cloudkms.ekmConfigs.get
  • cloudkms.ekmConfigs.getIamPolicy
  • cloudkms.ekmConfigs.setIamPolicy
  • cloudkms.ekmConfigs.update

cloudkms.ekmConnections.*

  • cloudkms.ekmConnections.create
  • cloudkms.ekmConnections.get
  • cloudkms.ekmConnections.getIamPolicy
  • cloudkms.ekmConnections.list
  • cloudkms.ekmConnections.setIamPolicy
  • cloudkms.ekmConnections.update
  • cloudkms.ekmConnections.use
  • cloudkms.ekmConnections.verifyConnectivity

cloudkms.importJobs.*

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.getIamPolicy
  • cloudkms.importJobs.list
  • cloudkms.importJobs.setIamPolicy
  • cloudkms.importJobs.useToImport

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.keyRings.*

  • cloudkms.keyRings.create
  • cloudkms.keyRings.createTagBinding
  • cloudkms.keyRings.deleteTagBinding
  • cloudkms.keyRings.get
  • cloudkms.keyRings.getIamPolicy
  • cloudkms.keyRings.list
  • cloudkms.keyRings.listEffectiveTags
  • cloudkms.keyRings.listTagBindings
  • cloudkms.keyRings.setIamPolicy

cloudkms.locations.get

cloudkms.locations.list

cloudkms.locations.optOutKeyDeletionMsa

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

resourcemanager.projects.get

(roles/cloudkms.autokeyAdmin)

Enables management of AutokeyConfig.

cloudkms.autokeyConfigs.*

  • cloudkms.autokeyConfigs.get
  • cloudkms.autokeyConfigs.update

cloudkms.projects.showEffectiveAutokeyConfig

(roles/cloudkms.autokeyUser)

Grants ability to use KeyHandle resources.

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

(roles/cloudkms.cryptoKeyDecrypter)

Provides ability to use Cloud KMS resources for decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyDecrypterViaDelegation)

Enables Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypter)

Provides ability to use Cloud KMS resources for encrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypter)

Provides ability to use Cloud KMS resources for encrypt and decrypt operations only.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation)

Enables Encrypt and Decrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToDecryptViaDelegation

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoKeyEncrypterViaDelegation)

Enables Encrypt operations via other Google Cloud services

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoOperator)

Enables all Crypto Operations.

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.generateRandomBytes

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.ekmConnectionsAdmin)

Enables management of EkmConnections.

cloudkms.ekmConfigs.get

cloudkms.ekmConfigs.update

cloudkms.ekmConnections.create

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.ekmConnections.update

cloudkms.ekmConnections.verifyConnectivity

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCbc)

Enables raw AES-CBC keys management.

cloudkms.cryptoKeyVersions.manageRawAesCbcKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCtr)

Enables raw AES-CTR keys management.

cloudkms.cryptoKeyVersions.manageRawAesCtrKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawPKCS1)

Enables raw PKCS#1 keys management.

cloudkms.cryptoKeyVersions.manageRawPKCS1Keys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.importer)

Enables ImportCryptoKeyVersion, CreateImportJob, ListImportJobs, and GetImportJob operations

cloudkms.importJobs.create

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.importJobs.useToImport

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.protectedResourcesViewer)

Enables viewing protected resources.

cloudkms.protectedResources.search

(roles/cloudkms.publicKeyViewer)

Enables GetPublicKey operations

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signer)

Enables Sign operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signerVerifier)

Enables Sign, Verify, and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToSign

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.verifier)

Enables Verify and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.viewer)

Enables Get and List operations.

cloudkms.autokeyConfigs.get

cloudkms.cryptoKeyVersions.get

cloudkms.cryptoKeyVersions.list

cloudkms.cryptoKeys.get

cloudkms.cryptoKeys.list

cloudkms.ekmConfigs.get

cloudkms.ekmConnections.get

cloudkms.ekmConnections.list

cloudkms.importJobs.get

cloudkms.importJobs.list

cloudkms.keyHandles.get

cloudkms.keyHandles.list

cloudkms.keyRings.get

cloudkms.keyRings.list

cloudkms.locations.get

cloudkms.locations.list

cloudkms.operations.get

resourcemanager.projects.get

Rôles personnalisés

En plus des rôles prédéfinis, vous pouvez créer des rôles personnalisés. Les rôles personnalisés vous permettent d'appliquer le principe du moindre privilège en accordant au rôle les autorisations minimales requises pour effectuer une tâche donnée.

Un rôle personnalisé inclut une ou plusieurs des autorisations listées dans la documentation de référence IAM. Les autorisations associées à l'API Cloud Key Management Service commencent par la chaîne cloudkms. Pour en savoir plus, consultez la section Niveaux de compatibilité des autorisations dans les rôles personnalisés.

Pour en savoir plus sur les autorisations requises pour appeler une méthode API Cloud Key Management Service spécifique, consultez la documentation de référence de l'API de cette méthode.

Consignes générales pour la gestion des accès dans Cloud KMS

Nous vous recommandons d'éviter d'utiliser des rôles de base à l'échelle du projet, tels que owner, editor et viewer. Ces rôles ne séparent pas la capacité de gestion des clés de la capacité à utiliser les clés pour les opérations de chiffrement, et ne sont pas recommandés pour les environnements de production. Utilisez plutôt des rôles prédéfinis ou créez des rôles personnalisés qui reflètent les besoins de votre entreprise.

Les exemples suivants illustrent quelques bonnes consignes de sécurité :

  • Pour une organisation de grande taille ou complexe, vous pouvez adopter une approche semblable à celle-ci :

    • Attribuez aux membres de votre équipe de sécurité informatique le rôle d'administrateur Cloud KMS (roles/cloudkms.admin) sur tous les projets. Si différents membres de l'équipe gèrent différents aspects du cycle de vie d'une clé, vous pouvez leur attribuer un rôle plus précis, tel que le rôle "Importateur Cloud KMS" (roles/cloudkms.importer).
    • Attribuez le rôle "Chiffreur/Déchiffreur Cloud KMS" (roles/cloudkms.cryptoKeyEncrypterDecrypter) aux utilisateurs ou aux applications qui lisent ou écrivent des données chiffrées.
    • Attribuez le rôle "Lecteur de clés publiques Cloud KMS" (roles/cloudkms.publicKeyViewer) aux utilisateurs ou aux applications qui ont besoin d'afficher la partie publique d'une clé utilisée pour le chiffrement asymétrique.
    • Créez des rôles prédéfinis correspondant aux besoins de votre entreprise. Par exemple, le même utilisateur peut avoir besoin de surveiller les quotas d'un projet et d'afficher les données de journal.
  • Pour une petite organisation ayant des exigences de sécurité simples, vous pouvez choisir d'adopter une approche plus simple en attribuant un rôle étendu tel que Administrateur de l'organisation (roles/resourcemanager.organizationAdmin). Toutefois, cette approche pourrait ne pas suivre l'évolution de vos besoins.

  • Envisagez d'héberger vos clés dans un projet Google Cloud distinct des données protégées par ces clés. Un utilisateur disposant d'un rôle de base ou hautement privilégié dans un projet, tel que editor, ne peut pas utiliser ce rôle pour obtenir un accès non autorisé aux clés d'un autre projet.

  • Évitez d'attribuer le rôle owner à un membre. Sans le rôle owner, aucun membre du projet ne peut créer une clé et l'utiliser pour déchiffrer des données ou pour les signer, sauf si chacune de ces autorisations est accordée à ce membre. Pour accorder un accès administrateur étendu sans autoriser le chiffrement ou le déchiffrement, attribuez plutôt le rôle d'administrateur Cloud KMS (roles/cloudkms.admin).

  • Pour limiter l'accès aux données chiffrées, telles que les données client, vous pouvez limiter l'accès des membres qui peuvent accéder à la clé et de ceux qui peuvent utiliser la clé pour le déchiffrement. Si nécessaire, vous pouvez créer des rôles personnalisés précis pour répondre aux besoins de votre entreprise.

Vérifier les autorisations

Pour chaque type d'objet Cloud KMS pour lequel vous pouvez définir des autorisations IAM précises, cet objet dispose d'une méthode testIamPermissions. La méthode testIamPermissions renvoie l'ensemble des autorisations accordées à l'appelant pour cet objet.

Vous ne pouvez pas définir d'autorisations IAM sur une version de clé. Le type d'objet CryptoKeyVersion ne dispose donc pas de cette méthode.

La méthode testIamPermissions d'un objet renvoie une réponse TestIamPermissionsResponse.

Pour obtenir des exemples d'appels de méthodes testIamPermissions, consultez la documentation sur les autorisations de test dans la documentation IAM.

Étape suivante

  • Découvrez comment IAM centralise la gestion des autorisations et des niveaux d'accès pour les ressources Google Cloud.
  • Découvrez les différents types d'objets Cloud KMS.