Dépannage

Cette page décrit les méthodes de dépannage des erreurs courantes que vous pouvez rencontrer lors de l'utilisation de Cloud Storage.

Journalisation des requêtes brutes

Lorsque vous utilisez des outils tels que gsutil ou les bibliothèques clientes Cloud Storage, la plupart des informations sur les requêtes et les réponses sont gérées par l'outil. Cependant, il est parfois utile d'afficher les détails pour faciliter le dépannage. Suivez les instructions ci-dessous pour renvoyer des en-têtes de requête et de réponse pour votre outil :

Console

L'affichage des informations de requêtes et de réponses dépendent du navigateur que vous utilisez pour accéder à Google Cloud Console. Pour le navigateur Google Chrome :

  1. Cliquez sur le bouton Menu principal de Chrome ().

  2. Sélectionnez Plus d'outils.

  3. Cliquer sur Outils de développement.

  4. Dans le volet qui s'affiche, cliquez sur l'onglet Réseau.

gsutil

Utilisez l'option -D de premier niveau dans votre requête. Exemple :

gsutil -D ls gs://my-bucket/my-object

Bibliothèques clientes

C++

  • Définissez la variable d'environnement CLOUD_STORAGE_ENABLE_TRACING=http pour afficher le trafic HTTP complet.

  • Définissez la variable d'environnement CLOUD_STORAGE_ENABLE_CLOG=yes pour afficher la journalisation de chaque RPC.

C#

Ajoutez un enregistreur via ApplicationContext.RegisterLogger et définissez les options de journalisation sur le gestionnaire de messages HttpClient. Pour plus d'informations, consultez l'entrée FAQ.

Go

Définissez la variable d'environnement GODEBUG=http2debug=1. Pour en savoir plus, consultez la page Package Go net/http.

Si vous souhaitez également consigner le corps de la requête, utilisez un client HTTP personnalisé.

Java

  1. Créez un fichier nommé "logging.properties" avec le contenu suivant :

    # 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. Utilisez logging.properties avec Maven

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

Pour en savoir plus, consultez la page Transport HTTP connectable.

Node.js

Définissez la variable d'environnement NODE_DEBUG=https avant d'appeler le script Node.

PHP

Fournissez votre propre gestionnaire HTTP au client à l'aide de httpHandler, puis configurez un middleware pour consigner la requête et la réponse.

Python

Utilisez le module de journalisation. Exemple :

import logging
import http.client

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

Ruby

En haut de votre fichier .rb file après require "google/cloud/storage", ajoutez les éléments suivants :

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

Codes d'erreur

Vous trouverez ci-dessous des codes d'état HTTP courants que vous pouvez rencontrer.

301 Moved Permanently

Problème : Je configure un site Web statique, et l'accès à un chemin de répertoire renvoie un objet vide et un code de réponse HTTP 301.

Solution : Si votre navigateur télécharge un objet de zéro octet et que vous obtenez un code de réponse HTTP 301 lors de l'accès à un répertoire, par exemple http://www.example.com/dir/, votre bucket contient probablement un objet vide portant ce nom. Pour vérifier que c'est bien le cas et résoudre le problème, procédez comme suit :

  1. Dans Google Cloud Console, accédez à la page du Navigateur Cloud Storage.

    Accéder à la page du navigateur

  2. Cliquez sur le bouton Activer Cloud Shell en haut de Google Cloud Console.Activer Cloud Shell
  3. Exécutez gsutil ls -R gs://www.example.com/dir/. Si le résultat inclut http://www.example.com/dir/, un objet vide se trouve à cet emplacement.
  4. Supprimez l'objet vide avec la commande suivante : gsutil rm gs://www.example.com/dir/

Vous pouvez maintenant accéder à http://www.example.com/dir/. Le fichier index.html de ce répertoire est renvoyé à la place de l'objet vide.

400 Bad Request

Problème : lors d'une importation avec reprise, j'ai reçu cette erreur et le message Failed to parse Content-Range header..

Solution : la valeur que vous avez utilisée dans l'en-tête Content-Range n'est pas valide. Par exemple, la valeur Content-Range: */* n'est pas valide et doit être spécifiée sous la forme Content-Range: bytes */*. Si vous rencontrez cette erreur, votre importation avec reprise actuelle n'est plus active, et vous devez en lancer une nouvelle.

401 Unauthorized

Problème : Les requêtes adressées directement à un bucket public ou via Cloud CDN échouent avec une erreur HTTP 401: Unauthorized (HTTP 401 : Opération non autorisée) et une réponse Authentication Required (Authentification requise).

Solution : Vérifiez que votre client ou tout proxy intermédiaire n'ajoute pas d'en-tête Authorization aux requêtes à Cloud Storage. Toute requête comportant un en-tête Authorization, même si elle est vide, est validée comme s'il s'agissait d'une tentative d'authentification.

403 Account Disabled

Problème : J'ai essayé de créer un bucket, mais une erreur 403 Account Disabled s'est affichée.

Solution : Cette erreur indique que vous n'avez pas encore activé la facturation pour le projet associé. Pour connaître la procédure à suivre, consultez la section Activer la facturation pour un projet.

Si la facturation est activée et que vous continuez à recevoir ce message d'erreur, vous pouvez contacter l'assistance en incluant l'ID du projet et une description de votre problème.

403 Access Denied

Problème : J'ai essayé de répertorier les objets dans mon bucket, mais une erreur 403 Access Denied et/ou un message semblable à Anonymous caller does not have storage.objects.list access s'est affiché.

Solution : Vérifiez que vos identifiants sont corrects. Par exemple, si vous utilisez gsutil, vérifiez que les identifiants stockés dans votre fichier .boto sont exacts. Vérifiez également que gsutil utilise le fichier .boto que vous attendez en exécutant la commande gsutil version -l et en vérifiant l'entrée config path(s).

En supposant que vous utilisiez les bons identifiants, vos requêtes sont-elles acheminées via un proxy à l'aide du protocole HTTP (au lieu de HTTPS) ? Si oui, vérifiez si votre proxy est configuré de manière à supprimer l'en-tête Authorization de ces requêtes. Si tel est le cas, assurez-vous d'utiliser le protocole HTTPS au lieu de HTTP pour vos requêtes.

403 Forbidden

Problème : Je télécharge mon contenu public depuis storage.cloud.google.com, et une erreur 403: Forbidden s'affiche lorsque j'utilise le navigateur pour accéder à l'objet public :

https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME

Solution : L'utilisation de storage.cloud.google.com pour télécharger des objets est appelée téléchargement authentifié via un navigateur. Elle a toujours recours à l'authentification basée sur les cookies, même lorsque les objets sont accessibles publiquement pour tous les utilisateurs (allUsers). Si vous avez configuré les journaux d'accès aux données dans les journaux d'audit Cloud pour suivre l'accès aux objets, l'une des restrictions de cette fonctionnalité est que les téléchargements authentifiés via un navigateur ne peuvent pas être utilisés pour accéder aux objets concernés. Si vous essayez d'effectuer cette opération, vous obtenez une réponse 403.

Pour éviter ce problème, effectuez l'une des opérations suivantes :

409 Conflict

Problème : J'ai essayé de créer un bucket, mais l'erreur suivante s'est affichée :

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

Solution : Le nom de bucket que vous avez essayé d'utiliser (par exemple, gs://cats ou gs://dogs) est déjà attribué. Cloud Storage utilise un espace de noms global : vous ne pouvez donc pas nommer un bucket avec le même nom qu'un bucket existant. Choisissez un nom qui n'est pas déjà utilisé.

Diagnostiquer les erreurs liées à Google Cloud Console

Problème : Lorsque j'utilise Google Cloud Console pour effectuer une opération, un message d'erreur générique s'affiche. Par exemple, un message d'erreur s'affiche lorsque j'essaie de supprimer un bucket, mais je ne vois pas les raisons de l'échec de l'opération.

Solution : Utilisez les notifications de Google Cloud Console pour afficher des informations détaillées sur l'opération ayant échoué :

  1. Cliquez sur le bouton Notifications dans l'en-tête de Google Cloud Console.

    Notifications

    Une liste déroulante affiche les dernières opérations effectuées par Google Cloud Console.

  2. Cliquez sur l'élément dont vous souhaitez en savoir plus.

    Une page s'ouvre et affiche des informations détaillées sur l'opération.

  3. Cliquez sur chaque ligne pour développer les informations détaillées sur l'erreur.

    Vous trouverez ci-dessous un exemple d'informations d'erreur pour une opération de suppression de bucket, qui explique qu'une règle de conservation de bucket a empêché la suppression du bucket.

    Détails d'erreur de suppression de bucket

Erreurs gsutil

Voici les erreurs gsutil courantes que vous pouvez rencontrer.

gsutil stat

Problème : J'ai essayé d'exécuter la commande gsutil stat pour afficher l'état d'un objet dans un sous-répertoire, mais une erreur s'est affichée.

Solution : Cloud Storage utilise un espace de noms unique pour le stockage d'objets dans des buckets. Vous pouvez utiliser des barres obliques ("/") dans le nom d'un objet pour donner l'impression que celui-ci se trouve dans une structure hiérarchique, mais la commande gsutil stat traite ces barres comme faisant partie du nom de l'objet.

Par exemple, si vous exécutez la commande gsutil -q stat gs://my-bucket/my-object/, gsutil recherche des informations sur l'objet my-object/ (avec une barre oblique finale), par opposition à une opération sur des objets imbriqués sous my-bucket/my-object/. À moins qu'un objet portant ce nom n'existe réellement, l'opération échoue.

Pour obtenir la liste des sous-répertoires, exécutez plutôt la commande gsutil ls.

gcloud auth

Problème : J'ai essayé d'authentifier gsutil à l'aide de la commande gcloud auth, mais je ne parviens toujours pas à accéder à mes buckets ou à mes objets.

Solution : La version autonome et la version SDK Cloud de gsutil sont peut-être installées sur votre système. Exécutez la commande gsutil version -l et vérifiez la valeur de using cloud sdk. Si la valeur est False, votre système utilise la version autonome de gsutil lorsque vous exécutez des commandes. Vous pouvez supprimer cette version de gsutil de votre système ou vous authentifier à l'aide de la commande gsutil config.

Erreurs de site Web statique

Vous trouverez ci-dessous une liste des problèmes courants que vous pouvez rencontrer lors de la configuration d'un bucket pour héberger un site Web statique.

Diffusion HTTPS

Problème : Je souhaite diffuser mon contenu via HTTPS sans utiliser d'équilibreur de charge.

Solution : Vous pouvez diffuser du contenu statique via HTTPS à l'aide d'URI directs tels que https://storage.googleapis.com/my-bucket/my-object. Pour les autres options permettant de diffuser votre contenu à travers un domaine personnalisé via SSL, vous pouvez :

Validation de domaine

Problème : Je ne parviens pas à valider mon domaine.

Solution : Le processus de validation dans Search Console vous oblige à importer un fichier dans votre domaine. Toutefois, vous ne pourrez peut-être pas le faire sans disposer au préalable d'un bucket associé, que vous ne pourrez créer qu'après avoir effectué la validation du domaine.

Dans ce cas, confirmez la propriété du domaine à l'aide de la méthode de validation du fournisseur de nom de domaine. Consultez la section Validation de la propriété pour en savoir plus sur les étapes à suivre. Cette validation peut être effectuée avant la création du bucket.

Page inaccessible

Problème : Un message d'erreur Access denied s'affiche pour une page Web diffusée par mon site Web.

Solution : Vérifiez que l'objet est partagé en mode public. Si ce n'est pas le cas, consultez la page Rendre des données publiques pour en savoir sur les étapes à suivre.

Si vous avez précédemment importé et partagé un objet, mais que vous en avez ensuite importé une nouvelle version, vous devez repartager l'objet en mode public. En effet, l'autorisation publique est remplacée par la nouvelle importation.

Impossible de modifier les autorisations

Problème : Je reçois un message d'erreur lorsque j'essaie de rendre mes données publiques.

Solution : assurez-vous de disposer de l'autorisation setIamPolicy pour votre objet ou votre bucket. Cette autorisation est accordée, par exemple, dans le rôle Storage Admin. Si vous disposez de l'autorisation setIamPolicy et que vous obtenez toujours une erreur, votre bucket peut être soumis à la prévention de l'accès public, qui n'autorise pas l'accès à allUsers ou allAuthenticatedUsers. La protection contre l'accès public peut être définie directement sur le bucket, ou appliquée via une règle d'administration définie à un niveau supérieur.

Téléchargement du contenu

Problème : Je suis invité à télécharger le contenu de ma page au lieu de pouvoir l'afficher dans mon navigateur.

Solution : Si vous spécifiez MainPageSuffix en tant qu'objet n'ayant pas de type de contenu Web, la page n'est pas diffusée, et les visiteurs du site sont invités à télécharger le contenu. Pour résoudre ce problème, mettez à jour l'entrée de métadonnées content-type avec une valeur appropriée, par exemple text/html. Consultez la section Modifier des métadonnées d'objets pour en savoir plus sur les étapes à suivre.

Serveurs proxy

Problème : Je me connecte via un serveur proxy. Que dois-je faire ?

Solution : Pour vous connecter à Cloud Storage via un serveur proxy, vous devez autoriser l'accès aux domaines suivants :

  • accounts.google.com pour créer des jetons d'authentification OAuth2 via gsutil config
  • oauth2.googleapis.com pour les échanges de jetons OAuth2
  • *.googleapis.com pour les requêtes de stockage

Si votre serveur proxy ou votre stratégie de sécurité ne prennent pas en charge l'ajout sur liste blanche par domaine, mais requièrent à la place l'ajout sur liste blanche par bloc réseau IP, nous vous recommandons vivement de configurer votre serveur proxy pour toutes les plages d'adresses IP Google. Vous pouvez trouver les plages d'adresses en interrogeant les données WHOIS sur le site ARIN. Il est recommandé de vérifier régulièrement les paramètres de votre serveur proxy afin de vous assurer qu'ils correspondent aux adresses IP de Google.

Nous vous déconseillons de configurer votre serveur proxy avec des adresses IP individuelles obtenues à partir de recherches ponctuelles sur oauth2.googleapis.com et storage.googleapis.com. Les services Google étant exposés via des noms DNS mappés sur un grand nombre d'adresses IP susceptibles de changer au fil du temps, la configuration de votre serveur proxy sur la base d'une recherche ponctuelle peut entraîner des échecs de connexion à Cloud Storage.

Si vos requêtes sont acheminées via un serveur proxy, vous devrez peut-être contacter votre administrateur réseau pour vous assurer que l'en-tête Authorization contenant vos identifiants n'est pas supprimé par le serveur. Si l'en-tête Authorization n'est pas présent, vos requêtes sont rejetées, et vous recevez une erreur MissingSecurityHeader.

Étape suivante