Permisos y funciones

En Cloud KMS, los recursos se organizan en una jerarquía. Esta jerarquía te ayuda a administrar y otorgar acceso a los recursos en varios niveles de detalle. Las claves se encuentran dentro de llaveros de claves y estos existen dentro de un proyecto. Las conexiones de EKM también existen dentro de un proyecto. Los proyectos se pueden organizar en organizaciones o carpetas.

En este tema, se proporcionan más detalles sobre la jerarquía de recursos dentro de Cloud KMS. Para obtener más información sobre los recursos de Google Cloud en general, consulta Jerarquía de recursos.

Jerarquía de recursos

El permiso de una función de IAM cambia según el nivel de la jerarquía de recursos en la que se otorga la función. En esta tabla, se muestran las capacidades efectivas otorgadas por la función de encriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) en diferentes niveles de la jerarquía.

Puedes administrar el acceso a claves o llaveros de claves, pero no a versiones de claves individuales.

Jerarquía de recursos Función
Organización Encripta con todas las claves de todos los proyectos de la organización
Carpeta Encripta con todas las claves en todos los proyectos de la carpeta
Proyecto Encripta con todas las claves en el proyecto
Llavero de claves Encripta con todas las claves en el llavero de claves
Clave Encripta solo con esa clave

Principios de seguridad

IAM ayuda a aplicar los principios de seguridad interrelacionados de la separación de obligaciones y del privilegio mínimo:

  • Cuando aplicas el principio de separación de obligaciones, ningún miembro tiene todo el acceso necesario para completar una función empresarial fundamental. Por ejemplo, un emisor de una cuenta bancaria solo puede retirar fondos de una cuenta cuando el titular de la cuenta está presente físicamente e inicia la transacción.

  • Cuando aplicas el principio de privilegio mínimo, un miembro solo tiene el nivel mínimo de acceso necesario para completar las funciones empresariales específicas de ese miembro. Por ejemplo, a un emisor del banco no se le otorga de forma automática la capacidad de aprobar un préstamo del cliente.

Funciones predefinidas

IAM proporciona funciones predefinidas que otorgan acceso para cada tipo de recursos de Google Cloud. Si ninguna función predefinida cumple con tus necesidades, puedes crear una función personalizada.

IAM ofrece las siguientes funciones predefinidas para 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

Funciones personalizadas

Además de las funciones predefinidas, puedes crear funciones personalizadas. Las funciones personalizadas te permiten aplicar el principio de privilegio mínimo y otorgarles los permisos mínimos necesarios para realizar una tarea determinada.

Una función personalizada incluye uno o más de los permisos enumerados en la referencia de IAM. Los permisos relacionados con la API de Cloud Key Management Service comienzan con la string cloudkms. Si deseas obtener más información, consulta Niveles de asistencia para los permisos en funciones personalizadas.

Si deseas obtener información sobre los permisos necesarios para invocar un método específico de la API de Cloud Key Management Service, consulta la referencia de la API de ese método.

Lineamientos generales para administrar el acceso en Cloud KMS

Te recomendamos que evites usar funciones básicas en todo el proyecto, como owner, editor y viewer. Estas funciones no separan la capacidad de administrar claves de la capacidad de usarlas para operaciones criptográficas y no se recomiendan para entornos de producción. En su lugar, usa funciones predefinidas o crea funciones personalizadas que reflejen los requisitos de tu negocio.

Los siguientes ejemplos ayudan a ilustrar algunos lineamientos de seguridad adecuados:

  • Para una organización grande o compleja, puedes decidir un enfoque como el siguiente:

    • Otorga a los miembros de tu equipo de seguridad de TI la función de administrador de Cloud KMS (roles/cloudkms.admin) en todos los proyectos. Si diferentes miembros del equipo controlan diferentes aspectos del ciclo de vida de una clave, puedes otorgar a esos miembros una función más detallada, como la función de importador de Cloud KMS (roles/cloudkms.importer).
    • Otorga la función Encriptador / Desencriptador de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) a los usuarios o aplicaciones que leen o escriben datos encriptados.
    • Otorga la función de visualizador de claves públicas de Cloud KMS (roles/cloudkms.publicKeyViewer) a los usuarios o aplicaciones que necesitan ver la parte pública de una clave que se usa para la encriptación asimétrica.
    • Crea funciones predefinidas que coincidan con los requisitos de tu empresa. Por ejemplo, es posible que el mismo usuario necesite supervisar las cuotas de un proyecto y ver los datos de registro.
  • Para una organización pequeña con requisitos de seguridad simples, puedes optar por un enfoque más simple y otorgar una función amplia, como Administrador de la organización (roles/resourcemanager.organizationAdmin). Sin embargo, este enfoque podría no escalar con tus requisitos en curso.

  • Considera alojar tus claves en un proyecto de Google Cloud separado de los datos protegidos por esas claves. Un usuario con una función básica o con muchos privilegios en un proyecto, como editor, no puede usarla para obtener acceso no autorizado a las claves de otro proyecto.

  • Evita otorgar la función owner a cualquier miembro. Sin la función owner, ningún miembro del proyecto puede crear una clave y usarla para desencriptar datos o firmar, a menos que se otorgue cada uno de estos permisos a ese miembro. Para otorgar acceso de administrador general sin otorgar la capacidad de encriptar o desencriptar, otorga la función de administrador de Cloud KMS (roles/cloudkms.admin).

  • Para limitar el acceso a los datos encriptados, como los datos del cliente, puedes restringir quién puede acceder a la clave y quién puede usarla para la desencriptación. Si es necesario, puedes crear funciones personalizadas detalladas para cumplir con los requisitos de tu negocio.

Cómo verificar permisos

Para cada tipo de objeto de Cloud KMS en el que puedes establecer permisos de IAM detallados, ese objeto tiene un método testIamPermissions. El método testIamPermissions muestra el conjunto de permisos que se otorgaron al emisor para ese objeto.

No puedes configurar permisos de IAM en una versión de clave, por lo que el tipo de objeto CryptoKeyVersion no tiene este método.

El método testIamPermissions de un objeto muestra un TestIamPermissionsResponse.

Si deseas obtener ejemplos para invocar métodos de testIamPermissions, consulta la documentación a fin de probar los permisos en la documentación de IAM.

¿Qué sigue?

  • Descubre cómo IAM centraliza la administración de los permisos y los niveles de acceso para los recursos de Google Cloud.
  • Comprende los diferentes tipos de objetos de Cloud KMS.