Autorizações e funções

No Cloud KMS, os recursos estão organizados numa hierarquia. Esta hierarquia ajuda a gerir e conceder acesso a recursos em vários níveis de detalhe. As chaves estão contidas em conjuntos de chaves e os conjuntos de chaves existem num projeto. As associações de EKM também existem num projeto. Os projetos podem ser organizados em pastas ou organizações.

Este tópico fornece mais detalhes sobre a hierarquia de recursos no Cloud KMS. Para saber mais sobre os Google Cloud recursos em geral, consulte o artigo Hierarquia de recursos.

Hierarquia de recursos

O âmbito de uma função do IAM muda consoante o nível da hierarquia de recursos onde a função é concedida. Esta tabela mostra as capacidades efetivas concedidas pela função de encriptador de CryptoKey do Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) em diferentes níveis da hierarquia.

Pode gerir o acesso a chaves ou conjuntos de chaves, mas não a versões de chaves individuais.

Hierarquia de recursos Capacidade
Organização Encriptar com todas as chaves em todos os projetos na organização
Pasta Encriptar com todas as chaves em todos os projetos na pasta
Projeto Encriptar com todas as chaves no projeto
Conjunto de chaves Encriptar com todas as chaves no porta-chaves
Chave Encriptar usando apenas essa chave

Princípios de segurança

A IAM ajuda a aplicar os princípios de segurança interligados de separação de funções e menor privilégio:

  • Quando aplica o princípio da separação de funções, nenhum membro tem todo o acesso necessário para concluir uma função empresarial crítica. Por exemplo, um caixa de banco só pode levantar fundos de uma conta quando o titular da conta está fisicamente presente e inicia a transação.

  • Quando aplica o princípio do menor privilégio, um membro tem apenas o nível mínimo de acesso necessário para concluir as funções empresariais específicas desse membro. Por exemplo, um caixa bancário não tem automaticamente a capacidade de aprovar um empréstimo de um cliente.

Funções predefinidas

A IAM fornece funções predefinidas que concedem acesso a cada tipo de recursos Google Cloud . Se nenhuma função predefinida satisfizer as suas necessidades, pode criar uma função personalizada.

A IAM oferece as seguintes funções predefinidas para o 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.kajPolicyConfigs.*

  • cloudkms.kajPolicyConfigs.get
  • cloudkms.kajPolicyConfigs.update

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.*

  • cloudkms.projects.showEffectiveAutokeyConfig
  • cloudkms.projects.showEffectiveKajEnrollmentConfig
  • cloudkms.projects.showEffectiveKajPolicyConfig

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

Lowest-level resources where you can grant this role:

  • CryptoKey

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

Lowest-level resources where you can grant this role:

  • CryptoKey

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

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToEncryptViaDelegation

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.cryptoOperator)

Enables all Crypto Operations.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToDecapsulate

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.decapsulator)

Enables Decapsulate and GetPublicKey operations

cloudkms.cryptoKeyVersions.useToDecapsulate

cloudkms.cryptoKeyVersions.viewPublicKey

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.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.manageRawAesCbcKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawAesCtr)

Enables raw AES-CTR keys management.

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.manageRawAesCtrKeys

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

resourcemanager.projects.list

(roles/cloudkms.expertRawPKCS1)

Enables raw PKCS#1 keys management.

Lowest-level resources where you can grant this role:

  • CryptoKey

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.keyAccessJustificationsEnrollmentConfigViewer)

Grant ability to view Key Access Justification enrollment configs of a project.

cloudkms.projects.showEffectiveKajEnrollmentConfig

(roles/cloudkms.keyAccessJustificationsPolicyConfigAdmin)

Grant ability to manage Key Access Justifications Policy at parent resource level.

cloudkms.kajPolicyConfigs.*

  • cloudkms.kajPolicyConfigs.get
  • cloudkms.kajPolicyConfigs.update

cloudkms.projects.showEffectiveKajPolicyConfig

(roles/cloudkms.orgServiceAgent)

Gives Cloud KMS organization-level service account access to managed resources.

cloudasset.assets.searchAllResources

(roles/cloudkms.protectedResourcesViewer)

Enables viewing protected resources.

cloudkms.protectedResources.search

(roles/cloudkms.publicKeyViewer)

Enables GetPublicKey operations

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.serviceAgent)

Gives Cloud KMS service account access to managed resources.

cloudasset.assets.listCloudkmsCryptoKeys

(roles/cloudkms.signer)

Enables Sign operations

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToSign

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.signerVerifier)

Enables Sign, Verify, and GetPublicKey operations

Lowest-level resources where you can grant this role:

  • CryptoKey

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

Lowest-level resources where you can grant this role:

  • CryptoKey

cloudkms.cryptoKeyVersions.useToVerify

cloudkms.cryptoKeyVersions.viewPublicKey

cloudkms.locations.get

cloudkms.locations.list

resourcemanager.projects.get

(roles/cloudkms.viewer)

Enables Get and List operations.

Lowest-level resources where you can grant this role:

  • CryptoKey

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.kajPolicyConfigs.get

cloudkms.keyHandles.get

cloudkms.keyHandles.list

cloudkms.keyRings.get

cloudkms.keyRings.list

cloudkms.locations.get

cloudkms.locations.list

cloudkms.operations.get

resourcemanager.projects.get

(roles/cloudkmskacls.serviceAgent)

Grants Cloud KMS KACLS Service Agent access to KMS resource permissions to perform DEK encryption/decryption.

cloudkms.cryptoKeyVersions.useToDecrypt

cloudkms.cryptoKeyVersions.useToEncrypt

cloudkms.cryptoKeys.get

Funções personalizadas

Além das funções predefinidas, pode criar funções personalizadas. As funções personalizadas permitem-lhe aplicar o princípio do menor privilégio, concedendo à função as autorizações mínimas necessárias para realizar uma determinada tarefa.

Uma função personalizada inclui uma ou mais das autorizações indicadas na referência da IAM. As autorizações relacionadas com a API Cloud Key Management Service começam com a string cloudkms. Para mais informações, consulte o artigo Níveis de apoio técnico para autorizações em funções personalizadas.

Para obter informações sobre as autorizações necessárias para invocar um método específico da API Cloud Key Management Service, consulte a referência da API desse método.

Diretrizes gerais para gerir o acesso no Cloud KMS

Recomendamos que evite usar funções básicas ao nível do projeto, como owner, editor e viewer. Estas funções não separam a capacidade de gerir chaves da capacidade de usar as chaves para operações criptográficas e não são recomendadas para ambientes de produção. Em alternativa, use funções predefinidas ou crie funções personalizadas que reflitam os requisitos da sua empresa.

Os exemplos seguintes ajudam a ilustrar algumas boas diretrizes de segurança:

  • Para uma organização grande ou complexa, pode optar por uma abordagem como a seguinte:

    • Conceda aos membros da sua equipa de segurança de TI a função de administrador do Cloud KMS (roles/cloudkms.admin) em todos os projetos. Se diferentes membros da equipa tratarem de diferentes aspetos do ciclo de vida de uma chave, pode conceder a esses membros da equipa uma função mais detalhada, como a função Importador do Cloud KMS (roles/cloudkms.importer).
    • Conceda a função de encriptar / desencriptar do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a utilizadores ou aplicações que leiam ou escrevam dados encriptados.
    • Conceda a função Visualizador de chaves públicas do Cloud KMS (roles/cloudkms.publicKeyViewer) aos utilizadores ou às aplicações que precisam de ver a parte pública de uma chave usada para encriptação assimétrica.
    • Crie funções predefinidas que correspondam aos requisitos da sua empresa. Por exemplo, o mesmo utilizador pode ter de monitorizar as quotas de um projeto e ver os dados de registo.
  • Para uma pequena organização com requisitos de segurança simples, pode optar por uma abordagem mais simples, concedendo uma função abrangente, como administrador da organização (roles/resourcemanager.organizationAdmin). No entanto, esta abordagem pode não ser escalável com os seus requisitos contínuos.

  • Considere alojar as suas chaves num Google Cloud projeto separado dos dados protegidos por essas chaves. Um utilizador com uma função básica ou altamente privilegiada num projeto, como editor, não pode usar esta função para obter acesso não autorizado a chaves num projeto diferente.

  • Evite conceder a função de owner a qualquer membro. Sem a função owner, nenhum membro no projeto pode criar uma chave e usá-la para desencriptar dados ou para assinar, a menos que cada uma destas autorizações seja concedida a esse membro. Para conceder acesso administrativo amplo sem conceder a capacidade de encriptar ou desencriptar, conceda a função de administrador do Cloud KMS (roles/cloudkms.admin).

  • Para limitar o acesso a dados encriptados, como dados de clientes, pode restringir quem pode aceder à chave e quem pode usar a chave para desencriptação. Se necessário, pode criar funções personalizadas detalhadas para cumprir os requisitos da sua empresa.

A verificar as autorizações

Para cada tipo de objeto do Cloud KMS para o qual pode definir autorizações do IAM detalhadas, esse objeto tem um método testIamPermissions. O método testIamPermissions devolve o conjunto de autorizações que foram concedidas ao autor da chamada para esse objeto.

Não pode definir autorizações de IAM numa versão da chave, pelo que o tipo de objeto CryptoKeyVersion não tem este método.

O método testIamPermissions de um objeto devolve um TestIamPermissionsResponse.

Para ver exemplos de invocação de métodos testIamPermissions, consulte a documentação sobre testar autorizações na documentação do IAM.

O que se segue?

  • Saiba como a IAM centraliza a gestão de autorizações e âmbitos de acesso para Google Cloud recursos.
  • Compreenda os diferentes tipos de objetos do Cloud KMS.