Autorizzazioni e ruoli

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

Questo argomento fornisce ulteriori dettagli sulla gerarchia delle risorse in Cloud KMS. Per ulteriori informazioni sulle risorse Google Cloud in generale, consulta 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 Autore crittografia CryptoKey Cloud KMS (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 Cripta utilizzando tutte le chiavi in tutti i progetti nell'organizzazione
cartella Cripta utilizzando tutte le chiavi in tutti i progetti nella cartella
progetto Cripta utilizzando tutte le chiavi nel progetto
Keyring Cripta utilizzando tutte le chiavi nel keyring
Chiave Cripta utilizzando solo quella chiave

Principi di sicurezza

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

  • Quando applichi il principio di separazione dei compiti, nessun singolo membro ha tutte le autorizzazioni di accesso necessarie per completare una funzione aziendale critica. Ad esempio, uno sportello bancario può prelevare fondi da un conto solo quando il titolare del conto è presente fisicamente e avvia la transazione.

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

Ruoli predefiniti

IAM fornisce ruoli predefiniti che concedono l'accesso per ogni tipo di risorsa 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.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.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

resourcemanager.projects.get

(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.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.keyRings.get

cloudkms.keyRings.list

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

Ruoli personalizzati

Oltre ai ruoli predefiniti, puoi creare ruoli personalizzati. I ruoli personalizzati 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ù autorizzazioni elencate nel riferimento IAM. Le autorizzazioni relative all'API Cloud Key Management Service iniziano con la stringa cloudkms. Per ulteriori informazioni, vedi Livelli di supporto per le autorizzazioni nei ruoli personalizzati.

Per informazioni sulle autorizzazioni necessarie per richiamare uno specifico metodo API Cloud Key Management Service, consulta il riferimento API del metodo in questione.

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 utilizzare le chiavi per le operazioni crittografiche e sono sconsigliati per gli ambienti di produzione. Utilizza invece ruoli predefiniti o crea ruoli personalizzati che riflettano le tue esigenze aziendali.

I seguenti esempi illustrano alcune linee guida per la sicurezza efficaci:

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

    • Concedi ai membri del tuo team per la sicurezza IT il ruolo Amministratore Cloud KMS (roles/cloudkms.admin) per tutti i progetti. Se diversi membri del team gestiscono aspetti diversi del ciclo di vita di una chiave, puoi assegnargli un ruolo più granulare, come il ruolo Importatore Cloud KMS (roles/cloudkms.importer).
    • Concedi il ruolo Autore crittografia / decrittografia Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) agli utenti o alle applicazioni che leggono o scrivono dati criptati.
    • Concedi il ruolo Visualizzatore chiave pubblica di Cloud KMS (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 in linea con i tuoi requisiti aziendali. Ad esempio, lo stesso utente potrebbe dover monitorare le quote di un progetto e visualizzare i dati di log.
  • Per una piccola organizzazione con requisiti di sicurezza semplici, potresti scegliere di adottare un approccio più semplice concedendo un ruolo ampio, ad esempio Amministratore organizzazione (roles/resourcemanager.organizationAdmin). Tuttavia, questo approccio potrebbe non essere adeguato alle esigenze attuali.

  • Potresti 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 l'accesso non autorizzato alle chiavi in un progetto diverso.

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

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

Verifica delle autorizzazioni in corso...

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 l'oggetto in questione.

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

Il metodo testIamPermissions di un oggetto restituisce un TestIamPermissionsResponse.

Per esempi su come richiamare i metodi testIamPermissions, consulta la documentazione relativa ai 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.
  • Comprendere i diversi tipi di oggetti Cloud KMS.