La firma V4 es un proceso que puedes usar a fin de generar firmas para la autenticación en solicitudes a la API de XML de Cloud Storage. En esta página, se describe cómo usar las bibliotecas cliente de Google Cloud CLI y Cloud Storage para crear URL firmadas con las credenciales de la cuenta de servicio. Las URL firmadas otorgan acceso de lectura o escritura durante un tiempo limitado a un recurso específico de Cloud Storage. Si deseas crear tu propio programa para crear URL firmadas, lee Proceso de firma V4 con tu propio programa.
Antes de comenzar
Para crear URLs firmadas, completa las tareas de las siguientes secciones.
Habilita la API de Service Account Credentials
Enable the Service Account Credentials API.
Obtén las funciones necesarias
A fin de obtener los permisos necesarios para crear una URL firmada a fin de descargar y subir objetos, pídele a tu administrador que otorgue los siguientes roles:
Usuario de objetos de almacenamiento (
roles/storage.objectUser
): Esta función es obligatoria para descargar, subir y reemplazar objetos. Esta función se debe otorgar a la cuenta de servicio cuya clave se usará para firmar la URL.Si solo deseas descargar objetos, pídele al administrador que le otorgue a la cuenta de servicio la función de visualizador de objetos de almacenamiento (
roles/storage.objectViewer
) en lugar de la función de usuario de objetos de almacenamiento.Si solo deseas subir objetos (sin reemplazarlos), pídele a tu administrador que le otorgue a la cuenta de servicio la función de creador de objetos de almacenamiento (
roles/storage.objectCreator
) en lugar de la función de usuario de objetos de almacenamiento.
Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
): Esta función es necesaria para generar credenciales de corta duración para una cuenta de servicio cuando no se proporciona un archivo de claves privadas de forma local. Esta función se debe otorgar a la principal que creará la URL firmada.Si usas credenciales de usuario para la autenticación, tu identidad de usuario debe tener esta función, y debes modificar los comandos a fin de actuar en nombre de la cuenta de servicio que se usa con el fin de firmar la URL.
Si usas una cuenta de servicio adjunta a una instancia de procesamiento para la autenticación, la cuenta de servicio debe tener esta función para actuar en nombre de ella y debes modificar los comandos a fin de actuar en nombre de la cuenta de servicio que se usó para firmar la URL.
Si usas un archivo de claves privadas para la autenticación, esta función no es necesaria.
Estas funciones predefinidas contienen los permisos necesarios para que una cuenta de servicio descargue y suba objetos mediante URL firmadas. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:
Permisos necesarios
storage.objects.get
storage.objects.create
(no es necesario si solo deseas descargar objetos)storage.objects.delete
(no es necesario si no necesitas reemplazar objetos durante la carga)iam.serviceAccounts.signBlob
(no es necesario si planeas proporcionar una clave de cuenta de servicio de forma local para crear la firma, que no requiere llamar al métodosignBlob
)
También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos. Para ver qué roles están asociados con qué permisos, consulta Roles de IAM para Cloud Storage.
Si deseas obtener instrucciones para otorgar roles a proyectos, consulta Administra el acceso a los proyectos.
Crea una URL firmada para descargar un objeto
Para crear una URL firmada que pueda obtener un objeto de un bucket, sigue estos pasos:
Línea de comandos
Genera una clave privada nueva o usa una clave privada existente para una cuenta de servicio. La clave debe estar en formato JSON.
Para obtener más información sobre las claves privadas y cuentas de servicio, consulta Cuentas de servicio.
Usa el comando
gcloud storage sign-url
. Por ejemplo, el siguiente comando crea una URL firmada que permite a los usuarios descargar un objeto durante 10 minutos:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --duration=10m
Donde:
BUCKET_NAME
es el nombre del bucket en el que se encuentra el objeto. Por ejemplo,example-bucket
OBJECT_NAME
es el nombre del objeto que se descargará. Por ejemplo,cat.jpeg
KEY_FILE
es la ruta al archivo que contiene la clave privada de tu cuenta de servicio. Por ejemplo,Desktop/private-key.json
Si se realiza con éxito, la respuesta debería verse de la siguiente manera:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.googleapis.com/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=example%40example-pro ject.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog4_requ est&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-signedhe aders=host
Cualquier persona puede usar la URL para acceder al recurso asociado (en este caso,
cat.jpeg
) durante el tiempo designado (en este caso, 10 minutos).
Bibliotecas cliente
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C++.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C#.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Go.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Node.js.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage PHP.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Ruby.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Crea una URL firmada para subir un objeto
Para crear una URL firmada que pueda subir un objeto a un bucket, sigue estos pasos:
Línea de comandos
Genera una clave privada nueva o usa una clave privada existente para una cuenta de servicio. La clave puede estar en formato JSON o PKCS12.
Para obtener más información sobre las claves privadas y cuentas de servicio, consulta Cuentas de servicio.
Usa el comando
gcloud storage sign-url
. Por ejemplo, el siguiente comando crea una URL firmada que permite a los usuarios subir un archivo durante una hora:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --http-verb=PUT --duration=1h --headers=Content-Type=CONTENT_TYPE
BUCKET_NAME
es el nombre del bucket en el que se subirá el objeto. Por ejemplo,example-bucket
OBJECT_NAME
es el nombre que se asignará al objeto subido. Por ejemplo,cat.png
KEY_FILE
es la ruta al archivo que contiene la clave privada de tu cuenta de servicio. Por ejemplo,Desktop/private-key.json
CONTENT_TYPE
es el tipo de contenido del objeto subido. Por ejemplo,image/png
Si se realiza con éxito, la respuesta debería verse de la siguiente manera:
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.googleapis.com/example-bucket/cat.png? x-goog-signature=2f670a686102963e0574f3c1a3b4d29ee4aa406c1528d42d2 30195d17fef73834b254314de7d7990afd48538a84b66f20010e7ecd90a900490e 6119b7e56a912f71c8d64285c40e86f31b8fec51cf8c7a61ded81de3cedac9c1ca b92474b7371740fdac20b2d8d092b15396f79443bbde954a4174ed11aef6c2cf5f a4d72a84ff60fd6003ed0a505b0e40b6207ddbaec2a15778f715c3ec7537a1b14f b6661b2abaa5736f1670a412ca7e2555c830591f0595c01ff95af7f2206abe2e27 41948c16d4bd4c7cbb25f41277ece59236c06e00ca6c63ae2eb3efc22c216bb24c e1b8b3801d07fd3a7ed3f2df3db6e59c6fc3cc76a002335dd936efd0237cf584e3 6&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=example%40ex ample-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2F goog4_request&x-goog-date=20230714T223547Z&x-goog-expires=3600&x-g oog-signedheaders=Content-Type%3Bhost
Cualquier persona puede usar esta URL a fin de subir un recurso (en este caso,
cat.png
) al bucket de Cloud Storage especificado para el período determinado (en este caso, 1 hora).
Bibliotecas cliente
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C++.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage C#.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Go.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Node.js.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage PHP.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Ruby.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
¿Qué sigue?
- Obtén información para firmar las URLs con tu propio programa.
- Obtén más información sobre las URLs firmadas.
- Obtén más información para subir un objeto con la API de XML.
- Obtén más información sobre cómo subir objetos.