En este tema, se describe cómo encriptar datos localmente y subirlos a Cloud Storage con Tink y Cloud Key Management Service (Cloud KMS) Tink es un biblioteca de criptografía de código abierto escrita por criptógrafos y seguridad ingenieros 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 del esquema basado en Terraform de este instructivo en la Repositorio de kms-solutions de GitHub.
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
permisos para usar las claves de Cloud KMS con Tink
solicita a tu administrador que otorgue el permiso
Función 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 el administrador también pueda darle a tu cuenta de servicio los permisos requeridos a través de la configuración rolesu otros predefinidos roles.
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, debes hacer lo siguiente para encriptar cada mensaje:
- 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 es necesario que implementes este proceso de encriptación de sobre desde cero cuando usas Tink.
Si quieres usar Tink para la encriptación de sobre, debes proporcionarle a Tink 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 usando el 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 KEK tiene la formato:
gcp-kms://projects/<PROJECT>/locations/<LOCATION>/keyRings/
<KEY RING>/cryptoKeys/<KEY NAME>/cryptoKeyVersions/<VERSION>
Consulta Obtén un ID de recurso de Cloud KMS si necesitas información la ruta 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 ofrece una API que maneja una tarea específica. Aquí usamos AEAD, así que usamos el primitivo Tink AEAD.
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.
- Aprende a usar la encriptación del cliente con Cloud SQL.