La firma V4 es un proceso que puedes usar para generar firmas para la autenticación en solicitudes de la API XML de Cloud Storage. En esta página se describe cómo usar la CLI de Google Cloud y las bibliotecas de cliente de Cloud Storage para crear URLs firmadas con credenciales de cuentas de servicio. Las URLs firmadas proporcionan acceso de lectura o escritura a un recurso de Cloud Storage específico durante un tiempo limitado. Si quieres crear tu propio programa para generar URLs firmadas, consulta Firma V4 con tu propio programa.
Antes de empezar
Antes de realizar las tareas de esta página, sigue estos pasos:
Enable the Service Account Credentials API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Crea una cuenta de servicio. Si ya tienes una cuenta de servicio que quieres usar para firmar URLs, puedes saltarte este paso.
Concede a la cuenta de servicio los permisos suficientes para que pueda llevar a cabo la solicitud que hará la URL firmada. Por ejemplo, si la URL firmada permite que un usuario lea los datos de un objeto, la cuenta de servicio debe tener permiso para leer los datos del objeto.
Para llevar a cabo las tareas descritas en esta guía, pide a tu administrador que asigne uno de los siguientes roles de gestión de identidades y accesos (IAM) a la cuenta de servicio:
Usuario de objetos de Storage (
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 sobrescribir un objeto.Visor de objetos de Storage (
roles/storage.objectViewer
): usa este rol si solo quieres crear URLs firmadas para descargar objetos.Creador de objetos de Storage (
roles/storage.objectCreator
): usa este rol si solo quieres crear URLs firmadas para subir objetos y el objeto subido no sobrescribirá un objeto que ya esté en el segmento.
Estos roles predefinidos contienen los permisos necesarios para crear URLs firmadas que descarguen y suban objetos. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
storage.objects.get
(no es necesario si solo quieres subir objetos)storage.objects.create
(no es necesario si solo quieres descargar objetos)storage.objects.delete
(no es obligatorio si no necesitas sobrescribir objetos al subirlos)
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos. Para ver qué roles están asociados a qué permisos, consulta Roles de gestión de identidades y accesos de Cloud Storage.
Tener permisos suficientes para firmar blobs con la cuenta de servicio. Pide a tu administrador que te asigne el rol Creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator
).Si usas credenciales de usuario para la autenticación, debes ser la entidad de seguridad a la que se le ha asignado este rol, y este rol se debe conceder a la cuenta de servicio que se usará para crear las URLs firmadas.
Si usas una cuenta de servicio asociada a una instancia de proceso para la autenticación, la cuenta de servicio debe ser la principal de este rol para poder suplantar su identidad. Este rol debe concederse en el proyecto que contenga 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, amplía la sección Permisos necesarios:
Permisos obligatorios
iam.serviceAccounts.signBlob
También puedes obtener este permiso con roles personalizados u otros roles predefinidos. Para ver qué roles están asociados a qué permisos, consulta Roles de gestión de identidades y accesos de Cloud Storage.
Para obtener instrucciones sobre cómo asignar roles en proyectos, consulta el artículo Gestionar el acceso a proyectos.
Crear una URL firmada para descargar un objeto
Para crear una URL firmada que pueda obtener un objeto de un contenedor, 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 contenedor en el que se encuentra el objeto. Por ejemplo,example-bucket
.OBJECT_NAME
es el nombre del objeto que se va a descargar. Por ejemplo,cat.jpeg
.SERVICE_ACCOUNT_EMAIL
es la dirección de correo de una cuenta de servicio cuya clave se usará para firmar. Por ejemplo,signed-url-account@my-project.iam.gserviceaccount.com
.
Si la solicitud se ha realizado correctamente, la respuesta debería tener este aspecto:
--- 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 esta URL para acceder al recurso asociado (en este caso,
cat.jpeg
) durante el periodo de tiempo designado (en este caso, 10 minutos).
Bibliotecas de cliente
C++
Para obtener más información, consulta la documentación de referencia de la API C++ de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
C#
Para obtener más información, consulta la documentación de referencia de la API C# de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Go
Para obtener más información, consulta la documentación de referencia de la API Go de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Java
Para obtener más información, consulta la documentación de referencia de la API Java de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Para obtener más información, consulta la documentación de referencia de la API Node.js de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
PHP
Para obtener más información, consulta la documentación de referencia de la API PHP de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Python
Para obtener más información, consulta la documentación de referencia de la API Python de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Ruby
Para obtener más información, consulta la documentación de referencia de la API Ruby de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Crear una URL firmada para subir un objeto
Para crear una URL firmada que pueda subir un objeto a un contenedor, 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 cubo en el que se está subiendo 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 de una cuenta de servicio cuya clave se usará para firmar. 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 la solicitud se ha realizado correctamente, la respuesta debería tener este aspecto:
--- 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 para subir un recurso (en este caso,
cat.png
) al bucket de Cloud Storage especificado durante el periodo de tiempo indicado (en este caso, 1 hora).
Bibliotecas de cliente
C++
Para obtener más información, consulta la documentación de referencia de la API C++ de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
C#
Para obtener más información, consulta la documentación de referencia de la API C# de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Go
Para obtener más información, consulta la documentación de referencia de la API Go de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Java
Para obtener más información, consulta la documentación de referencia de la API Java de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Node.js
Para obtener más información, consulta la documentación de referencia de la API Node.js de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
PHP
Para obtener más información, consulta la documentación de referencia de la API PHP de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Python
Para obtener más información, consulta la documentación de referencia de la API Python de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Ruby
Para obtener más información, consulta la documentación de referencia de la API Ruby de Cloud Storage.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Siguientes pasos
- Consulta cómo firmar URLs con tu propio programa.
- Más información sobre las URLs firmadas
- Consulta cómo subir un objeto con la API XML.
- Consulta información sobre cómo subir objetos.