Solución de problemas

En esta página se describen los métodos para solucionar problemas habituales que pueden surgir al usar Cloud Storage.

Consulta el Google Cloud panel de estado de los servicios para obtener información sobre los incidentes que afectan a los Google Cloud servicios, como Cloud Storage.

Registrar solicitudes sin procesar

Cuando se usan herramientas como gcloud o las bibliotecas de cliente de Cloud Storage, la herramienta se encarga de gran parte de la información de las solicitudes y las respuestas. Sin embargo, a veces es útil ver los detalles para solucionar problemas o cuando se publican preguntas en foros como Stack Overflow. Sigue estas instrucciones para devolver los encabezados de solicitud y respuesta de tu herramienta:

Consola

La forma de ver la información de las solicitudes y las respuestas depende del navegador que uses para acceder a la Google Cloud consola. En el navegador Google Chrome:

  1. Haz clic en el botón del menú principal de Chrome ().

  2. Selecciona Más herramientas.

  3. Haz clic en Herramientas de desarrollo.

  4. En el panel que aparece, haz clic en la pestaña Red.

Línea de comandos

Usa marcas de depuración globales en tu solicitud. Por ejemplo:

gcloud storage ls gs://my-bucket/my-object --log-http --verbosity=debug

Bibliotecas de cliente

C++

  • Define la variable de entorno CLOUD_STORAGE_ENABLE_TRACING=http para obtener todo el tráfico HTTP.

  • Define la variable de entorno CLOUD_STORAGE_ENABLE_CLOG=yes para obtener el registro de cada RPC.

C#

Añade un registrador mediante ApplicationContext.RegisterLogger y define las opciones de registro en el controlador de mensajes HttpClient. Para obtener más información, consulta la documentación de referencia de la biblioteca de cliente de C#.

Go

Define la variable de entorno GODEBUG=http2debug=1. Para obtener más información, consulta el paquete Go net/http.

Si también quieres registrar el cuerpo de la solicitud, usa un cliente HTTP personalizado.

Java

  1. Crea un archivo llamado "logging.properties" con el siguiente contenido:

    # Properties file which configures the operation of the JDK logging facility.
    # The system will look for this config file to be specified as a system property:
    # -Djava.util.logging.config.file=${project_loc:googleplus-simple-cmdline-sample}/logging.properties
    
    # Set up the console handler (uncomment "level" to show more fine-grained messages)
    handlers = java.util.logging.ConsoleHandler
    java.util.logging.ConsoleHandler.level = CONFIG
    
    # Set up logging of HTTP requests and responses (uncomment "level" to show)
    com.google.api.client.http.level = CONFIG
  2. Usar logging.properties con Maven

    mvn -Djava.util.logging.config.file=path/to/logging.properties insert_command

Para obtener más información, consulta Transporte HTTP conectable.

Node.js

Define la variable de entorno NODE_DEBUG=https antes de llamar al script de Node.

PHP

Proporciona tu propio controlador HTTP al cliente mediante httpHandler y configura un middleware para registrar la solicitud y la respuesta.

Python

Usa el módulo de registro. Por ejemplo:

import logging
import http.client

logging.basicConfig(level=logging.DEBUG)
http.client.HTTPConnection.debuglevel=5

Ruby

En la parte superior de .rb file, después de require "google/cloud/storage", añade lo siguiente:

ruby
Google::Apis.logger.level = Logger::DEBUG

Añadir encabezados personalizados

Añadir encabezados personalizados a las solicitudes es una herramienta habitual para depurar, por ejemplo, para habilitar encabezados de depuración o para monitorizar una solicitud. En el siguiente ejemplo se muestra cómo definir las cabeceras de solicitud para diferentes herramientas de Cloud Storage:

Línea de comandos

Usa la marca --additional-headers, que está disponible en la mayoría de los comandos. Por ejemplo:

gcloud storage objects describe gs://my-bucket/my-object --additional-headers=HEADER_NAME=HEADER_VALUE

Donde HEADER_NAME y HEADER_VALUE definen el encabezado que vas a añadir a la solicitud.

Bibliotecas de cliente

C++

namespace gcs = google::cloud::storage;
gcs::Client client = ...;
client.AnyFunction(... args ..., gcs::CustomHeader("header-name", "value"));

C#

En el siguiente ejemplo se añade un encabezado personalizado a cada solicitud realizada por la biblioteca de cliente.

using Google.Cloud.Storage.V1;

var client = StorageClient.Create();
client.Service.HttpClient.DefaultRequestHeaders.Add("custom-header", "custom-value");

var buckets = client.ListBuckets("my-project-id");
foreach (var bucket in buckets)

{
  Console.WriteLine(bucket.Name);
}

Go

Puedes añadir encabezados personalizados a cualquier llamada a la API realizada por el paquete Storage mediante callctx.SetHeaders en el contexto que se transfiere al método.

package main

import (
  "context"

  "cloud.google.com/go/storage"
  "github.com/googleapis/gax-go/v2/callctx"
)

func main() {
  ctx := context.Background()

  client, err := storage.NewClient(ctx)
  if err != nil {
    // Handle error.
  }
  ctx = callctx.SetHeaders(ctx, "X-Custom-Header", "value")

  // Use client as usual with the context and the additional headers will be sent.
  _, err = client.Bucket("my-bucket").Attrs(ctx)
  if err != nil {
    // Handle error.
  }
}

Java

import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.cloud.WriteChannel;
import com.google.cloud.storage.BlobInfo;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

import java.io.IOException;
import java.nio.ByteBuffer;
import static java.nio.charset.StandardCharsets.UTF_8;

public class Example {

  public void main(String args[]) throws IOException {
    HeaderProvider headerProvider =
            FixedHeaderProvider.create("custom-header", "custom-value");
    Storage storage = StorageOptions.getDefaultInstance()
            .toBuilder()
            .setHeaderProvider(headerProvider)
            .build().getService();
    String bucketName = "example-bucket";
    String blobName = "test-custom-header";

    // Use client with custom header
    BlobInfo blob = BlobInfo.newBuilder(bucketName, blobName).build();
    byte[] stringBytes;
    try (WriteChannel writer = storage.writer(blob)) {
      stringBytes = "hello world".getBytes(UTF_8);
      writer.write(ByteBuffer.wrap(stringBytes));
    }
  }
}

Node.js

const storage = new Storage();

storage.interceptors.push({
  request: requestConfig => {
    Object.assign(requestConfig.headers, {
      'X-Custom-Header': 'value',
      });
    return requestConfig;
  },
});

PHP

Todas las llamadas a métodos que activan solicitudes HTTP aceptan un argumento $restOptions opcional como último argumento. Puedes proporcionar encabezados personalizados por solicitud o por cliente.

use Google\Cloud\Storage\StorageClient;

$client = new StorageClient([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bat'
       ]
   ]
]);

$bucket = $client->bucket('my-bucket');

$bucket->info([
   'restOptions' => [
       'headers' => [
           'x-foo' => 'bar'
       ]
   ]
]);

Python

from google.cloud import storage

client = storage.Client(
    extra_headers={
        "x-custom-header": "value"
    }
)

Ruby

require "google/cloud/storage"

storage = Google::Cloud::Storage.new

storage.add_custom_headers { 'X-Custom-Header'=> 'value' }

Acceder a segmentos con una configuración de CORS

Si has definido una configuración de CORS en tu segmento y observas que las solicitudes entrantes de los navegadores de los clientes fallan, prueba a seguir estos pasos para solucionar el problema:

  1. Revisa la configuración de CORS en el segmento de destino. Si hay varias entradas de configuración de CORS, asegúrate de que los valores de solicitud que utilices para solucionar problemas se correspondan con los valores de una sola entrada de configuración de CORS.

  2. Cuando pruebes a enviar una solicitud CORS, comprueba que no estés enviando una solicitud al endpoint storage.cloud.google.com, que no permite solicitudes CORS. Para obtener más información sobre los endpoints compatibles con CORS, consulta Compatibilidad con CORS de Cloud Storage.

  3. Revisa una petición y su respuesta mediante la herramienta que prefieras. En un navegador Chrome, puedes usar las herramientas para desarrolladores estándar para ver esta información:

    1. Haz clic en el menú de Chrome () en la barra de herramientas del navegador.
    2. Selecciona Más herramientas > Herramientas para desarrolladores.
    3. Haz clic en la pestaña Network (Red).
    4. Envía la petición desde la aplicación o la línea de comandos.
    5. Localiza la petición en el panel en el que se muestra la actividad de red.
    6. En la columna Nombre, haz clic en el nombre que corresponda a la solicitud.
    7. Haz clic en la pestaña Encabezados para ver los encabezados de respuesta o en la pestaña Respuesta para ver el contenido de la respuesta.

    Si no ves ninguna solicitud ni respuesta, es posible que tu navegador haya almacenado en caché un intento anterior de solicitud preflight fallido. Al borrar la caché del navegador, también se debería borrar la caché de la comprobación previa. Si no es así, asigna al valor MaxAgeSec de tu configuración de CORS un valor inferior al valor predeterminado de 1800 (30 minutos), espera el tiempo que haya durado el valor antiguo de MaxAgeSec y vuelve a intentar la solicitud. De esta forma, se realiza una nueva solicitud de comprobación previa, que obtiene la nueva configuración de CORS y purga las entradas de la caché. Una vez que haya depurado el problema, vuelva a MaxAgeSec a un valor más alto para reducir el tráfico de comprobación previa a su contenedor.

  4. Asegúrate de que la solicitud tenga un encabezado Origin y de que el valor del encabezado coincida con al menos uno de los valores Origins de la configuración CORS del segmento. Ten en cuenta que el esquema, el host y el puerto de los valores deben coincidir exactamente. Estos son algunos ejemplos de coincidencias aceptables:

    • http://origin.example.com coincide con http://origin.example.com:80 (porque 80 es el puerto HTTP predeterminado), pero no coincide con https://origin.example.com, http://origin.example.com:8080, http://origin.example.com:5151 ni http://sub.origin.example.com.

    • https://example.com:443 coincide con https://example.com, pero no con http://example.com ni http://example.com:443.

    • http://localhost:8080 solo coincide exactamente con http://localhost:8080 y no con http://localhost:5555 ni con http://localhost.example.com:8080.

  5. En las solicitudes simples, asegúrate de que el método HTTP de la solicitud coincida con al menos uno de los valores Methods de la configuración CORS del bucket. En el caso de las solicitudes de comprobación previa, asegúrese de que el método especificado en Access-Control-Request-Method coincida con al menos uno de los valores de Methods.

  6. En el caso de las solicitudes preparatorias, comprueba si incluye uno o varios encabezados Access-Control-Request-Header. Si es así, asegúrese de que cada valor Access-Control-Request-Header coincida con un valor ResponseHeader en la configuración CORS del contenedor. Todos los encabezados que se mencionen en Access-Control-Request-Header deben estar en la configuración de CORS para que la solicitud preparatoria se realice correctamente e incluya encabezados CORS en la respuesta.

Códigos de error

A continuación se indican los códigos de estado HTTP habituales que pueden aparecer.

301: Moved Permanently

Problema: estoy configurando un sitio web estático y, al acceder a una ruta de directorio, se devuelve un objeto vacío y un código de respuesta HTTP 301.

Solución: Si tu navegador descarga un objeto de cero bytes y recibes un 301 código de respuesta HTTP al acceder a un directorio, como http://www.example.com/dir/, es muy probable que tu contenedor contenga un objeto vacío con ese nombre. Para comprobar si es así y solucionar el problema, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. Haz clic en el botón Activar Cloud Shell situado en la parte superior de la consola Google Cloud .
  3. Ejecuta gcloud storage ls --recursive gs://www.example.com/dir/. Si el resultado incluye http://www.example.com/dir/, significa que hay un objeto vacío en esa ubicación.
  4. Elimina el objeto vacío con el siguiente comando: gcloud storage rm gs://www.example.com/dir/

Ahora puedes acceder a http://www.example.com/dir/ y hacer que devuelva el archivo index.html de ese directorio en lugar del objeto vacío.

400: solicitud incorrecta

Problema: Al realizar una subida reanudable, he recibido este error y el mensaje Failed to parse Content-Range header.

Solución: El valor que ha usado en el encabezado Content-Range no es válido. Por ejemplo, Content-Range: */* no es válido y debe especificarse como Content-Range: bytes */*. Si recibes este error, significa que tu subida reanudable actual ya no está activa y debes iniciar una nueva.

400: errores específicos de Storage Intelligence

En las siguientes secciones se describen los errores habituales que pueden producirse al configurar o gestionar Storage Intelligence en un recurso.

400: Invalid Bucket Name

Problema: cuando configuras o gestionas Storage Intelligence para un recurso, es posible que recibas este error y el mensaje The specific bucket is not valid.

Solución: La URL que has usado en la solicitud no es válida. La URL debe cumplir los siguientes requisitos:

  • locations/global es la única ubicación admitida para Estadísticas de almacenamiento. No se admite el uso de ninguna otra ubicación.
  • Storage Intelligence está en singular en la URL, no en plural.

A continuación, se muestra un ejemplo de una URL válida:

curl -X PATCH -H "Content-Type: application/json" -d
    '{"edition_config": "STANDARD" }'
    -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://storage.googleapis.com/v2/projects/my-project/locations/global/storageIntelligence?updateMask=edition_config"

400: Invalid Argument - Empty Update Mask (Argumento no válido: máscara de actualización vacía)

Problema: cuando configuras o gestionas Storage Intelligence para un recurso, es posible que recibas este error y el mensaje Empty UPDATE_MASK in the request.

Solución: UPDATE_MASK es la lista de nombres de campos separados por comas que actualiza la solicitud. Los nombres de los campos usan el formato FieldMask y forman parte del recurso StorageIntelligence. Para actualizar la configuración de Storage Intelligence de un recurso, usa un UPDATE_MASK válido en la solicitud. No se admite un valor vacío.

400: ruta de máscara de actualización no válida

Problema: cuando configuras o gestionas Storage Intelligence para un recurso, es posible que recibas este error y el mensaje Invalid UPDATE_MASK paths.

Solución: Si usas un nombre de campo no válido en UPDATE_MASK, recibirás un mensaje de error. UPDATE_MASK es la lista de nombres de campos separados por comas que actualiza la solicitud. Los nombres de los campos usan el formato FieldMask y forman parte del recurso IntelligenceConfig. Para actualizar la configuración de Estadísticas de almacenamiento de un recurso, asegúrese de que todos los nombres de campo que aparecen en UPDATE_MASK sean campos válidos del recurso IntelligenceConfig.

400: Field Is Not Editable

Problema: cuando configuras o gestionas Storage Intelligence para un recurso, es posible que recibas este error y el mensaje Invalid UPDATE_MASK: UPDATE_TIME field is not editable.

Solución: UPDATE_MASK es la lista de nombres de campos separados por comas que actualiza la solicitud. Los nombres de los campos usan el formato FieldMask y forman parte del recurso IntelligenceConfig. Si intentas actualizar un campo que no se puede editar, recibirás un mensaje de error. Quita el campo que no se puede editar de Update_Mask y vuelve a intentarlo.

400: Invalid Value

Problema: cuando configuras o gestionas Storage Intelligence para un recurso, es posible que recibas este error y el mensaje Invalid value at storage_intelligence.edition_config.

Solución: Si intentas usar un valor no válido para el campo edition_config, aparecerá un mensaje de error. Los valores permitidos son INHERIT, STANDARD y DISABLED. Revisa el valor e inténtalo de nuevo.

400: Non-empty Filter

Problema: Cuando actualizas la configuración de Storage Intelligence de un recurso, es posible que recibas este error y el mensaje Non-empty filter cannot be specified for INHERIT or DISABLED edition configuration.

Solución: Cuando actualices Storage Intelligence edition_config a INHERIT o DISABLED, no podrás usar ningún filtro de segmento en la solicitud. Quita los filtros de la solicitud y vuelve a intentarlo.

400: Empty Location Or Bucket Values In Filter

Problema: Cuando actualizas la configuración de Storage Intelligence de un recurso, es posible que recibas este error y el mensaje Empty location or bucket values in filter.

Solución: Cuando actualizas la configuración de Storage Intelligence y usas un filtro de contenedor en la solicitud, se produce un error si el valor de location o bucket es una cadena vacía. Proporcione un valor válido para location o bucket y vuelva a intentarlo.

401: No autorizado

Problema: las solicitudes a un bucket público directamente o mediante Cloud CDN fallan y devuelven una respuesta HTTP 401: Unauthorized y Authentication Required.

Solución: Comprueba que tu cliente o cualquier proxy intermedio no añada un encabezado Authorization a las solicitudes a Cloud Storage. Cualquier solicitud con un encabezado Authorization, aunque esté vacío, se valida como si fuera un intento de autenticación.

403: Account Disabled

Problema: he intentado crear un segmento, pero se ha producido un error 403 Account Disabled.

Solución: Este error indica que aún no has activado la facturación en el proyecto asociado. Para saber cómo habilitar la facturación, consulta el artículo Habilitar la facturación de un proyecto.

Si la facturación está activada y sigues recibiendo este mensaje de error, puedes ponerte en contacto con el equipo de Asistencia e indicar el ID de tu proyecto y una descripción del problema.

403: prohibido

Problema: Debería tener permiso para acceder a un determinado segmento u objeto, pero cuando intento hacerlo, recibo un error 403 - Forbidden con un mensaje similar a este: example@email.com does not have storage.objects.get access to the Google Cloud Storage object.

Solución: Te falta un permiso de gestión de identidades y accesos para el objeto o el contenedor necesario para completar la solicitud. Si crees que deberías poder hacer la solicitud, pero no puedes, haz las siguientes comprobaciones:

  1. ¿El beneficiario que se menciona en el mensaje de error es el que esperabas? Si el mensaje de error hace referencia a una dirección de correo inesperada o a "Llamada anónima", significa que tu solicitud no está usando las credenciales que querías. Esto puede deberse a que la herramienta que estás usando para hacer la solicitud se haya configurado con las credenciales de otro alias o entidad, o bien a que una cuenta de servicio esté haciendo la solicitud en tu nombre.

  2. ¿Necesitas el permiso al que se hace referencia en el mensaje de error? Si el permiso es inesperado, es probable que se deba a que la herramienta que estás usando requiere acceso adicional para completar tu solicitud. Por ejemplo, para eliminar objetos de forma masiva en un segmento, gcloud primero debe crear una lista de los objetos del segmento que se van a eliminar. Esta parte de la acción de eliminación en bloque requiere el permiso storage.objects.list, lo que puede resultar sorprendente, ya que el objetivo es eliminar objetos, lo que normalmente solo requiere el permiso storage.objects.delete. Si este es el motivo del mensaje de error, asegúrate de que se te hayan concedido roles de gestión de identidades y accesos que tengan los permisos adicionales necesarios.

  3. ¿Se te ha concedido el rol de gestión de identidades y accesos en el recurso o en el recurso principal que quieres? Por ejemplo, si se te ha concedido el rol Storage Object Viewer en un proyecto y estás intentando descargar un objeto, asegúrate de que el objeto esté en un contenedor del proyecto. Es posible que tengas el permiso Storage Object Viewer en otro proyecto.

  4. ¿El permiso para acceder a un determinado segmento u objeto se ha concedido a través de un valor de conveniencia? Si se elimina el acceso concedido a un valor de conveniencia, es posible que las entidades de seguridad que tenían acceso a los recursos lo pierdan.

    Por ejemplo, supongamos que jane@example.com tiene el rol básico de propietario (roles/owner) de un proyecto llamado my-example-project y que la política de gestión de identidades y accesos del proyecto asigna el rol de creador de objetos de almacenamiento (roles/storage.objectCreator) al valor de conveniencia projectOwner:my-example-project. Esto significa que jane@example.com tiene los permisos asociados al rol Creador de objetos de almacenamiento en los segmentos de my-example-project. Si se elimina esta concesión, jane@example.com perderá los permisos asociados al rol Creador de objetos de Storage.

    En ese caso, puedes recuperar el acceso al segmento o al objeto concediéndote los permisos necesarios a nivel de segmento o de objeto para realizar las acciones que necesites.

  5. ¿Hay una política de denegación de gestión de identidades y accesos (IAM) que te impida usar determinados permisos? Puedes ponerte en contacto con el administrador de tu organización para saber si se ha implementado una política de denegación de IAM.

403: Permiso denegado

Problema: error de permiso denegado al configurar o gestionar la configuración de Storage Intelligence de un recurso.

Solución: Si recibes un error de permiso denegado con un mensaje similar a permission storage.intelligenceConfigs.update cuando configuras y gestionas Storage Intelligence para un recurso, consulta la sección de permisos de la operación que quieras realizar. Para solucionar este problema, concede los permisos adecuados. Puedes conceder permisos de cualquiera de las siguientes formas:

  • Concede permisos de gestión de identidades y accesos en el mismo recurso de la Google Cloud jerarquía de recursos en el que vas a habilitar Storage Intelligence.
  • Asegúrate de que un recurso de un nivel superior en la Google Cloud jerarquía de recursos transfiere los permisos al recurso secundario.

409: Conflicto

Problema: he intentado crear un segmento, pero he recibido el siguiente error:

409 Conflict. Sorry, that name is not available. Please try a different one.

Solución: El nombre de segmento que has intentado usar (por ejemplo, gs://cats o gs://dogs) ya está en uso. Cloud Storage tiene un espacio de nombres global, por lo que no puedes asignar a un segmento el mismo nombre que a otro segmento. Elige un nombre que no se esté usando.

412: se han infringido las restricciones personalizadas

Problema: Mis solicitudes se rechazan y se muestra un error 412 orgpolicy.

Problema: mis solicitudes se rechazan con un error 412 Multiple constraints were violated.

Solución: Consulta con tu equipo de administradores de seguridad si la política de la organización que usa una restricción personalizada está afectando al bucket al que envías solicitudes. Es posible que tu contenedor también se vea afectado por diferentes políticas de la organización que entren en conflicto entre sí. Por ejemplo, una política especifica que los segmentos deben tener la clase de almacenamiento Standard y otra política especifica que los segmentos deben tener la clase de almacenamiento Coldline.

429: Too Many Requests

Problema: Mis solicitudes se rechazan y se muestra un error 429 Too Many Requests.

Solución: Has alcanzado el límite de solicitudes que Cloud Storage permite para un recurso determinado. Consulta las cuotas de Cloud Storage para obtener información sobre los límites de Cloud Storage.

Diagnosticar Google Cloud errores de la consola

Problema: cuando uso la consola Google Cloud para realizar una operación, recibo un mensaje de error genérico. Por ejemplo, veo un mensaje de error al intentar eliminar un contenedor, pero no veo detalles sobre por qué ha fallado la operación.

Solución: Usa las notificaciones de la consola Google Cloud para ver información detallada sobre la operación fallida:

  1. Haz clic en el botón Notificaciones () en el encabezado de la consola Google Cloud .

    En un menú desplegable se muestran las operaciones más recientes realizadas por la consolaGoogle Cloud .

  2. Haz clic en el elemento sobre el que quieras obtener más información.

    Se abrirá una página con información detallada sobre la operación.

  3. Haga clic en cada fila para ver la información detallada sobre el error.

Problema: Cuando uso la Google Cloud consola, no veo una columna concreta.

Solución: Para ver una columna concreta en la consola, haz clic en el icono Opciones de visualización de columnas () y selecciona la columna que quieras ver. Google Cloud

Carpetas simuladas y carpetas gestionadas

Problema: He eliminado algunos objetos de mi contenedor y ahora la carpeta que los contenía no aparece en la consola de Google Cloud .

Solución: Aunque la consola Google Cloud muestra el contenido de tu segmento como si hubiera una estructura de directorios, las carpetas no existen como tal en Cloud Storage. Por lo tanto, cuando eliminas todos los objetos con un prefijo común de un contenedor, el icono de carpeta que representa ese grupo de objetos deja de aparecer en la consola de Google Cloud .

Problema: No puedo crear carpetas gestionadas.

Solución: Para crear carpetas gestionadas, asegúrate de que se cumplen los siguientes requisitos:

  • Tienes un rol de gestión de identidades y accesos que contiene el permiso storage.managedfolders.create, como el rol de administrador de objetos de almacenamiento (roles/storage.objectAdmin). Para obtener instrucciones sobre cómo conceder roles, consulta Usar permisos de gestión de identidades y accesos.

  • El acceso uniforme a nivel de segmento está habilitado en el segmento en el que quieres crear carpetas gestionadas.

  • No hay condiciones de gestión de identidades y accesos en el segmento o en el proyecto que usen el tipo de recurso de segmento (storage.googleapis.com/Bucket) o el tipo de recurso de objeto (storage.googleapis.com/Object). Si algún segmento de un proyecto tiene una condición de gestión de identidades y accesos que usa alguno de estos tipos de recursos, no se podrán crear carpetas gestionadas en ninguno de los segmentos de ese proyecto, aunque se elimine la condición más adelante.

Problema: No puedo inhabilitar el acceso uniforme a nivel de segmento porque hay carpetas gestionadas en mi segmento.

Solución: No se puede inhabilitar el acceso uniforme a nivel de segmento si hay carpetas gestionadas en el segmento. Para inhabilitar el acceso a nivel de segmento uniforme, primero debes eliminar todas las carpetas gestionadas del segmento.

Errores de sitios web estáticos

A continuación se indican algunos problemas habituales que pueden surgir al configurar un segmento para alojar un sitio web estático.

Servicio de anuncios a través de HTTPS

Problema: quiero servir mi contenido a través de HTTPS sin usar un balanceador de carga.

Solución: Puede servir contenido estático a través de HTTPS mediante URIs directas, como https://storage.googleapis.com/my-bucket/my-object. Para ver otras opciones para servir tu contenido a través de un dominio personalizado mediante SSL, puedes hacer lo siguiente:

Página inaccesible

Problema: recibo un mensaje de error Access denied en una página web servida por mi sitio web.

Solución: comprueba que el objeto se haya compartido públicamente. Si no es así, consulte Hacer públicos los datos para obtener instrucciones sobre cómo hacerlo.

Si ya has subido y compartido un objeto, pero luego subes una nueva versión, debes volver a compartirlo públicamente. Esto se debe a que el permiso público se sustituye por la nueva subida.

Descarga de contenido

Problema: se me pide que descargue el contenido de mi página en lugar de poder verlo en el navegador.

Solución: Si especifica un MainPageSuffix como objeto que no tiene un tipo de contenido web, se pedirá a los visitantes del sitio que descarguen el contenido en lugar de poder ver el contenido de la página. Para solucionar este problema, actualice la entrada de metadatos Content-Type a un valor adecuado, como text/html. Para obtener instrucciones, consulta Editar metadatos de objetos.

Hacer públicos los datos

Problema: quiero hacer públicos mis datos, pero aparece un error de política de la organización.

Solución: Algunas restricciones de las políticas de la organización pueden impedir que publiques tus datos. Por ejemplo, la restricción de uso compartido restringido al dominio (constraints/iam.allowedPolicyMemberDomains) limita el uso compartido de recursos en función del dominio de la organización. Si se produce un error en la política de la organización, póngase en contacto con su administrador para que le conceda los permisos a nivel de proyecto o de contenedor que le permitan compartir recursos editando la política de la organización, la carpeta o el recurso del proyecto. Si sigues viendo este error después de anular la política de la organización, es posible que tengas que esperar unos minutos a que se aplique el cambio.

Problema: aparece un error de permisos cuando intento hacer públicos mis datos.

Solución: Asegúrate de que tienes el permiso storage.buckets.setIamPolicy o el permiso storage.objects.setIamPolicy. Estos permisos se conceden, por ejemplo, en el rol Administrador de almacenamiento (roles/storage.admin). Si tienes el permiso storage.buckets.setIamPolicy o el permiso storage.objects.setIamPolicy y sigues recibiendo un error, es posible que tu segmento esté sujeto a la prevención de acceso público, que no permite el acceso a allUsers ni a allAuthenticatedUsers. La prevención del acceso público se puede definir directamente en el segmento o se puede aplicar mediante una política de organización definida en un nivel superior.

Latencia

A continuación se indican problemas de latencia habituales que pueden surgir. Además, el Google Cloud panel de estado de los servicios proporciona información sobre los incidentes que afectan a los servicios, como Cloud Storage. Google Cloud

Latencia de subida o descarga

Problema: la latencia ha aumentado al subir o descargar contenido.

Solución: Ten en cuenta los siguientes motivos habituales de la latencia de subida y descarga:

  • Limitaciones de CPU o memoria: el sistema operativo del entorno afectado debe tener herramientas para medir el consumo de recursos locales, como el uso de la CPU y el uso de la memoria.

  • Restricciones de E/S de disco: el impacto en el rendimiento puede deberse a la E/S de disco local.

  • Distancia geográfica: el rendimiento puede verse afectado por la separación física entre el segmento de Cloud Storage y el entorno afectado, sobre todo en casos transcontinentales. Si haces pruebas con un segmento ubicado en la misma región que el entorno afectado, podrás determinar en qué medida la separación geográfica influye en la latencia.

    • Si procede, el resolvedor de DNS del entorno afectado debe usar el protocolo EDNS(0) para que las solicitudes del entorno se enruten a través de un Google Front End adecuado.

Latencia de la CLI o de la biblioteca de cliente

Problema: observo un aumento de la latencia al acceder a Cloud Storage con Google Cloud CLI o con una de las bibliotecas de cliente.

Solución: La CLI de gcloud y las bibliotecas de cliente vuelven a intentar automáticamente las solicitudes cuando es útil hacerlo, y este comportamiento puede aumentar la latencia de forma eficaz desde el punto de vista del usuario final. Usa la métrica storage.googleapis.com/api/request_count de Cloud Monitoring para ver si Cloud Storage está sirviendo de forma constante un código de respuesta que se puede reintentar, como 429 o 5xx.

Servidores proxy

Problema: Me conecto a través de un servidor proxy. ¿Qué debo hacer?

Solución: Para acceder a Cloud Storage a través de un servidor proxy, debes permitir el acceso a estos dominios:

  • accounts.google.com para crear tokens de autenticación OAuth 2.0
  • oauth2.googleapis.com para realizar intercambios de tokens de OAuth2
  • *.googleapis.com para solicitudes de almacenamiento

Si tu servidor proxy o tu política de seguridad no admiten la inclusión en listas de permitidos por dominio y solo admiten la inclusión en listas de permitidos por bloque de red IP, te recomendamos que configures tu servidor proxy para todos los intervalos de direcciones IP de Google. Puedes encontrar los intervalos de direcciones consultando los datos de WHOIS en ARIN. Te recomendamos que revises periódicamente la configuración de tu proxy para asegurarte de que coincida con las direcciones IP de Google.

No recomendamos que configures tu proxy con direcciones IP individuales que obtengas de búsquedas únicas de oauth2.googleapis.com y storage.googleapis.com. Como los servicios de Google se exponen mediante nombres de DNS que se asignan a un gran número de direcciones IP que pueden cambiar con el tiempo, si configuras tu proxy basándote en una búsqueda única, es posible que no puedas conectarte a Cloud Storage.

Si sus solicitudes se enrutan a través de un servidor proxy, es posible que deba ponerse en contacto con el administrador de su red para asegurarse de que el proxy no elimine el encabezado Authorization que contiene sus credenciales. Si no incluyes el encabezado Authorization, tus solicitudes se rechazarán y recibirás un error MissingSecurityHeader.

Errores de Storage Insights

Problema: La configuración de mi informe de inventario genera varios informes de inventario a diario.

Solución: Si tienes más de 1.000.000 de objetos en tu segmento, se pueden generar varios informes de inventario como fragmentos. Una configuración de informe de inventario genera un informe de inventario por cada 1.000.000 de objetos del cubo. Por ejemplo, si tiene un contenedor con 3.500.000 objetos, la configuración del informe de inventario del contenedor generará cuatro fragmentos de informe de inventario según la frecuencia que especifique, junto con un archivo de manifiesto que contiene el número de fragmentos de informe de inventario generados y sus nombres de archivo.

Problema: los informes de inventario no aparecen en el contenedor de destino.

Solución: Si ha creado una configuración de informe de inventario y no ve que se generen informes de inventario en el segmento de destino, compruebe lo siguiente:

  • Asegúrese de que la fecha de inicio especificada en la configuración del informe de inventario coincida con la fecha en la que espera que se generen los informes de inventario. Para obtener instrucciones sobre cómo especificar una fecha de inicio, consulta el artículo Crear una configuración de informe de inventario.

  • Consulta el historial de informes de inventario para comprobar si hay errores y cuáles son sus causas principales. Para ver el historial de informes de inventario, sigue estos pasos:

    1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

      Ir a Contenedores

    2. En la lista de segmentos, haga clic en el nombre del segmento de origen que contiene la configuración del informe de inventario.

    3. En la página Detalles del segmento, haga clic en la pestaña Informes de inventario.

    4. En la lista de configuraciones de informes de inventario, haga clic en el UUID de la configuración de informes de inventario que haya generado los informes que quiera consultar.

    5. Comprueba si hay errores en la sección Historial de informes de inventario. Puede colocar el puntero sobre Ayuda () para obtener información sobre por qué se ha producido un error.

  • Asegúrate de que el agente de servicio a nivel de proyecto tenga concedidos los roles de gestión de identidades y accesos necesarios para leer y escribir informes de inventario. Para obtener instrucciones, consulta Conceder los roles necesarios al agente de servicio.

Problema: se producen retrasos aleatorios en la generación de informes de inventario.

Solución: El intervalo de tiempo entre la generación de informes de inventario puede variar. Puede que se produzca un retraso de hasta un día.

Siguientes pasos