En este tema, se describe cómo encriptar datos de forma local y subirlos a Cloud Storage con Tink y Cloud Key Management Service (Cloud KMS). Tink es una biblioteca de criptografía de código abierto escrita por criptógrafos e ingenieros de seguridad de Google.
Descripción general
La encriptación del cliente es cualquier encriptación que se realice antes de enviar tus datos a la nube. Cuando usas la encriptación del cliente, tú eres el responsable de crear y administrar las claves de encriptación y encriptar tus datos antes de enviarlos a la nube.
En este tema, implementarás la encriptación de sobre del cliente con Tink a través de una clave de encriptación en Cloud KMS.
Puedes encontrar una versión de este instructivo basada en un modelo de Terraform en el repositorio de GitHub de kms-solutions.
Antes de comenzar
- Crea una clave de encriptación simétrica de Cloud KMS para la encriptación. Toma nota del URI de la clave. La necesitarás más tarde.
- Instala Tink para usarlo con Cloud KMS.
- Crea un bucket en Cloud Storage para subir tus datos encriptados.
Roles obligatorios
Para asegurarte de que tu cuenta de servicio tenga los permisos necesarios para usar claves de Cloud KMS con Tink, pídele a tu administrador que le otorgue a tu cuenta de servicio el rol de IAM de encriptador/desencriptador de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter
) en tu clave.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Es posible que tu administrador también pueda otorgar a tu cuenta de servicio los permisos necesarios mediante roles personalizados o con otros roles predefinidos.
Encriptación de sobre con Tink
En la encriptación de sobre, la clave de Cloud KMS actúa como una clave de encriptación de claves (KEK). Es decir, se usa para encriptar las claves de encriptación de datos (DEK) que, a su vez, se usan para encriptar datos reales.
Después de crear una KEK en Cloud KMS, para encriptar cada mensaje, debes hacer lo siguiente:
- Genera una clave de encriptación de datos (DEK) de manera local.
- Usa esta DEK de forma local para encriptar el mensaje.
- Llama a Cloud KMS para encriptar (unir) la DEK con la KEK.
- Almacena los datos encriptados y la DEK unida.
No necesitas implementar este proceso de encriptación de sobre desde cero cuando usas Tink.
Para usar Tink para la encriptación de sobre, debes proporcionarle un URI de clave y credenciales. El URI de clave apunta a tu KEK en Cloud KMS, y las credenciales permiten que Tink use la KEK. Tink genera la DEK, encripta los datos, une la DEK y muestra un solo texto cifrado con los datos encriptados y la DEK unida.
Tink admite la encriptación de sobre en Python, Java, C++ y Go mediante la primitive de encriptación autenticada con datos asociados (AEAD).
Conecta Tink y Cloud KMS
Para encriptar las DEK que genera Tink con tu KEK en Cloud KMS, debes obtener el URI de tu KEK. En Cloud KMS, el URI de la KEK tiene el siguiente formato:
gcp-kms://projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION
Consulta Cómo obtener un ID de recurso de Cloud KMS para obtener detalles sobre cómo obtener la ruta de acceso a tu clave.
Inicializa Tink y encripta los datos
Tink usa primitivas (elementos básicos de criptografía que administran los detalles de sus algoritmos subyacentes) para que puedas realizar tareas de forma segura. Cada primitiva ofrece una API que controla una tarea específica. Aquí, usamos AEAD, por lo que usamos la primitiva de AEAD de Tink.
Python
Python
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud KMS, consulta las bibliotecas cliente de Cloud KMS.
Para autenticarte en Cloud KMS, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Java
Java
Para obtener información sobre cómo instalar y usar la biblioteca cliente de Cloud KMS, consulta las bibliotecas cliente de Cloud KMS.
Para autenticarte en Cloud KMS, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.
Para obtener más información sobre las primitivas y las interfaces que admite Tink, consulta la página Primeros pasos de Tink.
Próximos pasos
- Obtén más información sobre Tink.
- Obtén información para usar la encriptación del cliente con Cloud SQL.