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. Los proyectos se pueden organizar en carpetas u organizaciones.

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:

Función Permisos

Administrador de Cloud KMS
(roles/cloudkms.admin)

Proporciona acceso completo a los recursos de Cloud KMS, excepto a las operaciones de encriptación y desencriptación.

Recursos de nivel más bajo en los que puedes otorgar esta función:

  • 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.importJobs.*
  • cloudkms.keyRings.*
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Desencriptador de CryptoKey de Cloud KMS
(roles/cloudkms.cryptoKeyDecrypter)

Proporciona la capacidad de usar los recursos de Cloud KMS solo para operaciones de desencriptación.

Recursos de nivel más bajo en los que puedes otorgar esta función:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Desencriptador de CryptoKey de Cloud KMS mediante delegación
(roles/cloudkms.cryptoKeyDecrypterViaDelegation)

Habilita las operaciones de desencriptación mediante otros servicios de GCP.

  • cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Encriptador de CryptoKey de Cloud KMS
(roles/cloudkms.cryptoKeyEncrypter)

Proporciona la capacidad de usar los recursos de Cloud KMS solo para operaciones de encriptación.

Recursos de nivel más bajo en los que puedes otorgar esta función:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Encriptador y desencriptador de CryptoKey de Cloud KMS
(roles/cloudkms.cryptoKeyEncrypterDecrypter)

Proporciona la capacidad de usar los recursos de Cloud KMS solo para operaciones de encriptación y desencriptación.

Recursos de nivel más bajo en los que puedes otorgar esta función:

  • CryptoKey
  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Encriptador/desencriptador de CryptoKey de Cloud KMS mediante delegación
(roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation)

Habilita las operaciones de encriptación y desencriptación a través de otros servicios de GCP.

  • cloudkms.cryptoKeyVersions.useToDecryptViaDelegation
  • cloudkms.cryptoKeyVersions.useToEncryptViaDelegation
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Encriptador de CryptoKey de Cloud KMS mediante delegación
(roles/cloudkms.cryptoKeyEncrypterViaDelegation)

Habilita las operaciones de encriptación mediante otros servicios de GCP.

  • cloudkms.cryptoKeyVersions.useToEncryptViaDelegation
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Operador criptográfico de Cloud KMS
(roles/cloudkms.cryptoOperator)

Habilita todas las operaciones criptográficas.

  • cloudkms.cryptoKeyVersions.useToDecrypt
  • cloudkms.cryptoKeyVersions.useToEncrypt
  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.*
  • resourcemanager.projects.get

Administrador de claves PKCS#1 sin procesar experto de Cloud KMS
(roles/cloudkms.expertRawPKCS1)

Habilita la administración de claves PKCS#1 sin procesar.

  • cloudkms.cryptoKeyVersions.manageRawPKCS1Keys
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

Importador de Cloud KMS
(roles/cloudkms.importer)

Habilita las operaciones ImportCryptoKeyVersion, CreateImportJob, ListImportJobs y GetImportJob

  • cloudkms.importJobs.create
  • cloudkms.importJobs.get
  • cloudkms.importJobs.list
  • cloudkms.importJobs.useToImport
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Visualizador de claves CryptoKey públicas de Cloud KMS
(roles/cloudkms.publicKeyViewer)

Habilita las operaciones GetPublicKey

  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Firmante de CryptoKey de Cloud KMS
(roles/cloudkms.signer)

Habilita las operaciones Sign

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Verificador y firmante de CryptoKey de Cloud KMS
(roles/cloudkms.signerVerifier)

Habilita las operaciones Sign, Verify y GetPublicKey

  • cloudkms.cryptoKeyVersions.useToSign
  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Verificador de CryptoKey de Cloud KMS
(roles/cloudkms.verifier)

Habilita las operaciones Verify y GetPublicKey.

  • cloudkms.cryptoKeyVersions.useToVerify
  • cloudkms.cryptoKeyVersions.viewPublicKey
  • cloudkms.locations.get
  • cloudkms.locations.list
  • resourcemanager.projects.get

Visualizador de Cloud KMS
(roles/cloudkms.viewer)

Habilita las operaciones Get y List.

  • cloudkms.cryptoKeyVersions.get
  • cloudkms.cryptoKeyVersions.list
  • cloudkms.cryptoKeys.get
  • cloudkms.cryptoKeys.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 mediante la asignación de una función amplia, como administrador de la organización (roles/resourcemanager.organizationAdmin). Sin embargo, es posible que este enfoque no se escale 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 una gran cantidad de privilegios en un proyecto, como editor, no puede usar esta función para obtener acceso no autorizado de claves en 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.