En esta página, se describe cómo usar una clave de encriptación de Cloud Key Management Service con Cloud Storage, lo que incluye la configuración de claves predeterminadas en los depósitos y la adición de claves a objetos individuales. La clave de encriptación de Cloud KMS es una clave de encriptación administrada por el cliente que crea Cloud KMS y la administras tú.
Para obtener más información general sobre Cloud KMS, consulta Cloud KMS.
Requisitos previos
Antes de usar esta función en Cloud Storage, debes realizar las siguientes acciones:
Habilita la API de Cloud KMS del proyecto que almacenará tus claves de encriptación.
Ten el permiso suficiente en el proyecto que almacenará tus claves de encriptación:
Si eres propietario del proyecto que almacenará tus claves, lo más probable es que tengas el permiso necesario.
Si planeas crear claves y llaveros de claves de encriptación nuevos, debes tener los permisos
cloudkms.keyRings.create
ycloudkms.cryptoKey.create
.Ya sea que planees usar claves o llaveros de claves nuevos o existentes, debes tener el permiso
cloudkms.cryptoKey.setIamPolicy
para las claves que usarás en la encriptación.Este permiso te permite otorgar a las cuentas de servicio de Cloud Storage acceso a las claves de Cloud KMS.
Los permisos anteriores se encuentran en la función de administrador de Cloud KMS.
Consulta Usa IAM con Cloud KMS para más instrucciones sobre cómo obtener estas o algunas otras funciones de Cloud KMS.
Ten permiso suficiente para trabajar con objetos en tu bucket de Cloud Storage:
Si eres propietario del proyecto que contiene el bucket, es probable que tengas el permiso necesario.
Si usas IAM, deberías tener el permiso
storage.objects.create
para escribir objetos en el bucket ystorage.objects.get
a fin de leer objetos del bucket. Consulta la sección sobre cómo usar permisos de IAM si quieres ver las instrucciones para obtener una función, como Administrador de objetos de almacenamiento, que tenga estos permisos.Si usas LCA, deberías tener un permiso
WRITER
para buckets a fin de escribir objetos en el bucket y un permisoREADER
para objetos a fin de leer objetos del bucket. Consulta la configuración de las LCA y obtén instrucciones para realizar esto.
Obtén un llavero de claves de Cloud KMS y al menos una clave dentro de este.
-
Obtén la dirección de correo electrónico de la cuenta de servicio asociada con el proyecto que contiene tu depósito de Cloud Storage.
Asigna una clave de Cloud KMS a una cuenta de servicio
Para usar las claves de encriptación administradas por el cliente, otorga permiso a tu cuenta de servicio de Cloud Storage para usar tu clave de Cloud KMS:
Console
- Abre el navegador de claves de Cloud Key Management Service en Google Cloud Console.
Abrir el navegador de claves de Cloud KMS Haz clic en el nombre del llavero de claves que contiene la clave que desees.
Selecciona la casilla de verificación de la clave que deseas.
La pestaña de Permisos en el panel de la ventana derecha estará disponible.
En el cuadro de diálogo Agregar miembros, especifica la dirección de correo electrónico de la cuenta de servicio de Cloud Storage a la que vas a otorgar acceso.
En el menú desplegable Seleccionar una función, selecciona Encriptador y desencriptador de CryptoKey de Cloud KMS.
Haz clic en Agregar.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa el comando gsutil kms authorize
a fin de otorgarle a la cuenta de servicio asociada con tu bucket el permiso para encriptar y desencriptar objetos con tu clave de Cloud KMS:
gsutil kms authorize -p PROJECT_STORING_OBJECTS -k KEY_RESOURCE
Donde:
PROJECT_STORING_OBJECTS
es el ID del proyecto que contiene los objetos que deseas encriptar o desencriptar. Por ejemplo,my-pet-project
.KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.
Si deseas quitar el permiso otorgado, debes usar la herramienta de línea de comandos de gcloud
o Google Cloud Console.
Muestras de código
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
API de REST
API de JSON
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Crea un archivo .json que contenga la siguiente información:
{ "policy": { "bindings": { "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter", "members": "SERVICE_ACCOUNT_EMAIL_ADDRESS" }, } }
En el ejemplo anterior,
SERVICE_ACCOUNT_EMAIL_ADDRESS
es la dirección de correo electrónico asociada a tu cuenta de servicio. Por ejemplo,service-7550275089395@gs-project-accounts.iam.gserviceaccount.com
.Usa
cURL
para llamar a la API de Cloud KMS con una solicitudPOST setIamPolicy
:curl -X POST --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudkms.googleapis.com/v1/KEY_RESOURCE:setIamPolicy"
Donde:
JSON_FILE_NAME
es el nombre del archivo que creaste en el paso 2.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.
API de XML
La API de XML no se puede usar para asignar Cloud KMS a una cuenta de servicio. Usa una de las otras herramientas de Cloud Storage, como gsutil, en su lugar.
Usa las claves de encriptación predeterminadas
Agrega o cambia las claves predeterminadas de un bucket
Sigue los pasos a continuación para agregar o cambiar la clave de Cloud KMS que se usa de forma predeterminada cuando los objetos se escriben en un bucket:
Console
- Abre el navegador de Cloud Storage en Google Cloud Console.
Abrir el navegador de Cloud Storage En la lista de bucket s, haz clic en el bucket que desees.
En la página de detalles del bucket, haz clic en la pestaña Configuración.
Haz clic en el ícono de lápiz asociado a la entrada Tipo de encriptación.
Si el bucket no usa actualmente una clave de Cloud KMS, selecciona el botón de selección Clave administrada por el cliente.
En el menú desplegable asociado con las claves administradas por el cliente, selecciona una de las claves disponibles.
Haz clic en Guardar.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa el comando gsutil kms encryption
:
gsutil kms encryption -k KEY_RESOURCE gs://BUCKET_NAME
Donde:
KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.BUCKET_NAME
es el nombre del bucket correspondiente. Por ejemplo,my-bucket
.
Si se ejecuta de forma correcta, la respuesta se ve de la siguiente manera:
Setting default KMS key for bucket gs://my-bucket...
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
API de REST
API de JSON
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Crea un archivo .json que contenga la siguiente información:
{ "encryption": { "defaultKmsKeyName": "KEY_RESOURCE" } }
En el ejemplo anterior,
KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.Usa
cURL
para llamar a la API de JSON con una solicitud de bucketPATCH
:curl -X PATCH --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
Donde:
JSON_FILE_NAME
es el archivo que creaste en el paso 2.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del depósito correspondiente. Por ejemplo,my-bucket
.
API de XML
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Crea un archivo .xml que contenga la siguiente información:
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
En el ejemplo anterior,
KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.Usa
cURL
para llamar a la API de XML con una solicitud de bucketPUT
y un parámetro de string de consultaencryption
:curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
Donde:
XML_FILE_NAME
es el archivo que creaste en el paso 2.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del depósito correspondiente. Por ejemplo,my-bucket
.
Ve la clave predeterminada de un bucket
Sigue los pasos a continuación para ver la clave de Cloud KMS que actualmente está configurada como predeterminada en tu bucket:
Console
- Abre el navegador de Cloud Storage en Google Cloud Console.
Abrir el navegador de Cloud Storage En la lista de bucket s, haz clic en el bucket que desees.
En la página de detalles del bucket, haz clic en la pestaña Configuración.
La clave predeterminada actual de tu bucket aparece en el campo Clave de encriptación.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa el comando gsutil kms encryption
:
gsutil kms encryption gs://BUCKET_NAME
En el ejemplo anterior, BUCKET_NAME
es el nombre del bucket cuya clave deseas ver. Por ejemplo, my-bucket
.
Si tiene éxito, la respuesta se ve de la manera siguiente:
Default encryption key for gs://my-bucket: KEY_RESOURCE
API de REST
API de JSON
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Usa
cURL
para llamar a la API de JSON con una solicitud de bucketGET
que incluya losfields
deseados:curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
Donde:
OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del bucket cuya clave deseas ver. Por ejemplo,my-bucket
.
La respuesta se ve como el siguiente ejemplo:
{ "encryption" : { "defaultKmsKeyName": "KEY_RESOURCE" }, }
API de XML
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Usa
cURL
para llamar a la API de XML con una solicitud de bucketGET
que incluya el parámetro de consultaencryption
:curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
Donde:
OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del bucket cuya clave deseas ver. Por ejemplo,my-bucket
.
La respuesta se ve como el siguiente ejemplo:
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
Quita la clave predeterminada de un bucket
Sigue los pasos a continuación para quitar cualquier conjunto de claves de Cloud KMS predeterminadas en un bucket:
Console
- Abre el navegador de Cloud Storage en Google Cloud Console.
Abrir el navegador de Cloud Storage En la lista de bucket s, haz clic en el bucket que desees.
En la página de detalles del bucket, haz clic en la pestaña Configuración.
Haz clic en el ícono de lápiz asociado a la entrada Tipo de encriptación.
Selecciona el botón de selección Clave administrada por Google.
Haz clic en Guardar.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa el comando gsutil kms encryption
:
gsutil kms encryption -d gs://BUCKET_NAME
En el ejemplo anterior, BUCKET_NAME
es el nombre del depósito correspondiente. Por ejemplo, my-bucket
.
Si se ejecuta de forma correcta, la respuesta se ve de la siguiente manera:
Clearing default encryption key for gs://my-bucket...
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
API de REST
API de JSON
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Crea un archivo .json que contenga la siguiente información:
{ "encryption": { "defaultKmsKeyName": null } }
Usa
cURL
para llamar a la API de JSON con una solicitud de bucketPATCH
:curl -X PATCH --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
Donde:
JSON_FILE_NAME
es el archivo que creaste en el paso 2.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del depósito correspondiente. Por ejemplo,my-bucket
.
API de XML
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Crea un archivo .xml que contenga la siguiente información:
<EncryptionConfiguration></EncryptionConfiguration>
Usa
cURL
para llamar a la API de XML con una solicitud de bucketPUT
y un parámetro de string de consultaencryption
:curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
Donde:
XML_FILE_NAME
es el archivo que creaste en el paso 2.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del depósito correspondiente. Por ejemplo,my-bucket
.
Encripta un objeto con una clave de Cloud KMS
Puedes encriptar un objeto individual con una clave de Cloud KMS. Esto es útil si deseas usar una clave diferente a la clave predeterminada establecida en el bucket o si no tienes una clave predeterminada establecida en el bucket.
Console
Cloud Console no se puede usar para encriptar objetos individuales. Usa gsutil o las bibliotecas cliente en su lugar.
gsutil
Agrega la siguiente opción a la sección
[GSUtil]
de tu archivo de configuración .boto:encryption_key = KEY_RESOURCE
En el ejemplo anterior,
KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.Escribe un objeto en el bucket como lo harías siempre, por ejemplo, con
gsutil cp
ogsutil rewrite
.
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
En el siguiente ejemplo, se encripta un objeto con una clave de encriptación administrada por el cliente:
En el siguiente ejemplo, se cambia la clave que se usa para encriptar un objeto de una clave de encriptación proporcionada por el cliente a una clave de encriptación administrada por el cliente:
API de REST
API de JSON
- Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
Agrega los datos del objeto al cuerpo de la solicitud.
Usa
cURL
para llamar a la API de JSON con una solicitud de objetoPOST
:curl -X POST --data-binary @OBJECT \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o?uploadType=media&name=OBJECT_NAME&kmsKeyName=KEY_RESOURCE"
Donde:
OBJECT
es la ruta de acceso al objeto que deseas subir. Por ejemplo,Desktop/dog.png
.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.OBJECT_CONTENT_TYPE
es el tipo de contenido del objeto. Por ejemplo,image/png
.BUCKET_NAME
es el nombre del bucket al que subes el objeto. Por ejemplo,my-bucket
.OBJECT_NAME
es el nombre del objeto que deseas subir. Por ejemplo,pets/dog.png
.KEY_RESOURCE
es el recurso de claves de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.
API de XML
- Obtén un token de autorización de acceso de OAuth 2.0 Playground. Configura Playground para usar tus propias credenciales de OAuth.
Agrega los datos del objeto al cuerpo de la solicitud.
Usa
cURL
para llamar a la API de XML con una solicitud de objetoPUT
:curl -X PUT --data-binary @OBJECT \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-kms-key-name: KEY_RESOURCE" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
Donde:
OBJECT
es la ruta de acceso al objeto que deseas subir. Por ejemplo,Desktop/dog.png
.OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.OBJECT_CONTENT_TYPE
es el tipo de contenido del objeto. Por ejemplo,image/png
.BUCKET_NAME
es el nombre del bucket al que subes el objeto. Por ejemplo,my-bucket
.OBJECT_NAME
es el nombre del objeto que deseas subir. Por ejemplo,pets/dog.png
.KEY_RESOURCE
es el recurso de clave de Cloud KMS. Por ejemplo,projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
.
Identifica la clave que se usó para encriptar un objeto
Sigue los pasos a continuación a fin de encontrar el nombre de la clave de Cloud KMS que se usó para encriptar un objeto:
Console
- Abre el navegador de Cloud Storage en Google Cloud Console.
Abrir el navegador de Cloud Storage En la lista de bucket s, haz clic en el nombre del bucket que contiene el objeto deseado.
Se abrirá la página Detalles del bucket y se seleccionará la pestaña Objetos.
Navega hasta el objeto, que puede estar en una carpeta.
En la columna Encriptación, coloca el cursor sobre la entrada del objeto que desees.
El nombre de la clave aparece en el siguiente formato:
LOCATION/KEY_RING_NAME/KEY_NAME/KEY_VERSION
gsutil
Usa el comando gsutil stat
:
gsutil stat gs://BUCKET_NAME/OBJECT_NAME
Donde:
BUCKET_NAME
es el nombre del bucket que contiene el objeto encriptado. Por ejemplo,my-bucket
.OBJECT_NAME
es el nombre del objeto encriptado. Por ejemplo,pets/dog.png
.
Si tiene éxito, la respuesta contiene el siguiente nombre de la clave:
gs://my-bucket/pets/dog.png: ... KMS key: projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key ...
API de REST
API de JSON
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Usa
cURL
para llamar a la API de JSON con una solicitud de objetoGET
:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?fields=kmsKeyName"
Donde:
OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del bucket que contiene el objeto encriptado. Por ejemplo,my-bucket
.OBJECT_NAME
es el nombre del objeto encriptado. Por ejemplo,pets/dog.png
.
API de XML
- Obtén un token de acceso de autorización de OAuth 2.0 Playground. Configura Playground para usar tus credenciales de OAuth.
Usa
cURL
para llamar a la API de XML con una solicitud de objetoGET
:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?encryption"
Donde:
OAUTH2_TOKEN
es el token de acceso que generaste en el paso 1.BUCKET_NAME
es el nombre del bucket que contiene el objeto encriptado. Por ejemplo,my-bucket
.OBJECT_NAME
es el nombre del objeto encriptado. Por ejemplo,pets/dog.png
.
Desencripta un objeto
Desencriptar un objeto encriptado con una clave de encriptación administrada por el cliente se hace automáticamente siempre que la cuenta de servicio relevante tenga acceso a la clave. Si quieres obtener más información, consulta Cuentas de servicio.
¿Qué sigue?
- Obtén más información sobre las claves de encriptación administradas por el cliente en Cloud Storage.
- Obtén más información sobre otras opciones de encriptación disponibles en Cloud Storage.
- Explora otros productos que pueden funcionar con Cloud KMS.