Signierte URLs

Auf dieser Seite erhalten Sie eine Übersicht über signierte URLs, mit denen Sie allen Nutzern, die die URL haben, einen zeitlich begrenzten Zugriff auf Ressourcen gewähren können. Dabei ist es unerheblich, ob die Nutzer ein Google-Konto haben. Informationen zum Erstellen von signierten URLs finden Sie unter Signierte URLs mit gsutil erstellen und Signierte URLs mit einem eigenen Programm erstellen. Wenn Sie andere Möglichkeiten zum Steuern des Zugriffs auf Buckets und Objekte kennenlernen möchten, sehen Sie sich die Übersicht über die Zugriffssteuerung an.

Übersicht

Eine signierte URL beschränkt die Berechtigung und die Zeit zum Senden einer Anfrage. Der Abfragestring von signierten URLs enthält Authentifizierungsinformationen, damit Nutzer ohne Anmeldedaten bestimmte Aktionen für eine Ressource ausführen können. Wenn Sie eine signierte URL generieren, geben Sie ein Nutzer- oder Dienstkonto an, das ausreichende Berechtigungen hat, um die Anfrage der signierten URL ausführen zu können. Nachdem Sie eine signierte URL generiert haben, kann sie von allen Nutzern, denen sie bekannt ist, verwendet werden, um innerhalb eines bestimmten Zeitraums bestimmte Aktionen auszuführen, z. B. ein Objekt zu lesen.

Wann sollte ich eine signierte URL verwenden?

Unter bestimmten Voraussetzungen möchten Sie möglicherweise, dass Nutzer nicht zwingend ein Google-Konto besitzen müssen, um auf Cloud Storage zuzugreifen, aber dennoch mithilfe Ihrer anwendungsspezifischen Logik den Zugriff steuern. Üblicherweise wird dem Nutzer dafür eine signierte URL zur Verfügung gestellt, über die er innerhalb eines begrenzten Zeitraums Lese-, Schreib- oder Löschzugriff auf die entsprechende Ressource erhält. Beim Erstellen der signierten URL geben Sie eine Ablaufzeit an. Jeder, der die URL kennt, kann auf die Ressource zugreifen, bis die Ablaufzeit für die URL erreicht oder der Schlüssel zum Signieren der URL rotiert wurde.

Die häufigsten Anfragen für signierte URLs sind Objektuploads und -downloads. In den meisten Fällen, z. B. beim Kopieren von Objekten, Erstellen von Objekten oder Bearbeiten von Metadaten, ist das Erstellen einer signierten URL und deren Weitergabe an einen Nutzer ein unnötiger zusätzlicher Schritt. Stattdessen sollten Sie ein Design in Betracht ziehen, bei dem die Entität, die für das Erstellen der signierten URL zuständig ist, direkt die gewünschte Anfrage an Cloud Storage sendet.

Optionen zum Generieren einer signierten URL

Cloud Storage unterstützt verschiedene Methoden zum Generieren von signierten URLs:

  • V4-Signaturprozess mit Dienstkontoauthentifizierung: Dieser Signaturmechanismus wird unten beschrieben.

  • V2-Signaturprozess mit Dienstkontoauthentifizierung: Weitere Informationen zu diesem Signaturmechanismus finden Sie hier.

  • Signieren mit HMAC-Authentifizierung: Als Nutzer des Amazon Simple Storage Service (Amazon S3) können Sie Ihre vorhandenen Workflows verwenden, um signierte URLs für Cloud Storage zu generieren. Dazu geben Sie einfach Cloud Storage-Ressourcen an, verweisen auf den Host storage.googleapis.com und verwenden die HMAC-Anmeldedaten von Google, um die signierte URL zu generieren.

Beispiel einer signierten URL

Das folgende Beispiel zeigt eine signierte URL, die mit dem V4-Signaturprozess mit Dienstkontoauthentifizierung erstellt wurde:

https://storage.googleapis.com/example-bucket/cat.jpeg?X-Goog-Algorithm=
GOOG4-RSA-SHA256&X-Goog-Credential=example%40example-project.iam.gserviceaccount
.com%2F20181026%2Fus-central-1%2Fstorage%2Fgoog4_request&X-Goog-Date=20181026T18
1309Z&X-Goog-Expires=900&X-Goog-SignedHeaders=host&X-Goog-Signature=247a2aa45f16
9edf4d187d54e7cc46e4731b1e6273242c4f4c39a1d2507a0e58706e25e3a85a7dbb891d62afa849
6def8e260c1db863d9ace85ff0a184b894b117fe46d1225c82f2aa19efd52cf21d3e2022b3b868dc
c1aca2741951ed5bf3bb25a34f5e9316a2841e8ff4c530b22ceaa1c5ce09c7cbb5732631510c2058
0e61723f5594de3aea497f195456a2ff2bdd0d13bad47289d8611b6f9cfeef0c46c91a455b94e90a
66924f722292d21e24d31dcfb38ce0c0f353ffa5a9756fc2a9f2b40bc2113206a81e324fc4fd6823
a29163fa845c8ae7eca1fcf6e5bb48b3200983c56c5ca81fffb151cca7402beddfc4a76b13344703
2ea7abedc098d2eb14a7

Diese signierte URL hat Lesezugriff auf das Objekt cat.jpeg im Bucket example-bucket ermöglicht. Die folgenden Abfrageparameter machen diese URL zu einer signierten URL:

  • X-Goog-Algorithm: Der zum Signieren der URL verwendete Algorithmus.

  • X-Goog-Credential: Informationen zu den Anmeldedaten, die zum Erstellen der signierten URL verwendet wurden.

  • X-Goog-Date: Das Datum und die Uhrzeit, ab dem bzw. ab der die signierte URL verwendet werden konnte, im ISO 8601-Basisformat YYYYMMDD'T'HHMMSS'Z'.

  • X-Goog-Expires: Die Gültigkeitsdauer der signierten URL, gemessen in Sekunden ab dem Wert von X-Goog-Date. In diesem Beispiel läuft die signierte URL in 15 Minuten ab. Der längste Ablaufwert beträgt 604.800 Sekunden (7 Tage).

  • X-Goog-SignedHeaders: Header, die in jeder Anfrage enthalten sein mussten, bei der die signierte URL verwendet wurde.

  • X-Goog-Signature: Der Authentifizierungsstring, der Anfragen mit dieser signierten URL Zugriff auf cat.jpeg ermöglicht hat.

Signierte URLs mit fortsetzbaren Uploads

Bei fortsetzbaren Uploads erstellen und verwenden Sie nur eine signierte URL für die Anfrage POST, mit der der Upload initiiert wird. Diese erste Anfrage gibt einen Sitzungs-URI zurück, den Sie in nachfolgenden PUT-Anfragen zum Hochladen der Daten verwenden. Da der Sitzungs-URI als Authentifizierungstoken fungiert, verwenden die PUT-Anfragen keine signierten URLs.

Ein Vorteil fortsetzbarer Uploads besteht darin, dass die Initiierungsanfrage vom Server gestellt werden kann, ohne dass signierte URLs von Clients verarbeitet werden müssen. Beachten Sie dabei jedoch Folgendes:

  • Der Sitzungs-URI kann von allen ihren Inhabern verwendet werden, um Daten hochzuladen. Achten Sie beim Senden des Sitzungs-URI an einen Client darauf, dass er über HTTPS übertragen wird.

  • Fortsetzbare Uploads werden an die Region der ersten Anfrage angepinnt. Wenn sich Server und Client an geografisch weit voneinander entfernten Orten befinden, können Sie langsame Uploads vermeiden, indem Sie die anfängliche POST-Anfrage vom Server erstellen und signieren lassen, dann aber die signierte URL an den Client weitergeben, sodass der Upload von dessen Standort aus initiiert wird.

Überlegungen zu signierten URLs

Folgendes sollten Sie beim Arbeiten mit signierten URLs beachten:

  • Signierte URLs können nur für den Zugriff auf Cloud Storage-Ressourcen über XML API-Endpunkte verwendet werden.

  • Signierte URLs können normalerweise für jede XML API-Anfrage erstellt werden; es gibt jedoch zwei Ausnahmen:

    • Signierte URLs, die V4-Signaturen verwenden, können nicht in Anfragen verwendet werden, deren Text die aufgeteilte Codierung verwendet.

    • Node.js-Cloud Storage-Clientbibliotheken können derzeit nur signierte URLs für einzelne Objekte erstellen. Sie können beispielsweise nicht verwendet werden, um signierte URLs zum Auflisten von Objekten in einem Bucket zu erstellen.

  • Bei der Angabe von Anmeldedaten wird empfohlen, dass Sie Ihr Dienstkonto anhand der zugehörigen E-Mail-Adresse identifizieren. Sie können aber auch die Dienstkonto-ID verwenden.

  • Achten Sie darauf, bei allen Anfragen, die eine signierte URL verwenden, den Autorisierungs-Header wegzulassen. Bei Verwendung beider Felder kann sich Cloud Storage anstelle der signierten URL mit den im Header angegebenen Anmeldedaten authentifizieren. Dies könnte sonst möglicherweise mehr Zugriff auf Ressourcen gewähren als beabsichtigt.

Kanonische Anfragen

Signierte URLs verwenden kanonische Anfragen als Teil der Informationen, die im zugehörigen Abfragestringparameter X-Goog-Signature codiert sind. Wenn Sie eine signierte URL mit Cloud Storage-Tools erstellen, wird die erforderliche kanonische Anfrage automatisch erstellt und eingefügt. Allerdings müssen Sie die kanonische Anfrage selbst definieren, wenn Sie eine signierte URL mit Ihrem eigenen Programm erstellen.

Anmeldedatenbereich

Der Anmeldedatenbereich ist im zu signierenden String und im Abfragestringparameter X-Goog-Credential enthalten.

Strings mit IAM signBlob signieren

Wenn Sie eine signierte URL mit einem Programm generieren, haben Sie die Möglichkeit, den String mit der Methode IAM signBlob von Google Cloud zu signieren. Die von dieser Methode ausgegebene Signature wird beim Zusammenstellen der signierten URL verwendet.

Der Dienst signBlob rotiert regelmäßig den von ihm verwendeten privaten Schlüssel. Die generierten signierten URLs sind mindestens 12 Stunden lang nutzbar, können aber möglicherweise vor der von Ihnen festgelegten Ablaufzeit aufhören zu funktionieren, wenn die Ablaufzeit länger als 12 Stunden ist. Deswegen eignen sich diese aus signBlob generierten signierten URLs am besten für den kurzzeitigen Zugriff auf Ressourcen.

Nächste Schritte