Permissões e papéis

No Cloud KMS, os recursos são organizados em uma hierarquia. Essa hierarquia ajuda você a gerenciar e conceder acesso a recursos em vários níveis de granularidade. As chaves são armazenadas em keyrings que existem em um projeto. Também existem conexões EKM dentro de um projeto. Os projetos podem ser organizados em pastas ou organizações.

Neste tópico, apresentamos mais detalhes sobre a hierarquia de recursos no Cloud KMS. Para saber mais sobre os recursos do Google Cloud em geral, consulte Hierarquia de recursos.

Hierarquia de recursos

O escopo de um papel do IAM muda dependendo do nível da hierarquia de recursos em que o papel foi concedido. Nesta tabela, mostramos os recursos efetivos concedidos pelo papel Criptografador do Cloud KMS CryptoKey (roles/cloudkms.cryptoKeyEncrypter) em diferentes níveis da hierarquia.

É possível gerenciar o acesso a chaves ou keyrings, mas não a versões de chaves individuais.

Hierarquia de recursos Capacidade
Organização Criptografar usando todas as chaves em todos os projetos da organização
Pasta Criptografar usando todas as chaves em todos os projetos da pasta
Projeto Criptografar usando todas as chaves do projeto
Keyring Criptografar usando todas as chaves do keyring
Chave Criptografar usando apenas esta chave

Princípios de segurança

O IAM ajuda a aplicar os princípios de segurança inter-relacionados da separação de deveres e de privilégio mínimo:

  • Quando você aplica o princípio de separação de deveres, nenhum membro tem todo o acesso necessário para concluir uma função comercial importante. Por exemplo, um caixa de banco só pode retirar fundos de uma conta quando o titular da conta está fisicamente presente e inicia a transação.

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

Papéis predefinidos

O IAM oferece papéis predefinidos que concedem acesso a cada tipo de recurso do Google Cloud. Se nenhum papel predefinido atender às suas necessidades, crie um papel personalizado.

O IAM oferece os seguintes papéis predefinidos 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.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

Papéis personalizados

Além dos papéis predefinidos, é possível criar papéis personalizados. Os papéis personalizados permitem que você aplique o princípio de privilégio mínimo concedendo ao papel as permissões mínimas necessárias para executar uma determinada tarefa.

Um papel personalizado inclui uma ou mais permissões listadas na referência do IAM. As permissões relacionadas à API Cloud Key Management Service começam com a string cloudkms. Para mais informações, consulte Níveis de suporte para permissões em papéis personalizados.

Para mais informações sobre as permissõ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 gerenciar o acesso no Cloud KMS

Evite o uso de papéis básicos em todo o projeto, como owner, editor e viewer. Esses papéis não separam a capacidade de gerenciar chaves da capacidade de usá-las para operações criptográficas e não são recomendados em ambientes de produção. Em vez deles, use os papéis predefinidos ou crie papéis personalizados conforme os requisitos da sua empresa.

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

  • Para uma organização grande ou complexa, escolha uma abordagem como esta:

    • Conceda aos membros da equipe de segurança de TI o papel Administrador do Cloud KMS (roles/cloudkms.admin) em todos os projetos. Se membros da equipe diferentes cuidam de aspectos distintos do ciclo de vida de uma chave, conceda a eles um papel mais granular, como Importador do Cloud KMS (roles/cloudkms.importer).
    • Conceda o papel Criptografador/Descriptografador do Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a usuários ou aplicativos que leem ou gravam dados criptografados.
    • Conceda o papel Leitor de chave pública do Cloud KMS (roles/cloudkms.publicKeyViewer) a usuários ou aplicativos que precisam visualizar a parte pública de uma chave usada para criptografia assimétrica.
    • Crie papéis predefinidos que correspondam aos requisitos da sua empresa. Por exemplo, o mesmo usuário pode precisar monitorar as cotas de um projeto e visualizar os dados do registro.
  • Para uma organização de pequeno porte com requisitos de segurança simples, é possível adotar uma abordagem mais simples concedendo um papel amplo, como Administrador da organização (roles/resourcemanager.organizationAdmin). No entanto, essa abordagem pode não ser escalonada de acordo com seus requisitos dinâmicos.

  • Considere hospedar suas chaves em um projeto do Google Cloud separado dos dados protegidos por essas chaves. Um usuário com um papel básico ou altamente privilegiado em um projeto, como editor, não pode usar esse papel para ter acesso não autorizado às chaves em um projeto diferente.

  • Evite conceder o papel owner a qualquer membro. Sem o papel owner, nenhum membro do projeto pode criar uma chave e usá-la para descriptografar dados ou para assinatura, a menos que cada uma dessas permissões seja concedida ao membro. Para conceder acesso administrativo amplo sem a capacidade de criptografar ou descriptografar, conceda o papel Administrador do Cloud KMS (roles/cloudkms.admin).

  • Para limitar o acesso a dados criptografados, como dados do cliente, é possível restringir quem pode acessar a chave e quem pode usá-la para descriptografia. Se necessário, crie papéis personalizados granulares para atender aos requisitos da sua empresa.

Como verificar permissões

Para cada tipo de objeto do Cloud KMS em que é possível definir permissões granulares do IAM, esse objeto tem um método testIamPermissions. O método testIamPermissions retorna o conjunto de permissões que o autor da chamada recebeu para esse objeto.

Não é possível definir permissões do IAM em uma versão da chave. Portanto, o tipo de objeto CryptoKeyVersion não tem esse método.

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

Para exemplos de como invocar métodos testIamPermissions, consulte a documentação sobre permissões de teste na documentação do IAM.

A seguir

  • Saiba como o IAM centraliza o gerenciamento de permissões e escopos de acesso dos recursos do Google Cloud.
  • Entenda os diferentes tipos de objetos do Cloud KMS.