Fehlerbehebung

Auf dieser Seite werden Methoden zur Fehlerbehebung für häufige Fehler beschrieben, die bei der Verwendung von Cloud Storage auftreten können.

Im Google Cloud-Status-Dashboard finden Sie Informationen zu regionalen oder globalen Vorfällen, die Google Cloud-Dienste wie Cloud Storage betreffen.

Unverarbeitete Anfragen protokollieren

Bei Verwendung von Tools wie gcloud oder den Cloud Storage-Clientbibliotheken werden viele der Anfrage- und Antwortinformationen vom Tool verarbeitet. Manchmal ist es jedoch hilfreich, Details zur Unterstützung bei der Fehlerbehebung anzuzeigen oder Fragen in Foren wie Stack Overflow zu posten. Gehen Sie nach der folgenden Anleitung vor, um Anfrage- und Antwortheader für das Tool zurückzugeben:

Console

Die Anzeige von Anfrage- und Antwortinformationen hängt vom Browser ab, über den Sie auf die Google Cloud Console zugreifen. Google Chrome:

  1. Klicken Sie auf die Chrome-Schaltfläche für das Hauptmenü ().

  2. Wählen Sie Weitere Tools aus.

  3. Klicken Sie auf Entwicklertools.

  4. Klicken Sie im angezeigten Bereich auf den Tab Network.

Befehlszeile

Verwenden Sie globale Debugging-Flags in Ihrer Anfrage. Beispiel:

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

Clientbibliotheken

C++

  • Legen Sie die Umgebungsvariable CLOUD_STORAGE_ENABLE_TRACING=http fest, um den gesamten HTTP-Traffic abzurufen.

  • Legen Sie die Umgebungsvariable CLOUD_STORAGE_ENABLE_CLOG=yes fest, um das Logging für jeden RPC abzurufen.

C#

Fügen Sie über ApplicationContext.RegisterLogger einen Logger hinzu und legen Sie Logging-Optionen für den Nachrichten-Handler HttpClient fest. Weitere Informationen finden Sie unter Häufig gestellte Fragen:

Einfach loslegen (Go)

Legen Sie die Umgebungsvariable GODEBUG=http2debug=1 fest. Weitere Informationen finden Sie im Go-Paket net/http.

Wenn Sie auch den Anfragetext protokollieren möchten, verwenden Sie einen benutzerdefinierten HTTP-Client.

Java

  1. Erstellen Sie eine Datei mit dem Namen "logging.properties" mit folgendem Inhalt:

    # 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. Logging.properties mit Maven verwenden

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

Weitere Informationen finden Sie unter Plug-in HTTP-Transport.

Node.js

Legen Sie die Umgebungsvariable NODE_DEBUG=https fest, bevor Sie das Knotenskript aufrufen.

PHP

Stellen Sie dem Client mit httpHandler Ihren eigenen HTTP-Handler bereit und richten Sie Middleware ein, um die Anfrage und die Antwort zu protokollieren.

Python

Verwenden Sie das Logging-Modul. Beispiel:

import logging
import http.client

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

Ruby

Fügen Sie oben in der Datei .rb file nach require "google/cloud/storage" Folgendes hinzu:

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

Benutzerdefinierte Header hinzufügen

Das Hinzufügen benutzerdefinierter Header zu Anfragen ist ein gängiges Tool für das Debugging, z. B. zum Aktivieren von Debug-Headern oder zum Tracing einer Anfrage. Das folgende Beispiel zeigt, wie Anfrageheader für verschiedene Cloud Storage-Tools festgelegt werden:

Befehlszeile

Verwenden Sie das Flag --additional-headers, das für die meisten Befehle verfügbar ist. Beispiel:

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

Dabei definieren HEADER_NAME und HEADER_VALUE den Header, den Sie der Anfrage hinzufügen.

Clientbibliotheken

C++

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

C#

Im folgenden Beispiel wird jeder Anfrage von der Clientbibliothek ein benutzerdefinierter Header hinzugefügt.

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

Einfach loslegen (Go)

Wenn Sie den Anfragen der Go-Clientbibliothek benutzerdefinierte Header hinzufügen möchten, müssen Sie den für den Client verwendeten Transport mit einem benutzerdefinierten RoundTripper verpacken. Im folgenden Beispiel werden Debug-Header gesendet und die entsprechenden Antwortheader geloggt:

package main

import (
  "context"
  "io/ioutil"
  "log"
  "net/http"

  "cloud.google.com/go/storage"
  "google.golang.org/api/option"
  raw "google.golang.org/api/storage/v1"
  htransport "google.golang.org/api/transport/http"
)

func main() {

  ctx := context.Background()

  // Standard way to initialize client:
  // client, err := storage.NewClient(ctx)
  // if err != nil {
  //      // handle error
  // }

  // Instead, create a custom http.Client.
  base := http.DefaultTransport
  trans, err := htransport.NewTransport(ctx, base, option.WithScopes(raw.DevstorageFullControlScope),
            option.WithUserAgent("custom-user-agent"))
  if err != nil {
            // Handle error.
  }
  c := http.Client{Transport:trans}

  // Add RoundTripper to the created HTTP client.
  c.Transport = withDebugHeader{c.Transport}

  // Supply this client to storage.NewClient
  client, err := storage.NewClient(ctx, option.WithHTTPClient(&c))
  if err != nil {
              // Handle error.
  }

  // Use client to make a request
 }

type withDebugHeader struct {
  rt http.RoundTripper
}

func (wdh withDebugHeader) RoundTrip(r *http.Request) (*http.Response, error) {
  headerName := "X-Custom-Header"
  r.Header.Add(headerName, "value")
  resp, err := wdh.rt.RoundTrip(r)
  if err == nil {
    log.Printf("Resp Header: %+v, ", resp.Header.Get(headerName))
  } else {
    log.Printf("Error: %+v", err)
  }
  return resp, err
}

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

Alle Methodenaufrufe, die HTTP-Anfragen auslösen, akzeptieren ein optionales $restOptions-Argument als letztes Argument. Sie können benutzerdefinierte Header auf Anfrage- oder Client-Basis bereitstellen.

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

Das Hinzufügen benutzerdefinierter Header zu Anfragen der Python-Clientbibliothek wird derzeit nicht unterstützt.

Ruby

require "google/cloud/storage"

storage = Google::Cloud::Storage.new

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

Fehlercodes

Nachfolgend sehen Sie einige gängige HTTP-Statuscodes.

301: Dauerhaft verschoben

Problem: Ich bin dabei, eine statische Website einzurichten, und beim Zugriff auf einen Verzeichnispfad wird ein leeres Objekt und der HTTP-Antwortcode 301 zurückgegeben.

Lösung: Wenn beim Zugriff auf ein Verzeichnis, z. B. http://www.example.com/dir/, ein Nullbyte-Objekt vom Browser heruntergeladen wird und Sie den HTTP-Antwortcode 301 erhalten, enthält Ihr Bucket sehr wahrscheinlich ein leeres Objekt mit diesem Namen. Prüfen Sie, ob dies der Fall ist, und beheben Sie das Problem:

  1. Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.

    Buckets aufrufen

  2. Klicken Sie im oberen Bereich der Google Cloud Console auf Cloud Shell aktivieren.
  3. Führen Sie gcloud storage ls --recursive gs://www.example.com/dir/ aus. Wenn die Ausgabe http://www.example.com/dir/ enthält, ist an diesem Speicherort ein leeres Objekt vorhanden.
  4. Entfernen Sie das leere Objekt mit dem folgenden Befehl: gcloud storage rm gs://www.example.com/dir/

Sie können nun auf http://www.example.com/dir/ zugreifen und die index.html-Datei dieses Verzeichnisses anstelle des leeren Objekts zurückgeben lassen.

400: Ungültige Anfrage

Problem: Bei einem fortsetzbaren Upload habe ich diesen Fehler und die Meldung Failed to parse Content-Range header. erhalten.

Lösung: Der Wert, den Sie im Header Content-Range verwendet haben, ist ungültig. Content-Range: */* ist beispielsweise ungültig und sollte als Content-Range: bytes */* angegeben werden. Wenn Sie diesen Fehler erhalten, ist Ihr aktueller fortsetzbarer Upload nicht mehr aktiv und Sie müssen einen neuen fortsetzbaren Upload starten.

401: Nicht autorisiert

Problem: Anfragen an einen öffentlichen Bucket direkt oder über Cloud CDN schlagen mit den Antworten HTTP 401: Unauthorized und Authentication Required fehl.

Lösung: Achten Sie darauf, dass Ihr Client oder ein Zwischen-Proxy Anfragen an Cloud Storage keinen Authorization-Header hinzufügt. Jede Anfrage mit einem Authorization-Header wird überprüft, als wenn es sich um einen Authentifizierungsversuch handeln würde, selbst wenn die Anfrage leer ist.

403: Konto deaktiviert

Problem: Ich habe versucht, einen Bucket zu erstellen, erhalte jedoch den Fehler 403 Account Disabled.

Lösung: Dieser Fehler weist darauf hin, dass Sie die Abrechnung für das verknüpfte Projekt noch nicht aktiviert haben. Wie Sie vorgehen müssen, um die Abrechnung zu aktivieren, erfahren Sie unter Abrechnung für ein Projekt aktivieren.

Wenn die Abrechnung aktiviert ist und Sie weiterhin diese Fehlermeldung erhalten, wenden Sie sich an den Support. Geben Sie dabei Ihre Projekt-ID und eine Beschreibung des Problems an.

403: Unzulässig

Problem: Ich sollte die Berechtigung haben, auf einen bestimmten Bucket oder ein bestimmtes Objekt zuzugreifen. Wenn ich das aber versuche, erhalte ich einen 403 - Forbidden-Fehler mit einer Nachricht wie dieser: example@email.com does not have storage.objects.get access to the Google Cloud Storage object.

Lösung: Ihnen fehlt eine IAM-Berechtigung für den Bucket oder das Objekt, die zum Abschließen der Anfrage erforderlich ist. Wenn Sie davon ausgehen, dass Sie die Anfrage stellen können, aber dies nicht können, führen Sie die folgenden Prüfungen durch:

  1. Ist der in der Fehlermeldung genannte Empfänger derjenige, den Sie erwartet haben? Wenn die Fehlermeldung auf eine unerwartete E-Mail-Adresse oder einen „anonymen Aufrufer“ verweist, verwendet Ihre Anfrage nicht die gewünschten Anmeldedaten. Das kann daran liegen, dass das Tool, mit dem Sie die Anfrage stellen, mit den Anmeldedaten eines anderen Alias oder einer anderen Entität eingerichtet wurde, oder dass die Anfrage in Ihrem Namen von einem Dienstkonto gestellt wird.

  2. Ist die in der Fehlermeldung referenzierte Berechtigung eine, die Sie benötigen? Wenn die Berechtigung unerwartet ist, liegt dies wahrscheinlich daran, dass das von Ihnen verwendete Tool zusätzlichen Zugriff benötigt, um Ihre Anfrage abzuschließen. Wenn beispielsweise Objekte in einem Bucket im Bulk gelöscht werden sollen, muss gcloud zuerst eine Liste der Objekte im Bucket erstellen, die gelöscht werden sollen. Für diesen Teil der Bulk-Löschaktion ist die Berechtigung storage.objects.list erforderlich, die möglicherweise überraschend ist, da das Ziel das Löschen von Objekten ist, für das normalerweise nur die Berechtigung storage.objects.delete erforderlich ist. Wenn dies die Ursache Ihrer Fehlermeldung ist, prüfen Sie, ob Ihnen IAM-Rollen mit den zusätzlichen erforderlichen Berechtigungen zugewiesen sind.

  3. Haben Sie die IAM-Rolle für die vorgesehene Ressource oder die übergeordnete Ressource? Wenn Ihnen zum Beispiel die Rolle Storage Object Viewer für ein Projekt zugewiesen ist und Sie versuchen, ein Objekt herunterzuladen, prüfen Sie, ob sich das Objekt in einem Bucket im Projekt befindet. Möglicherweise haben Sie versehentlich die Berechtigung Storage Object Viewer für ein anderes Projekt.

  4. Wird Ihre Berechtigung zum Zugriff auf einen bestimmten Bucket oder ein bestimmtes Objekt über einen Konvergenzwert gewährt? Das Entfernen des Zugriffs, der einem Konvergenzwert gewährt wurde, kann dazu führen, dass zuvor aktivierte Hauptkonten den Zugriff auf Ressourcen verlieren.

    Beispiel: jane@example.com hat die einfache Rolle Inhaber (roles/owner) für ein Projekt mit dem Namen my-example-project und die IAM-Richtlinie des Projekts weist den Storage-Objekt-Ersteller (roles/storage.objectCreator) dem Konvergenzwert projectOwner:my-example-project zu. Das bedeutet, dass jane@example.com die Berechtigungen hat, die der Rolle „Storage-Objekt-Ersteller” für Buckets in my-example-project zugeordnet sind. Wenn diese Zuweisung entfernt wird, verliert jane@example.com die Berechtigungen, die mit der Rolle „Storage-Objekt-Ersteller“ verknüpft sind.

    In einem solchen Szenario können Sie den Zugriff auf den Bucket oder das Objekt wiedererlangen, indem Sie sich selbst die Berechtigungen auf Bucket- oder Objektebene erteilen, die zum Ausführen der erforderlichen Aktionen erforderlich sind.

  5. Gibt es eine IAM-Ablehnungsrichtlinie, die verhindert, dass Sie bestimmte Berechtigungen verwenden können? Sie können sich an den Administrator Ihrer Organisation wenden, um herauszufinden, ob eine IAM-Ablehnungsrichtlinie eingerichtet wurde.

403: Unzulässig

Problem: Ich lade meine Inhalte aus storage.cloud.google.com herunter und erhalte die Fehlermeldung 403: Forbidden, wenn ich den Browser verwende, um das Objekt über die URL aufzurufen:

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

Lösung: Die Verwendung von storage.cloud.google.com zum Herunterladen von Objekten wird als authentifizierter Browserdownload bezeichnet. Dabei wird die cookiebasierte Authentifizierung verwendet. Wenn Sie Datenzugriffslogs in Cloud-Audit-Logs so konfiguriert haben, dass der Zugriff auf Objekte verfolgt wird, besteht eine der Einschränkungen dieser Funktion darin, authentifizierte Browserdownloads zu verwenden. Sie können nicht zum Herunterladen eines verfolgten Objekts verwendet werden, es sei denn, das Objekt ist öffentlich lesbar. Der Versuch, einen authentifizierten Browserdownload für nicht öffentliche Objekte zu verwenden, führt zu einer 403-Antwort. Diese Einschränkung will dem Phishing für Google-IDs entgegenwirken, die für die cookiebasierte Authentifizierung verwendet werden.

Führen Sie einen der folgenden Schritte aus, um dieses Problem zu vermeiden:

  • Verwenden Sie direkte API-Aufrufe, die nicht authentifizierte Downloads unterstützen, anstatt authentifizierte Browserdownloads.
  • Deaktivieren Sie die Cloud Storage-Audit-Logs zum Datenzugriff, die den Zugriff auf die betroffenen Objekte verfolgen. Beachten Sie, dass Audit-Logs zum Datenzugriff auf oder oberhalb der Projektebene eingerichtet werden und gleichzeitig auf mehreren Ebenen aktiviert werden können.
  • Legen Sie Ausnahmen fest, um bestimmte Nutzer vom Audit-Log-Tracking von Datenzugriffen auszuschließen. So können diese Nutzer authentifizierte Browserdownloads ausführen.
  • Machen Sie die betroffenen Objekte öffentlich lesbar, indem Sie allUsers oder allAuthenticatedUsers Leseberechtigung erteilen. In Audit-Logs zum Datenzugriff wird kein Zugriff auf öffentliche Objekte aufgezeichnet.

409: Konflikt

Problem: Ich habe versucht, einen Bucket zu erstellen, erhalte jedoch folgenden Fehler:

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

Lösung: Der Bucket-Name, den Sie verwenden wollten (z. B. gs://cats oder gs://dogs), ist bereits vergeben. Cloud Storage verfügt über einen globalen Namespace. Sie können einem Bucket daher keinen Namen geben, der bereits für einen anderen Bucket verwendet wird. Wählen Sie einen Namen, der noch nicht vergeben ist.

412: Verstoß gegen benutzerdefinierte Einschränkungen

Problem: Meine Anfragen werden mit dem Fehler 412 orgpolicy abgelehnt.

Problem: Meine Anfragen werden mit dem Fehler 412 Multiple constraints were violated abgelehnt.

Lösung: Fragen Sie bei Ihrem Sicherheitsadministratorteam, ob der Bucket, an den Sie Anfragen senden, von einer Organisationsrichtlinie betroffen ist, die eine benutzerdefinierte Einschränkung verwendet. Ihr Bucket kann auch von verschiedenen Organisationsrichtlinien betroffen sein, die miteinander in Konflikt stehen. Wenn eine Richtlinie beispielsweise angibt, dass Buckets die Standardspeicherklasse haben müssen, und eine andere Richtlinie, dass Buckets die Coldline Storage-Speicherklasse haben müssen.

429: Zu viele Anfragen

Problem: Meine Anfragen werden mit dem Fehler 429 Too Many Requests abgelehnt.

Lösung: Sie erreichen ein Limit für die Anzahl der Anfragen, die Cloud Storage für eine bestimmte Ressource zulässt. Eine Erläuterung der Limits in Cloud Storage finden Sie unter Cloud Storage-Kontingente.

  • Wenn Ihre Arbeitslast aus 1.000 Anfragen pro Sekunde an einen Bucket besteht, beachten Sie in den Richtlinien für die Anforderungsrate und Zugriffsverteilung die Best Practices, einschließlich der schrittweisen Erhöhung Ihrer Arbeitslast und der Vermeidung sequenzieller Dateinamen.

  • Wenn Ihre Arbeitslast potenziell 50 Gbit/s oder mehr ausgehenden Netzwerktraffic zu bestimmten Standorten verwendet, prüfen Sie die Bandbreitennutzung, um sicherzustellen, dass Sie kein Bandbreitenkontingent erreichen.

Fehler in der Google Cloud Console diagnostizieren

Problem: Wenn ich die Google Cloud Console für einen Vorgang verwende, wird eine generische Fehlermeldung angezeigt. Ich erhalte beispielsweise eine Fehlermeldung, wenn ich versuche, einen Bucket zu löschen, es wird aber nicht angezeigt, warum der Vorgang fehlgeschlagen ist.

Lösung: Verwenden Sie die Benachrichtigungen der Google Cloud Console, um detaillierte Informationen zum fehlgeschlagenen Vorgang anzeigen zu lassen:

  1. Klicken Sie im Google Cloud Console-Header auf die Schaltfläche Benachrichtigungen ().

    In einem Drop-down-Menü werden die zuletzt von der Google Cloud Console ausgeführten Vorgänge angezeigt.

  2. Klicken Sie auf das Element, zu dem Sie mehr erfahren möchten.

    Eine Seite mit detaillierten Informationen zum Vorgang wird geöffnet.

  3. Klicken Sie auf die einzelnen Zeilen, um die detaillierten Fehlerinformationen zu maximieren.

Simulierte Ordner und verwaltete Ordner

Problem: Ich habe einige Objekte in meinem Bucket gelöscht und der Ordner, in dem sie enthalten waren, wird jetzt nicht in der Google Cloud Console angezeigt.

Lösung: In der Google Cloud Console wird der Inhalt des Buckets so angezeigt, als wäre eine Verzeichnisstruktur vorhanden. Ordner existieren im Grunde nicht in Cloud Storage. Wenn Sie also alle Objekte mit einem gemeinsamen Präfix aus einem Bucket entfernen, wird das Ordnersymbol, das diese Objektgruppe darstellt, nicht mehr in der Google Cloud Console angezeigt.

Problem: Ich kann keine verwalteten Ordner erstellen.

Lösung: Achten Sie darauf, dass die folgenden Anforderungen erfüllt sind, um verwaltete Ordner zu erstellen:

  • Sie haben eine IAM-Rolle mit der Berechtigung storage.managedfolders.create, z. B. die Rolle Storage-Objekt-Administrator (roles/storage.objectAdmin). Eine Anleitung zum Zuweisen von Rollen finden Sie unter IAM-Berechtigungen verwenden.

  • Der einheitliche Zugriff auf Bucket-Ebene ist für den Bucket aktiviert, in dem Sie verwaltete Ordner erstellen möchten.

  • Es gibt keine IAM-Bedingungen für den Bucket oder das Projekt, die den Bucket-Ressourcentyp (storage.googleapis.com/Bucket) oder den Objektressourcentyp (storage.googleapis.com/Object) verwenden. Wenn ein Bucket innerhalb eines Projekts eine IAM-Bedingung hat, die einen dieser Ressourcentypen verwendet, können verwaltete Ordner in keinem der Buckets innerhalb dieses Projekts erstellt werden, auch wenn die Bedingung später entfernt wird.

Problem: Ich kann den einheitlichen Zugriff auf Bucket-Ebene nicht deaktivieren, da in meinem Bucket verwaltete Ordner vorhanden sind.

Lösung: Der einheitliche Zugriff auf Bucket-Ebene kann nicht deaktiviert werden, wenn der Bucket verwaltete Ordner enthält. Wenn Sie den einheitlichen Zugriff auf Bucket-Ebene deaktivieren möchten, müssen Sie zuerst alle verwalteten Ordner im Bucket löschen.

Fehler bei einer statischen Website

Die folgenden Probleme treten häufig auf, wenn Sie einen Bucket zum Hosten einer statischen Website einrichten.

HTTPS-Bereitstellung

Problem: Ich möchte meine Inhalte über HTTPS bereitstellen, ohne einen Load-Balancer zu verwenden.

Lösung: Sie können statische Inhalte über HTTPS mit direkten URIs wie https://storage./my-bucket/my-object bereitstellen. Außerdem haben Sie zur Bereitstellung Ihrer Inhalte über eine benutzerdefinierte Domain und SSL folgende Möglichkeiten:

Domainbestätigung

Problem: Ich kann meine Domain nicht bestätigen.

Lösung: Normalerweise werden Sie während der Prüfung in der Search Console angewiesen, eine Datei in Ihre Domain hochzuladen. Dies ist jedoch ohne den entsprechenden Bucket eventuell nicht möglich. Diesen können Sie erst erstellen, nachdem Sie die Domainbestätigung durchgeführt haben.

Überprüfen Sie in diesem Fall die Inhaberschaft mithilfe der Verifizierungsmethode Domain Name Provider. Weitere Informationen hierzu finden Sie unter Prüfung der Domaininhaberschaft. Diese Bestätigung kann durchgeführt werden, bevor der Bucket erstellt wird.

Seite nicht zugänglich

Problem: Ich erhalte die Fehlermeldung Access denied für eine Webseite, die über meine Website bereitgestellt wird.

Lösung: Prüfen Sie, ob das Objekt öffentlich freigegeben ist. Wenn dies nicht der Fall ist, finden Sie eine Anleitung dazu unter Daten öffentlich machen.

Wenn Sie zuvor ein Objekt hochgeladen und freigegeben haben und dann eine neue Version hochladen, müssen Sie das Objekt noch einmal öffentlich freigeben. Der Grund hierfür ist, dass die öffentliche Berechtigung mit dem neuen Upload ersetzt wird.

Fehler beim Aktualisieren der Berechtigung

Problem: Ich erhalte eine Fehlermeldung, wenn ich versuche, meine Daten zu veröffentlichen.

Lösung: Achten Sie darauf, dass Sie die Berechtigung setIamPolicy für Ihr Objekt oder Ihren Bucket haben. Diese Berechtigung wird beispielsweise in der Rolle Storage Admin erteilt. Wenn Sie die Berechtigung setIamPolicy haben und weiterhin einen Fehler erhalten, unterliegt Ihr Bucket möglicherweise der Verhinderung des öffentlichen Zugriffs, wodurch der Zugriff auf allUsers oder allAuthenticatedUsers nicht möglich ist. Die Verhinderung des öffentlichen Zugriffs kann direkt für den Bucket festgelegt oder über eine Organisationsrichtlinie erzwungen werden, die auf einer höheren Ebene festgelegt ist.

Herunterladen von Inhalten

Problem: Meine Website wird im Browser nicht dargestellt. Stattdessen werde ich aufgefordert, den Inhalt meiner Website herunterzuladen.

Lösung: Wenn Sie ein MainPageSuffix als Objekt angeben, das keinen Webinhaltstyp aufweist, wird die Seite den Besuchern nicht angezeigt. Stattdessen werden sie dazu aufgefordert, die Inhalte der Website herunterzuladen. Aktualisieren Sie den Metadateneintrag content-type auf einen geeigneten Wert wie text/html, um dieses Problem zu beheben. Eine Anleitung dazu finden Sie unter Objektmetadaten bearbeiten.

Latenz

Nachfolgend einige Beispiele für häufig auftretende Latenzprobleme. Das Google Cloud-Status-Dashboard enthält Informationen zu regionalen oder globalen Vorfällen, die Google Cloud-Dienste wie Cloud Storage betreffen.

Latenz beim Hochladen oder Herunterladen

Problem: Beim Hochladen oder Herunterladen tritt eine erhöhte Latenz auf.

Lösung: Beachten Sie die folgenden häufigen Ursachen für Latenz beim Hochladen oder Herunterladen:

  • CPU- oder Speichereinschränkungen: Das Betriebssystem der betroffenen Umgebung sollte Tools zur Messung des lokalen Ressourcenverbrauchs haben, z. B. zur CPU- und Arbeitsspeichernutzung.

  • Laufwerk-E/A-Beschränkungen: Die Leistungseinbußen können durch die lokale Laufwerk-E/A verursacht werden.

  • Geografische Entfernung: Die Leistung kann durch die physische Trennung Ihres Cloud Storage-Buckets und der betroffenen Umgebung beeinflusst werden, insbesondere in Interkontinentalen Szenarien. Tests mit einem Bucket, der sich in derselben Region wie die betroffene Umgebung befindet, können zeigen, inwieweit die geografische Trennung zu Ihrer Latenz beiträgt.

    • Gegebenenfalls sollte der DNS-Resolver der betroffenen Umgebung das EDNS(0)-Protokoll verwenden, damit Anfragen aus der Umgebung über ein entsprechendes Google Front End weitergeleitet werden.

Latenz der Befehlszeile oder der Clientbibliothek

Problem: Beim Zugriff auf Cloud Storage über die Google Cloud CLI oder eine der Clientbibliotheken tritt eine erhöhte Latenz auf.

Lösung: Sowohl gcloud CLI als auch Clientbibliotheken wiederholen Anfragen automatisch, wenn dies sinnvoll ist. Dieses Verhalten kann die Latenz aus Sicht des Endnutzers erhöhen. Verwenden Sie den Cloud Monitoring-Messwert storage.googleapis.com/api/request_count, um festzustellen, ob Cloud Storage konsistent einen wiederholbaren Antwortcode wie 429 oder 5xx bereitstellt.

Proxyserver

Problem: Ich stelle die Verbindung über einen Proxyserver her. Was muss ich tun?

Lösung: Für den Zugriff auf Cloud Storage über einen Proxyserver müssen Sie den Zugriff auf diese Domains zulassen:

  • accounts.google.com zum Erstellen von OAuth2-Authentifizierungstokens
  • oauth2.googleapis.com für den OAuth2-Token-Austausch
  • *.googleapis.com für Speicheranfragen

Wenn Ihr Proxyserver oder Ihre Sicherheitsrichtlinie weiße Listen nach Domain nicht unterstützt und stattdessen weiße Listen nach IP-Netzwerkblock benötigt, sollten Sie Ihren Proxyserver unbedingt für alle IP-Adressbereiche von Google konfigurieren. Diese Adressbereiche finden Sie durch Abfrage der WHOIS-Daten unter ARIN. Als Best Practice sollten Sie Ihre Proxy-Einstellungen regelmäßig prüfen, um dafür zu sorgen, dass sie mit den IP-Adressen von Google übereinstimmen.

Die Konfiguration von Proxyservern mit einzelnen IP-Adressen, die Sie durch eine einmalige DNS-Abfrage von oauth2.googleapis.comund storage. erhalten haben, wird nicht empfohlen. Google-Dienste werden über DNS-Namen bereitgestellt, denen viele IP-Adressen zugeordnet sind, die sich im Laufe der Zeit ändern können. Daher können bei der Verbindung mit Cloud Storage Fehler auftreten, wenn Sie den Proxy auf der Grundlage einer einzelnen Abfrage konfigurieren.

Wenn Ihre Anfragen über einen Proxyserver geleitet werden, klären Sie mit Ihrem Netzwerkadministrator, dass der Authorization-Header mit Ihren Anmeldedaten nicht durch den Proxy entfernt werden darf. Ohne den Authorization-Header werden Ihre Anfragen abgelehnt und Sie erhalten den Fehler MissingSecurityHeader.

Nächste Schritte