Risoluzione dei problemi

Questa pagina descrive i metodi di risoluzione dei problemi per gli errori comuni che potresti riscontrare durante l'utilizzo di Cloud Storage.

Consulta la dashboard di Personalized Service Health diGoogle Cloud per informazioni sugli incidenti che interessano i servizi Google Cloud come Cloud Storage.

Logging delle richieste non elaborate

Quando utilizzi strumenti come gcloud o le librerie client di Cloud Storage, gran parte delle informazioni relative a richieste e risposte viene gestita dallo strumento. Tuttavia, a volte è utile visualizzare i dettagli per facilitare la risoluzione dei problemi o quando si pubblicano domande su forum come Stack Overflow. Utilizza le seguenti istruzioni per restituire le intestazioni della richiesta e della risposta per il tuo strumento:

Console

La visualizzazione delle informazioni su richieste e risposte dipende dal browser che utilizzi per accedere alla console Google Cloud . Per il browser Google Chrome:

  1. Fai clic sul pulsante del menu principale di Chrome ().

  2. Seleziona Altri strumenti.

  3. Fai clic su Strumenti per sviluppatori.

  4. Nel riquadro che appare, fai clic sulla scheda Rete.

Riga di comando

Utilizza i flag di debug globali nella richiesta. Ad esempio:

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

Librerie client

C++

  • Imposta la variabile di ambiente CLOUD_STORAGE_ENABLE_TRACING=http per ottenere il traffico HTTP completo.

  • Imposta la variabile di ambiente CLOUD_STORAGE_ENABLE_CLOG=yes per ottenere il logging di ogni RPC.

C#

Aggiungi un logger utilizzando il metodo ApplicationContext.RegisterLogger e imposta le opzioni di logging nel gestore dei messaggi HttpClient. Per saperne di più, consulta la documentazione di riferimento della libreria client C#.

Vai

Imposta la variabile di ambiente GODEBUG=http2debug=1. Per saperne di più, consulta la pagina Go package net/http.

Se vuoi registrare anche il corpo della richiesta, utilizza un client HTTP personalizzato.

Java

  1. Crea un file denominato "logging.properties" con i seguenti contenuti:

    # 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. Utilizza logging.properties con Maven

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

Per saperne di più, consulta Trasporto HTTP collegabile.

Node.js

Imposta la variabile di ambiente NODE_DEBUG=https prima di chiamare lo script Node.

PHP

Fornisci al client il tuo gestore HTTP utilizzando httpHandler e configura il middleware per registrare la richiesta e la risposta.

Python

Utilizza il modulo di logging. Ad esempio:

import logging
import http.client

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

Ruby

All'inizio di .rb file dopo require "google/cloud/storage", aggiungi quanto segue:

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

Aggiunta di intestazioni personalizzate

L'aggiunta di intestazioni personalizzate alle richieste è uno strumento comune per il debug, ad esempio per attivare le intestazioni di debug o per tracciare una richiesta. Il seguente esempio mostra come impostare le intestazioni delle richieste per diversi strumenti Cloud Storage:

Riga di comando

Utilizza il flag --additional-headers, disponibile per la maggior parte dei comandi. Ad esempio:

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

Dove HEADER_NAME e HEADER_VALUE definiscono l'intestazione che stai aggiungendo alla richiesta.

Librerie client

C++

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

C#

L'esempio seguente aggiunge un'intestazione personalizzata a ogni richiesta effettuata dalla libreria client.

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);
}

Vai

Puoi aggiungere intestazioni personalizzate a qualsiasi chiamata API effettuata dal pacchetto Storage utilizzando callctx.SetHeaders nel contesto passato al metodo.

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

Tutte le chiamate ai metodi che attivano richieste HTTP accettano un argomento $restOptions facoltativo come ultimo argomento. Puoi fornire intestazioni personalizzate in base alle singole richieste o ai singoli client.

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' }

Rust

use google_cloud_gax::options::RequestOptionsBuilder;
use google_cloud_storage::client::Storage;
use google_cloud_storage::client::StorageControl;
use http::header::{HeaderName, HeaderValue};

pub async fn sample(bucket_id: &str) -> anyhow::Result<()> {
    const NAME: &str = "hello-world.txt";

    // Set a client-level custom header on the Storage data plane client.
    let client = Storage::builder()
        .with_custom_header(
            HeaderName::from_static("x-custom-header"),
            HeaderValue::from_static("custom-value"),
        )
        .build()
        .await?;

    let reader = client
        .read_object(format!("projects/_/buckets/{bucket_id}"), NAME)
        .send()
        .await?;
    println!("Object highlights: {:?}", reader.object());

    // Set a request-level custom header on a StorageControl RPC request.
    let control = StorageControl::builder().build().await?;
    let bucket = control
        .get_bucket()
        .set_name(format!("projects/_/buckets/{bucket_id}"))
        .with_custom_header(
            HeaderName::from_static("x-custom-header"),
            HeaderValue::from_static("custom-value"),
        )
        .send()
        .await?;
    println!("Bucket {bucket_id} metadata is {bucket:?}");

    Ok(())
}

Accesso ai bucket con una configurazione CORS

Se hai impostato una configurazione CORS sul bucket e noti che le richieste in entrata dai browser client non vanno a buon fine, prova i seguenti passaggi per la risoluzione dei problemi:

  1. Esamina la configurazione CORS nel bucket di destinazione. Se sono presenti più voci di configurazione CORS, assicurati che i valori della richiesta che utilizzi per la risoluzione dei problemi siano mappati ai valori di una singola voce di configurazione CORS.

  2. Quando testi l'invio di una richiesta CORS, verifica di non inviare una richiesta all'endpoint storage.cloud.google.com, che non consente le richieste CORS. Per ulteriori informazioni sugli endpoint supportati per CORS, vedi Supporto di CORS per Cloud Storage.

  3. Esamina una richiesta e una risposta utilizzando lo strumento che preferisci. In un browser Chrome, puoi utilizzare gli strumenti per sviluppatori standard per visualizzare queste informazioni:

    1. Fai clic sul menu Chrome () nella barra degli strumenti del browser.
    2. Seleziona Altri strumenti > Strumenti per sviluppatori.
    3. Fai clic sulla scheda Rete.
    4. Invia la richiesta dall'applicazione o dalla riga di comando.
    5. Nel riquadro che mostra l'attività di rete, individua la richiesta.
    6. Nella colonna Nome, fai clic sul nome corrispondente alla richiesta.
    7. Fai clic sulla scheda Intestazioni per visualizzare le intestazioni della risposta o sulla scheda Risposta per visualizzare i contenuti della risposta.

    Se non vedi una richiesta e una risposta, è possibile che il browser abbia memorizzato nella cache un tentativo di richiesta preflight non riuscito in precedenza. Svuotando la cache del browser, dovrebbe svuotarsi anche la cache di preflight. In caso contrario, imposta il valore MaxAgeSec nella configurazione CORS su un valore inferiore al valore predefinito di 3600 (60 minuti), attendi il tempo indicato dal vecchio MaxAgeSec, quindi riprova a inviare la richiesta. Viene eseguita una nuova richiesta di preflight, che recupera la nuova configurazione CORS e svuota le voci della cache. Una volta eseguito il debug del problema, aumenta di nuovo MaxAgeSec per ridurre il traffico di preflight nel bucket.

  4. Assicurati che la richiesta abbia un'intestazione Origin e che il valore dell'intestazione corrisponda ad almeno uno dei valori Origins nella configurazione CORS del bucket. Tieni presente che lo schema, l'host e la porta dei valori devono corrispondere esattamente. Ecco alcuni esempi di corrispondenze accettabili:

    • http://origin.example.com corrisponde a http://origin.example.com:80 (perché 80 è la porta HTTP predefinita), ma non corrisponde a https://origin.example.com, http://origin.example.com:8080, http://origin.example.com:5151 o http://sub.origin.example.com.

    • https://example.com:443 corrisponde a https://example.com, ma non a http://example.com o http://example.com:443.

    • http://localhost:8080 corrisponde esattamente solo a http://localhost:8080 e non corrisponde a http://localhost:5555 o http://localhost.example.com:8080.

  5. Per le richieste semplici, assicurati che il metodo HTTP della richiesta corrisponda ad almeno uno dei valori Methods nella configurazione CORS del bucket. Per le richieste preflight, assicurati che il metodo specificato in Access-Control-Request-Method corrisponda ad almeno uno dei valori Methods.

  6. Per le richieste preflight, controlla se includono una o più intestazioni Access-Control-Request-Header. In questo caso, assicurati che ogni valore Access-Control-Request-Header corrisponda a un valore ResponseHeader nella configurazione CORS del bucket. Tutte le intestazioni denominate in Access-Control-Request-Header devono essere presenti nella configurazione CORS affinché la richiesta preflight vada a buon fine e includa le intestazioni CORS nella risposta.

Codici di errore

Di seguito sono riportati i codici di stato HTTP comuni che potresti riscontrare.

301: Spostato permanentemente

Problema: sto configurando un sito web statico e l'accesso a un percorso di directory restituisce un oggetto vuoto e un codice di risposta HTTP 301.

Soluzione: se il browser scarica un oggetto di zero byte e ricevi un codice di risposta HTTP 301 quando accedi a una directory, ad esempio http://www.example.com/dir/, è molto probabile che il bucket contenga un oggetto vuoto con quel nome. Per verificare che sia questo il problema e risolverlo:

  1. Nella console Google Cloud , vai alla pagina Bucket in Cloud Storage.

    Vai a Bucket

  2. Fai clic sul pulsante Attiva Cloud Shell nella parte superiore della console Google Cloud .
  3. Esegui gcloud storage ls --recursive gs://www.example.com/dir/. Se l'output include http://www.example.com/dir/, hai un oggetto vuoto in quella posizione.
  4. Rimuovi l'oggetto vuoto con il comando: gcloud storage rm gs://www.example.com/dir/

Ora puoi accedere a http://www.example.com/dir/ e fare in modo che restituisca il file index.html della directory anziché l'oggetto vuoto.

400: richiesta non valida

Problema: durante l'esecuzione di un caricamento ripristinabile, ho ricevuto questo errore e il messaggio Failed to parse Content-Range header.

Soluzione: il valore che hai utilizzato nell'intestazione Content-Range non è valido. Ad esempio, Content-Range: */* non è valido e deve essere specificato come Content-Range: bytes */*. Se ricevi questo errore, il caricamento ripristinabile corrente non è più attivo e devi avviarne uno nuovo.

400: Errori specifici di Storage Intelligence

Per soluzioni agli errori comuni riscontrati durante la configurazione o la gestione di Storage Intelligence, Storage Insights e operazioni batch di archiviazione, consulta Risoluzione dei problemi di Storage Intelligence.

401: Unauthorized

Problema: le richieste a un bucket pubblico direttamente o tramite Cloud CDN non vanno a buon fine con una risposta HTTP 401: Unauthorized e Authentication Required.

Soluzione: verifica che il client o qualsiasi proxy intermedio non aggiunga un'intestazione Authorization alle richieste a Cloud Storage. Qualsiasi richiesta con un'intestazione Authorization, anche se vuota, viene convalidata come se fosse un tentativo di autenticazione.

403: Account disattivato

Problema: ho provato a creare un bucket, ma ho ricevuto l'errore 403 Account Disabled.

Soluzione: questo errore indica che non hai ancora attivato la fatturazione per il progetto associato. Per i passaggi per abilitare la fatturazione, consulta Abilita la fatturazione per un progetto.

Se la fatturazione è attivata e continui a ricevere questo messaggio di errore, puoi contattare l'assistenza indicando il tuo ID progetto e una descrizione del problema.

403: Forbidden

Problema: dovrei avere l'autorizzazione per accedere a un determinato bucket o oggetto, ma quando tento di farlo, ricevo un errore 403 - Forbidden con un messaggio simile a: example@email.com doesn't have storage.objects.get access to the Google Cloud Storage object.

Soluzione: non disponi di un'autorizzazione IAM per il bucket o l'oggetto necessaria per completare la richiesta. Se prevedi di poter effettuare la richiesta, ma non puoi, esegui i seguenti controlli:

  1. Il beneficiario a cui si fa riferimento nel messaggio di errore è quello che ti aspettavi? Se il messaggio di errore fa riferimento a un indirizzo email imprevisto o a "Chiamante anonimo", la richiesta non utilizza le credenziali previste. Questo potrebbe essere dovuto al fatto che lo strumento che utilizzi per effettuare la richiesta è stato configurato con le credenziali di un altro alias o un'altra entità oppure che la richiesta viene effettuata per tuo conto da un service account.

  2. L'autorizzazione a cui viene fatto riferimento nel messaggio di errore è una di quelle che ritieni necessarie? Se l'autorizzazione è imprevista, è probabile che lo strumento che stai utilizzando richieda un accesso aggiuntivo per completare la tua richiesta. Ad esempio, per eliminare in blocco gli oggetti in un bucket, gcloud deve prima creare un elenco di oggetti da eliminare nel bucket. Questa parte dell'azione di eliminazione collettiva richiede l'autorizzazione storage.objects.list, il che potrebbe sorprendere, dato che l'obiettivo è l'eliminazione degli oggetti, che normalmente richiede solo l'autorizzazione storage.objects.delete. Se questo è il motivo del messaggio di errore, assicurati di disporre dei ruoli IAM che dispongono delle autorizzazioni aggiuntive necessarie.

  3. Ti è stato concesso il ruolo IAM sulla risorsa di destinazione o sulla risorsa principale? Ad esempio, se ti viene concesso il ruolo Storage Object Viewer per un progetto e stai tentando di scaricare un oggetto, assicurati che l'oggetto si trovi in un bucket del progetto. Potresti avere inavvertitamente l'autorizzazione Storage Object Viewer per un progetto diverso.

  4. L'autorizzazione di accesso a un determinato bucket o oggetto è stata concessa tramite un valore di convenienza? La rimozione dell'accesso concesso a un valore di convenienza può comportare la perdita dell'accesso alle risorse per le entità precedentemente abilitate.

    Ad esempio, supponiamo che jane@example.com abbia il ruolo di base Proprietario (roles/owner) per un progetto denominato my-example-project e che la policy IAM del progetto conceda il ruolo Creatore oggetti Storage (roles/storage.objectCreator) al valore di convenienza projectOwner:my-example-project. Di conseguenza, jane@example.com dispone delle autorizzazioni associate al ruolo Creatore oggetti Storage per i bucket all'interno di my-example-project. Se questa concessione viene rimossa, jane@example.com perde le autorizzazioni associate al ruolo Creatore oggetti Storage.

    In questo caso, puoi riottenere l'accesso al bucket o all'oggetto concedendoti le autorizzazioni necessarie a livello di bucket o di oggetto per eseguire le azioni di cui hai bisogno.

  5. Esiste una policy di negazione IAM che ti impedisce di utilizzare determinate autorizzazioni? Puoi contattare l'amministratore dell'organizzazione per scoprire se è stata implementata una policy IAM Deny.

403: Autorizzazione negata

Problema: errore di autorizzazione negata quando configuri o gestisci la configurazione di Storage Intelligence per una risorsa.

Soluzione: se ricevi un errore di autorizzazione negata con un messaggio simile a permission storage.intelligenceConfigs.update quando configuri e gestisci Storage Intelligence per una risorsa, consulta la sezione delle autorizzazioni per l'operazione che vuoi eseguire. Per risolvere il problema, concedi le autorizzazioni appropriate. Puoi concedere le autorizzazioni in uno dei seguenti modi:

  • Concedi le autorizzazioni IAM alla stessa risorsa della gerarchia delle risorseGoogle Cloud in cui stai attivando Storage Intelligence.
  • Assicurati che una risorsa di livello superiore nella gerarchia delle risorse Google Cloud trasferisca le autorizzazioni alla risorsa figlio.

409: Conflict

Problema: ho provato a creare un bucket, ma ho ricevuto il seguente errore:

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

Soluzione: il nome del bucket che hai tentato di utilizzare (ad es. gs://cats o gs://dogs) è già in uso. Cloud Storage ha uno spazio dei nomi globale, quindi non puoi assegnare a un bucket lo stesso nome di un bucket esistente. Scegli un nome che non sia in uso.

412: Vincoli personalizzati violati

Problema: le mie richieste vengono rifiutate con un errore 412 orgpolicy.

Problema: le mie richieste vengono rifiutate con un errore 412 Multiple constraints were violated.

Soluzione: verifica con il team di amministratori della sicurezza se il bucket a cui invii le richieste è interessato da una policy dell'organizzazione che utilizza un vincolo personalizzato. Il bucket potrebbe essere interessato anche da diverse policy dell'organizzazione in conflitto tra loro. Ad esempio, se una policy specifica che i bucket devono avere la classe di archiviazione Standard Storage e un'altra policy specifica che i bucket devono avere la classe di archiviazione Coldline Storage.

429: Too Many Requests

Problema: le mie richieste vengono rifiutate con un errore 429 Too Many Requests.

Soluzione: stai raggiungendo un limite al numero di richieste che Cloud Storage consente per una determinata risorsa. Consulta le quote di spazio di archiviazione di Cloud Storage per una discussione sui limiti in Cloud Storage.

Errori di contesto dell'oggetto

Questa sezione descrive gli errori comuni che potresti riscontrare quando utilizzi i contesti degli oggetti.

400: Object Context Limit Exceeded

Problema: l'errore indica che l'oggetto ha superato il limite di 50 contesti.

Soluzione: hai superato il limite di contesti per oggetto. Riduci il numero di coppie chiave-valore di contesto e riprova.

400: Object Context Key Or Value Size Limit Exceeded

Problema: l'errore indica che la dimensione di una chiave o di un valore di contesto dell'oggetto supera il limite di 256 byte.

Soluzione: ogni chiave e valore di contesto dell'oggetto deve contenere al massimo 256 byte (codifica UTF-8). Abbrevia la chiave o il valore e riprova.

400: Object Context Key Or Value Aggregate Size Limit Exceeded

Problema: l'errore indica che la dimensione aggregata di tutte le chiavi e i valori del contesto dell'oggetto supera il limite.

Soluzione: la dimensione totale di tutte le chiavi e i valori di contesto di un oggetto non deve superare i 25 KiB (25.600 byte). Riduci la quantità totale di dati contestuali e riprova.

400: Object Context Key Or Value Forbidden Characters

Problema: l'errore indica che la chiave o il valore del contesto dell'oggetto contiene caratteri non consentiti.

Soluzione: le chiavi e i valori del contesto dell'oggetto non possono contenere apici singoli ('), virgolette doppie ("), barre rovesciate (\`), or forward slashes (/`). Controlla i contesti e rimuovi eventuali caratteri non validi.

400: Object Context Key Or Value Must Start With an Alphanumeric Character

Problema: l'errore indica che la chiave o il valore del contesto dell'oggetto non inizia con un carattere alfanumerico.

Soluzione: le chiavi e i valori del contesto dell'oggetto devono iniziare con una lettera o una cifra decimale.

400: Object Context Key Or Value Empty

Problema: l'errore indica che una chiave o un valore di contesto dell'oggetto non può essere vuoto.

Soluzione: fornisci una stringa non vuota sia per la chiave sia per il valore dei contesti dell'oggetto.

400: Object Context Key Or Value Invalid UTF-8

Problema: l'errore indica che una chiave o un valore di contesto dell'oggetto non è una stringa UTF-8 valida.

Soluzione: verifica che tutti i caratteri nelle chiavi e nei valori di contesto siano codificati utilizzando UTF-8.

400: Prefisso riservato della chiave del contesto dell'oggetto

Problema: l'errore indica che la chiave di contesto dell'oggetto inizia con un prefisso riservato.

Soluzione: alcuni prefissi sono riservati per l'utilizzo da parte del sistema. Evita di utilizzare prefissi limitati, come goog, nelle chiavi di contesto.

400: Object can't Have More Than 50 Drop Context Groups

Problema: l'errore indica che il parametro drop_context_groups non può avere più di 50 valori.

Soluzione: riduci il numero di valori nel parametro drop_context_groups e riprova.

400: Invalid Value For Drop Context Groups Field

Problema: l'errore indica che il parametro drop_context_groups contiene un valore non valido.

Soluzione: l'unico valore accettato per il parametro drop_context_groups è custom.

Diagnostica degli errori della console Google Cloud

Problema: quando utilizzo la console Google Cloud per eseguire un'operazione, ricevo un messaggio di errore generico. Ad esempio, visualizzo un messaggio di errore quando tento di eliminare un bucket, ma non vedo i dettagli sul motivo per cui l'operazione non è riuscita.

Soluzione: utilizza le notifiche della console Google Cloud per visualizzare informazioni dettagliate sull'operazione non riuscita:

  1. Fai clic sul pulsante Notifiche () nell'intestazione della console Google Cloud .

    Un menu a discesa mostra le operazioni più recenti eseguite dalla consoleGoogle Cloud .

  2. Fai clic sull'elemento di cui vuoi saperne di più.

    Viene visualizzata una pagina con informazioni dettagliate sull'operazione.

  3. Fai clic su ogni riga per espandere le informazioni dettagliate sull'errore.

Problema: quando utilizzo la console Google Cloud , non vedo una determinata colonna.

Soluzione: per visualizzare una determinata colonna nella console Google Cloud , fai clic sull'icona Opzioni di visualizzazione delle colonne () e seleziona la colonna che vuoi visualizzare.

Cartelle simulate e cartelle gestite

Problema: ho eliminato alcuni oggetti nel mio bucket e ora la cartella che li conteneva non viene visualizzata nella console Google Cloud .

Soluzione: mentre la console Google Cloud mostra i contenuti del bucket come se esistesse una struttura di directory, le cartelle non esistono fondamentalmente in Cloud Storage. Di conseguenza, quando rimuovi da un bucket tutti gli oggetti con un prefisso comune, l'icona della cartella che rappresenta quel gruppo di oggetti non viene più visualizzata nella console Google Cloud .

Problema: non riesco a creare cartelle gestite.

Soluzione: per creare cartelle gestite, assicurati che siano soddisfatti i seguenti requisiti:

  • Disponi di un ruolo IAM che contiene l'autorizzazione storage.managedfolders.create, ad esempio il ruolo Storage Object Admin (roles/storage.objectAdmin). Per istruzioni sulla concessione dei ruoli, consulta Utilizza le autorizzazioni IAM.

  • L'accesso uniforme a livello di bucket è abilitato nel bucket in cui vuoi creare cartelle gestite.

  • Non sono presenti condizioni IAM sul bucket o sul progetto che utilizzano il tipo di risorsa bucket (storage.googleapis.com/Bucket) o il tipo di risorsa oggetto (storage.googleapis.com/Object). Se un bucket all'interno di un progetto ha una condizione IAM che utilizza uno di questi tipi di risorse, non è possibile creare cartelle gestite in nessuno dei bucket all'interno di quel progetto, anche se la condizione viene rimossa in un secondo momento.

Problema: non riesco a disattivare l'accesso uniforme a livello di bucket perché nel mio bucket sono presenti cartelle gestite.

Soluzione: l'accesso uniforme a livello di bucket non può essere disattivato se nel bucket sono presenti cartelle gestite. Per disattivare l'accesso uniforme a livello di bucket, devi prima eliminare tutte le cartelle gestite nel bucket.

Errori del sito web statico

Di seguito sono riportati alcuni problemi comuni che potresti riscontrare durante la configurazione di un bucket per l'hosting di un sito web statico.

Pubblicazione HTTPS

Problema: voglio pubblicare i miei contenuti tramite HTTPS senza utilizzare un bilanciatore del carico.

Soluzione: puoi pubblicare contenuti statici tramite HTTPS utilizzando URI diretti come https://storage.googleapis.com/my-bucket/my-object. Per altre opzioni per pubblicare i tuoi contenuti tramite un dominio personalizzato su SSL, puoi:

Pagina non accessibile

Problema: ricevo un messaggio di errore Access denied per una pagina web pubblicata dal mio sito web.

Soluzione: verifica che l'oggetto sia condiviso pubblicamente. In caso contrario, consulta la sezione Rendere pubblici i dati per istruzioni su come procedere.

Se in precedenza hai caricato e condiviso un oggetto, ma poi ne carichi una nuova versione, devi ricondividerlo pubblicamente. Questo perché l'autorizzazione pubblica viene sostituita con il nuovo caricamento.

Download di contenuti

Problema: mi viene chiesto di scaricare i contenuti della mia pagina, anziché poterli visualizzare nel browser.

Soluzione: se specifichi un MainPageSuffix come oggetto che non ha un tipo di contenuto web, ai visitatori del sito viene chiesto di scaricare i contenuti anziché di visualizzare i contenuti della pagina pubblicata. Per risolvere il problema, aggiorna la voce dei metadati Content-Type con un valore appropriato, ad esempio text/html. Per istruzioni, consulta Modifica dei metadati degli oggetti.

Pubblicazione dei dati

Problema: sto tentando di rendere pubblici i miei dati, ma ricevo un errore relativo alla policy dell'organizzazione.

Soluzione: alcuni vincoli delle policy dell'organizzazione possono impedirti di rendere pubblici i tuoi dati. Ad esempio, il vincolo Condivisione limitata per i domini (constraints/iam.allowedPolicyMemberDomains) limita la condivisione delle risorse in base al dominio dell'organizzazione. In caso di errori relativi alle policy dell'organizzazione, contatta l'amministratore per farti concedere le autorizzazioni a livello di progetto o bucket per consentire la condivisione delle risorse modificando la policy dell'organizzazione per l'organizzazione, la cartella o la risorsa del progetto. Se continui a visualizzare questo errore dopo aver eseguito l'override della policy dell'organizzazione, potrebbe essere necessario attendere qualche minuto affinché la modifica venga applicata.

Problema: ricevo un errore di autorizzazione quando provo a rendere pubblici i miei dati.

Soluzione: assicurati di disporre dell'autorizzazione storage.buckets.setIamPolicy o dell'autorizzazione storage.objects.setIamPolicy. Queste autorizzazioni vengono concesse, ad esempio, nel ruolo Storage Admin (roles/storage.admin). Se disponi dell'autorizzazione storage.buckets.setIamPolicy o dell'autorizzazione storage.objects.setIamPolicy e continui a ricevere un errore, il tuo bucket potrebbe essere soggetto alla prevenzione dell'accesso pubblico, che non consente l'accesso a allUsers o allAuthenticatedUsers. La prevenzione dell'accesso pubblico potrebbe essere impostata direttamente sul bucket o potrebbe essere applicata tramite una policy dell'organizzazione impostata a un livello superiore.

Latenza

Di seguito sono riportati alcuni problemi comuni di latenza che potresti riscontrare. Inoltre, la dashboard di Service HealthGoogle Cloud fornisce informazioni sugli incidenti che interessano i servizi Google Cloud come Cloud Storage.

Latenza di caricamento o download

Problema: riscontro una maggiore latenza durante il caricamento o il download.

Soluzione: considera le seguenti cause comuni di latenza di caricamento e download:

  • Vincoli di CPU o memoria: il sistema operativo dell'ambiente interessato deve disporre di strumenti per misurare il consumo di risorse locali, come l'utilizzo della CPU e la memoria utilizzata.

  • Vincoli I/O del disco: l'impatto sulle prestazioni potrebbe essere causato dall'I/O del disco locale.

  • Distanza geografica: le prestazioni possono essere influenzate dalla separazione fisica del bucket Cloud Storage e dell'ambiente interessato, in particolare nei casi intercontinentali. I test con un bucket che si trova nella stessa regione dell'ambiente interessato possono identificare in che misura la separazione geografica contribuisce alla latenza.

    • Se applicabile, il resolver DNS dell'ambiente interessato deve utilizzare il protocollo EDNS(0) in modo che le richieste provenienti dall'ambiente vengano instradate tramite un Google Front End (GFE) appropriato.

Latenza della libreria client o della CLI

Problema: riscontro una latenza maggiore quando accedo a Cloud Storage con Google Cloud CLI o una delle librerie client.

Soluzione: gcloud CLI e le librerie client riprovano automaticamente le richieste quando è utile farlo e questo comportamento può aumentare efficacemente la latenza vista dall'utente finale. Utilizza la metrica di Cloud Monitoring storage.googleapis.com/api/request_count per verificare se Cloud Storage restituisce in modo coerente un codice di risposta ripetibile, ad esempio 429 o 5xx.

Server proxy

Problema: mi connetto tramite un server proxy. Cosa devo fare?

Soluzione: per accedere a Cloud Storage tramite un server proxy, devi consentire l'accesso a questi domini:

  • accounts.google.com per la creazione di token di autenticazione OAuth2
  • oauth2.googleapis.com per eseguire scambi di token OAuth2
  • *.googleapis.com per le richieste di spazio di archiviazione

Se il tuo server proxy o la tua policy di sicurezza non supportano la creazione di una lista consentita per dominio, ma solo per blocco di rete IP, ti consigliamo vivamente di configurare il server proxy per tutti gli intervalli di indirizzi IP di Google. Puoi trovare gli intervalli di indirizzi eseguendo una query sui dati WHOIS su ARIN. Come best practice, ti consigliamo di rivedere periodicamente le impostazioni del proxy per assicurarti che corrispondano agli indirizzi IP di Google.

Sconsigliamo di configurare il proxy con singoli indirizzi IP ottenuti da ricerche una tantum di oauth2.googleapis.com e storage.googleapis.com. Poiché i servizi Google vengono esposti utilizzando nomi DNS che mappano a un numero elevato di indirizzi IP che possono cambiare nel tempo, la configurazione del proxy in base a una ricerca una tantum potrebbe causare errori di connessione a Cloud Storage.

Se le tue richieste vengono indirizzate tramite un server proxy, potresti dover contattare l'amministratore di rete per assicurarti che l'intestazione Authorization contenente le tue credenziali non venga rimossa dal proxy. Senza l'intestazione Authorization, le tue richieste vengono rifiutate e ricevi un errore MissingSecurityHeader.

Passaggi successivi