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
Antes de realizar las tareas de esta página, completa los siguientes pasos:
Enable the Service Account Credentials API.
Crea una cuenta de servicio. Si ya tienes una cuenta de servicio que deseas usar para firmar URLs, puedes omitir este paso.
Otorga suficientes permisos a la cuenta de servicio para que pueda llevar a cabo la solicitud que realizará la URL firmada. Por ejemplo, si la URL firmada permitirá que un usuario lea datos de objetos, la cuenta de servicio debe tener permiso para leer los datos del objeto.
Para las tareas que se describen en esta guía, pídele al administrador que otorgue uno de los siguientes roles de IAM a la cuenta de servicio:
Usuario de objetos de almacenamiento (
roles/storage.objectUser
): Usa este rol para crear URLs firmadas para subir y descargar objetos. Este rol también es obligatorio si la URL firmada puede reemplazar un objeto existente.Visualizador de objetos de almacenamiento (
roles/storage.objectViewer
): Usa este rol si solo quieres crear URLs firmadas para descargar objetos.Creador de objetos de almacenamiento (
roles/storage.objectCreator
): Usa este rol si solo quieres crear URLs firmadas para subir objetos y el objeto subido no reemplazará un objeto existente en el bucket.
Estos roles predefinidos contienen los permisos necesarios para crear URLs firmadas que descarguen y suban objetos. Para ver los permisos exactos que son necesarios, expande la sección Permisos necesarios:
Permisos necesarios
storage.objects.get
(no es necesario si solo deseas subir objetos)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)
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.
Tener permisos suficientes para firmar objetos blob con la cuenta de servicio Pídele al administrador que te otorgue el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
).Si usas credenciales de usuario para la autenticación, debes ser el principal al que se le asignó este rol, y este rol se debe otorgar en la cuenta de servicio que se usará para crear las URLs firmadas.
Si usas una cuenta de servicio adjunta a una instancia de procesamiento para la autenticación, la cuenta de servicio debe ser el miembro principal de este rol para actuar en su nombre, y este rol se debe otorgar en el proyecto que contiene la cuenta de servicio.
Este rol predefinido contiene el permiso necesario para firmar blobs con una cuenta de servicio. Para ver el permiso exacto que se necesita, expande la sección Permisos requeridos:
Permisos necesarios
iam.serviceAccounts.signBlob
También puedes obtener este permiso 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
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 --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --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
SERVICE_ACCOUNT_EMAIL
es la dirección de correo electrónico de una cuenta de servicio cuya clave realizará la firma. Por ejemplo,signed-url-account@my-project.iam.gserviceaccount.com
.
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=signed-url-account%40 my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog 4_request&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-si gnedheaders=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
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 --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --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
SERVICE_ACCOUNT_EMAIL
es la dirección de correo electrónico de una cuenta de servicio cuya clave realizará la firma. Por ejemplo,signed-url-account@my-project.iam.gserviceaccount.com
.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=signed-url-a ccount%40my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstor age%2Fgoog4_request&x-goog-date=20230714T223547Z&x-goog-expires=36 00&x-goog-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.