Processus de signature V4 avec les outils Cloud Storage

Cette page explique comment utiliser gsutil et les bibliothèques clientes Cloud Storage pour générer facilement des URL signées. Les URL signées accordent un accès en lecture ou en écriture limité dans le temps à une ressource Cloud Storage spécifique. Toute personne disposant de l'URL signée peut l'utiliser lorsqu'elle est active, qu'elle possède ou non un compte Google. Pour en savoir plus sur les URL signées, consultez la présentation des URL signées. Pour créer vos propres URL signées, consultez la page Processus de signature V4 avec votre propre programme.

Pour générer une URL signée, procédez comme suit :

gsutil

  1. Générez une nouvelle clé privée ou utilisez une clé privée existante pour un compte de service. La clé peut être au format JSON ou PKCS12.

    Pour en savoir plus sur les clés privées et les comptes de service, consultez la page Comptes de service.

  2. Exécutez la commande gsutil signurl, en transmettant le chemin d'accès à la clé privée de l'étape précédente, ainsi que le nom du bucket ou de l'objet pour lequel vous souhaitez générer une URL signée.

    Par exemple, avec une clé stockée dans le dossier Desktop, la commande suivante génère une URL signée permettant aux utilisateurs d'afficher l'objet cat.jpeg pendant 10 minutes.

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

En cas de réussite, la réponse doit se présenter comme suit :

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

L'URL signée est la chaîne commençant par https://storage.googleapis.com. Il est probable qu'elle s'étende sur plusieurs lignes. Toute personne disposant de cette URL peut accéder à la ressource associée (dans le cas présent, cat.jpeg) pendant la période indiquée (ici, 10 minutes).

Exemples de code

Les exemples suivants montrent comment créer une URL signée pouvant obtenir un objet à partir de Cloud Storage.

C++

Pour en savoir plus, consultez la documentation de référence de l'API Cloud Storage en langage C++.

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

Pour plus d'informations, consultez la documentation de référence de l'API Cloud Storage en langage Java.

// 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

Pour plus d'informations, consultez la documentation de référence de l'API Cloud Storage en langage Node.js.

// 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}'`);

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.