Autorizzazioni e ruoli

In Cloud KMS, le risorse sono organizzate in una gerarchia. Questa gerarchia ti aiuta a gestire e concedere l'accesso alle risorse a vari livelli di granularità. Le chiavi sono contenute nei keyring, che esistono all'interno di un progetto. Le connessioni EKM esistono anche all'interno di un progetto. I progetti possono essere ulteriormente organizzati in cartelle o organizzazioni.

Questo argomento fornisce ulteriori dettagli sulla gerarchia delle risorse all'interno di Cloud KMS. Per scoprire di più sulle risorse Google Cloud in generale, consulta la gerarchia delle risorse.

Gerarchia delle risorse

L'ambito di un ruolo IAM cambia a seconda del livello della gerarchia delle risorse in cui viene concesso il ruolo. Questa tabella mostra le funzionalità effettive concesse dal ruolo Cloud KMS CryptoKey Encrypter (roles/cloudkms.cryptoKeyEncrypter) a diversi livelli della gerarchia.

Puoi gestire l'accesso alle chiavi o ai keyring, ma non alle singole versioni delle chiavi.

Gerarchia delle risorse Capacità
Organizzazione Esegui la crittografia utilizzando tutte le chiavi di tutti i progetti dell'organizzazione
Cartella Esegui la crittografia utilizzando tutte le chiavi di tutti i progetti nella cartella
Progetto Esegui la crittografia utilizzando tutte le chiavi del progetto
Keyring Cripta utilizzando tutte le chiavi del keyring
Chiave Cripta utilizzando solo quella chiave

Principi di sicurezza

IAM contribuisce a applicare i principi di sicurezza correlati della separazione dei compiti e del privilegio minimo:

  • Quando applichi il principio della separazione dei compiti, nessun singolo membro ha tutto l'accesso necessario per completare una funzione aziendale fondamentale. Ad esempio, un cassiere bancario può prelevare fondi da un conto solo quando il titolare del conto è fisicamente presente e avvia la transazione.

  • Quando applichi il principio del privilegio minimo, un membro dispone solo del livello minimo di accesso necessario per svolgere le sue funzioni commerciali specifiche. Ad esempio, a un cassiere di banca non viene concessa automaticamente la possibilità di approvare un prestito a un cliente.

Ruoli predefiniti

IAM fornisce ruoli predefiniti che consentono l'accesso per ogni tipo di risorse Google Cloud. Se nessun ruolo predefinito soddisfa le tue esigenze, puoi creare un ruolo personalizzato.

IAM offre i seguenti ruoli predefiniti per 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

Ruoli personalizzati

Oltre ai ruoli predefiniti, puoi creare ruoli personalizzati. I ruoli personalizzati ti consentono di applicare il principio del privilegio minimo concedendo al ruolo le autorizzazioni minime necessarie per eseguire una determinata attività.

Un ruolo personalizzato include una o più delle autorizzazioni elencate nel riferimento IAM. Le autorizzazioni relative all'API Cloud Key Management Service iniziano con la stringa cloudkms. Per ulteriori informazioni, consulta Livelli di assistenza per le autorizzazioni nei ruoli personalizzati.

Per informazioni sulle autorizzazioni richieste per richiamare un metodo specifico dell'API Cloud Key Management Service, consulta il riferimento all'API del metodo.

Linee guida generali per la gestione dell'accesso in Cloud KMS

Ti consigliamo di evitare di utilizzare ruoli di base a livello di progetto come owner, editor e viewer. Questi ruoli non separano la possibilità di gestire le chiavi dalla possibilità di utilizzarle per le operazioni crittografiche e non sono consigliati per gli ambienti di produzione. Utilizza invece i ruoli predefiniti o crea ruoli personalizzati che riflettano i requisiti della tua attività.

Gli esempi riportati di seguito aiutano a illustrare alcune buone linee guida per la sicurezza:

  • Per un'organizzazione grande o complessa, puoi scegliere un approccio come il seguente:

    • Concedi ai membri del team di sicurezza IT il ruolo Amministratore Cloud KMS (roles/cloudkms.admin) in tutti i progetti. Se diversi membri del team gestiscono aspetti diversi del ciclo di vita di una chiave, puoi concedere loro un ruolo più granulare, come il ruolo Importatore Cloud KMS (roles/cloudkms.importer).
    • Concedi il ruolo di criptatore / decriptatore Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) agli utenti o alle applicazioni che leggono o scrivono dati criptati.
    • Concedi il ruolo Cloud KMS CryptoKey Public Key Viewer (roles/cloudkms.publicKeyViewer) agli utenti o alle applicazioni che devono visualizzare la parte pubblica di una chiave utilizzata per la crittografia asimmetrica.
    • Crea ruoli predefiniti che corrispondano ai requisiti della tua attività. Ad esempio, lo stesso utente potrebbe dover monitorare le quote di un progetto e visualizzare i dati dei log.
  • Per una piccola organizzazione con requisiti di sicurezza semplici, puoi scegliere di adottare un approccio più semplice concedendo un ruolo ampio come Amministratore dell'organizzazione (roles/resourcemanager.organizationAdmin). Tuttavia, questo approccio potrebbe non essere scalabile in base ai tuoi requisiti correnti.

  • Valuta la possibilità di ospitare le chiavi in un progetto Google Cloud separato dai dati protetti da queste chiavi. Un utente con un ruolo di base o con privilegi elevati in un progetto, ad esempio editor, non può utilizzare questo ruolo per ottenere accesso unauthorized alle chiavi in un altro progetto.

  • Evita di concedere il ruolo owner a nessun membro. Senza il ruolo owner, nessun membro del progetto può creare una chiave e utilizzarla sia per decriptare i dati sia per la firma, a meno che a quel membro non venga concessa ciascuna di queste autorizzazioni. Per concedere accesso amministrativo ampio senza concedere la possibilità di criptare o decriptare, concedi il ruolo Amministratore Cloud KMS (roles/cloudkms.admin).

  • Per limitare l'accesso ai dati criptati, ad esempio i dati dei clienti, puoi limitare chi può accedere alla chiave e chi può utilizzarla per la decrittografia. Se necessario, puoi creare ruoli personalizzati granulari per soddisfare le esigenze della tua attività.

Controllo delle autorizzazioni

Per ogni tipo di oggetto Cloud KMS per il quale puoi impostare autorizzazioni IAM granulari, l'oggetto ha un metodo testIamPermissions. Il metodo testIamPermissions restituisce l'insieme di autorizzazioni concesse al chiamante per quell'oggetto.

Non puoi impostare le autorizzazioni IAM su una versione della chiave, pertanto il tipo di oggetto CryptoKeyVersion non dispone di questo metodo.

Il metodo testIamPermissions di un oggetto restituisce un TestIamPermissionsResponse.

Per esempi di chiamata dei metodi testIamPermissions, consulta la documentazione relativa al test delle autorizzazioni nella documentazione di IAM.

Passaggi successivi

  • Scopri come IAM centralizza la gestione delle autorizzazioni e degli ambiti di accesso per le risorse Google Cloud.
  • Scopri i diversi tipi di oggetti Cloud KMS.