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:
Haz clic en el botón del menú principal de Chrome (more_vert).
Selecciona Más herramientas.
Haz clic en Herramientas de desarrollo.
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
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
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:
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.
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.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:
- Haz clic en el menú de Chrome (more_vert) en la barra de herramientas del navegador.
- Selecciona Más herramientas > Herramientas para desarrolladores.
- Haz clic en la pestaña Network (Red).
- Envía la petición desde la aplicación o la línea de comandos.
- Localiza la petición en el panel en el que se muestra la actividad de red.
- En la columna Nombre, haz clic en el nombre que corresponda a la solicitud.
- 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 de1800
(30 minutos), espera el tiempo que haya durado el valor antiguo deMaxAgeSec
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 aMaxAgeSec
a un valor más alto para reducir el tráfico de comprobación previa a su contenedor.Asegúrate de que la solicitud tenga un encabezado
Origin
y de que el valor del encabezado coincida con al menos uno de los valoresOrigins
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 conhttp://origin.example.com:80
(porque 80 es el puerto HTTP predeterminado), pero no coincide conhttps://origin.example.com
,http://origin.example.com:8080
,http://origin.example.com:5151
nihttp://sub.origin.example.com
.https://example.com:443
coincide conhttps://example.com
, pero no conhttp://example.com
nihttp://example.com:443
.http://localhost:8080
solo coincide exactamente conhttp://localhost:8080
y no conhttp://localhost:5555
ni conhttp://localhost.example.com:8080
.
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 enAccess-Control-Request-Method
coincida con al menos uno de los valores deMethods
.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 valorAccess-Control-Request-Header
coincida con un valorResponseHeader
en la configuración CORS del contenedor. Todos los encabezados que se mencionen enAccess-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:
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
- Haz clic en el botón Activar Cloud Shell situado en la parte superior de la consola Google Cloud .
- Ejecuta
gcloud storage ls --recursive gs://www.example.com/dir/
. Si el resultado incluyehttp://www.example.com/dir/
, significa que hay un objeto vacío en esa ubicación. - 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:
¿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.
¿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 permisostorage.objects.list
, lo que puede resultar sorprendente, ya que el objetivo es eliminar objetos, lo que normalmente solo requiere el permisostorage.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.¿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 permisoStorage Object Viewer
en otro proyecto.¿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 llamadomy-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 convenienciaprojectOwner:my-example-project
. Esto significa que jane@example.com tiene los permisos asociados al rol Creador de objetos de almacenamiento en los segmentos demy-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.
¿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.
Si tu carga de trabajo consiste en miles de solicitudes por segundo a un mismo contenedor, consulta las directrices sobre la frecuencia de solicitudes y la distribución del acceso para ver las prácticas recomendadas, como aumentar la carga de trabajo de forma gradual y evitar los nombres de archivo secuenciales.
Si tu carga de trabajo puede usar 50 Gbps o más de salida de red a ubicaciones específicas, consulta tu uso del ancho de banda para asegurarte de que no te encuentras con una cuota de ancho de banda.
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:
Haz clic en el botón Notificaciones (notifications) en el encabezado de la consola Google Cloud .
En un menú desplegable se muestran las operaciones más recientes realizadas por la consolaGoogle Cloud .
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.
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 CloudCarpetas 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:
- Usa una red de distribución de contenido de terceros con Cloud Storage.
- Sirve el contenido de tu sitio web estático desde Firebase Hosting en lugar de Cloud Storage.
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.0oauth2.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:
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
En la lista de segmentos, haga clic en el nombre del segmento de origen que contiene la configuración del informe de inventario.
En la página Detalles del segmento, haga clic en la pestaña Informes de inventario.
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.
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.
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
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
- Consulta las respuestas a otras preguntas en las preguntas frecuentes de Cloud Storage.
- Consulta las opciones de asistencia.
- Descubre cómo puede ayudarte Error Reporting a identificar y comprender los errores de Cloud Storage.