V4-Signaturprozess mit Cloud Storage-Tools

Auf dieser Seite wird beschrieben, wie Sie mit gsutil und Cloud Storage-Clientbibliotheken signierte URLs generieren. Signierte URLs bieten zeitlich begrenzten Lese- oder Schreibzugriff auf eine bestimmte Cloud Storage-Ressource. Jeder, der über die signierte URL verfügt, kann sie verwenden, während sie aktiv ist. Dies gilt unabhängig davon, ob die Person ein Google-Konto besitzt. Weitere Informationen zu signierten URLs finden Sie unter Signierte URLs. Informationen zum Erstellen von signierten URLs finden Sie unter Signierte URLs mit einem eigenen Programm erstellen.

So generieren Sie eine signierte URL:

gsutil

  1. Generieren Sie einen neuen privaten Schlüssel oder verwenden Sie einen vorhandenen privaten Schlüssel für ein Dienstkonto. Der Schlüssel kann entweder im JSON- oder im PKCS12-Format vorliegen.

    Weitere Informationen zu privaten Schlüsseln und Dienstkonten finden Sie unter Dienstkonten.

  2. Verwenden Sie den Befehl gsutil signurl, wobei der Pfad zum privaten Schlüssel des vorherigen Schritts und der Name des Buckets oder Objekts eingefügt wird, für das Sie eine signierte URL generieren möchten.

    Zum Beispiel wird durch den folgenden Befehl mithilfe eines Schlüssels im Ordner Desktop eine signierte URL generiert, mit der sich Nutzer das Objekt cat.jpeg zehn Minuten lang ansehen können.

    gsutil signurl -d 10m Desktop/private-key.json gs://example-bucket/cat.jpeg

Wenn der Vorgang erfolgreich ist, wird Ihnen in etwa folgende Antwort angezeigt:

URL    HTTP Method    Expiration    Signed URL
gs://example-bucket/cat.jpeg GET 2018-10-26 15:19:52 https://storage.googleapis.
com/example-bucket/cat.jpeg?x-goog-signature=2d2a6f5055eb004b8690b9479883292ae74
50cdc15f17d7f99bc49b916f9e7429106ed7e5858ae6b4ab0bbbdb1a8ccc364dad3a0da2caebd308
87a70c5b2569d089ceb8afbde3eed4dff5086f0db5483998c175980991fe899fbd2cd8cb813b0016
5e8d56e0a8aa7b3d7a12ee1baa8400611040f05b50a1a8eab5ba223fe1375747748de950ec7a4dc5
0f8382a6ffd4994ac42498d7daa703d9a414d4475154d0e7edaa92d4f2507d92c1f7e8efa7cab64d
f68b5df48575b9259d8d0bdb5dc752bdf07bd162d98ff2924f2e4a26fa6b3cede73ad5333c47d146
a21c2ab2d97115986a12c68ff37346d6c2ca83e56b8ec8ad95632710b489b75c35697d781c38e&
x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=example%40example-project.
iam.gserviceaccount.com%2F20181026%2Fus%2Fstorage%2Fgoog4_request&x-goog-date=
20181026T211942Z&x-goog-expires=3600&x-goog-signedheaders=host

Die signierte URL ist der String, der mit https://storage.googleapis.com beginnt. Sie erstreckt sich in der Regel über mehrere Zeilen. Diese URL kann von jeder Person für den angegebenen Zeitraum (in diesem Fall zehn Minuten) verwendet werden, um auf die zugehörige Ressource (hier cat.jpeg) zuzugreifen.

Codebeispiele

In den folgenden Beispielen wird gezeigt, wie Sie eine signierte URL erstellen, mit dem Sie ein Objekt aus Cloud Storage abrufen können.

C++

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage C++ API.

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name, std::string object_name) {
  StatusOr<std::string> signed_url = client.CreateV4SignedUrl(
      "GET", std::move(bucket_name), std::move(object_name),
      gcs::SignedUrlDuration(std::chrono::minutes(15)));

  if (!signed_url) {
    throw std::runtime_error(signed_url.status().message());
  }

  std::cout << "The signed url is: " << *signed_url << "\n\n"
            << "You can use this URL with any user agent, for example:\n"
            << "curl '" << *signed_url << "'\n";
}

Java

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Java API.

// Instantiate a Google Cloud Storage client
Storage storage = StorageOptions.getDefaultInstance().getService();

// The name of a bucket, e.g. "my-bucket"
// String bucketName = "my-bucket";

// The name of an object, e.g. "my-object"
// String objectName = "my-object";

// Define resource
BlobInfo blobinfo = BlobInfo.newBuilder(BlobId.of(bucketName, objectName)).build();

// Generate Signed URL
URL url =
    storage.signUrl(blobinfo, 15, TimeUnit.MINUTES, Storage.SignUrlOption.withV4Signature());

System.out.println("Generated GET signed URL:");
System.out.println(url);
System.out.println("You can use this URL with any user agent, for example:");
System.out.println("curl '" + url + "'");

Node.js

Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud Storage Node.js API.

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'File to access, e.g. file.txt';

// These options will allow temporary read access to the file
const options = {
  version: 'v4',
  action: 'read',
  expires: Date.now() + 15 * 60 * 1000, // 15 minutes
};

// Get a v4 signed URL for reading the file
const [url] = await storage
  .bucket(bucketName)
  .file(filename)
  .getSignedUrl(options);

console.log('Generated GET signed URL:');
console.log(url);
console.log('You can use this URL with any user agent, for example:');
console.log(`curl '${url}'`);

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...