Cloud Storage のツールを使用した V4 署名プロセス

このページでは、gsutil と Cloud Storage クライアント ライブラリを使用して署名付き URL を簡単に生成する方法について説明します。署名付き URL は、特定の Cloud Storage リソースへの期限付きの読み取りまたは書き込みアクセスを提供します。署名付き URL は、その URL を所有する全員が、Google アカウントを持っているかどうかにかかわらず、URL がアクティブである限り使用できます。署名付き URL の詳細については、署名付き URL の概要をご覧ください。自分で署名付き URL を作成するには、独自プログラムによる V4 署名プロセスをご覧ください。

署名付き URL を生成するには、次の手順を行います。

gsutil

  1. 新しい秘密鍵を生成するか、サービス アカウント用の既存の秘密鍵を使用します。鍵は、JSON 形式か PKCS12 形式のものを使用できます。

    秘密鍵とサービス アカウントの詳細については、サービス アカウントをご覧ください。

  2. gsutil signurl コマンドを使用して、前のステップで準備した秘密鍵へのパスと、署名付き URL を生成するバケットまたはオブジェクトの名前を渡します。

    たとえば、次のコマンドでは、フォルダ Desktop に保存されている鍵を使用して、オブジェクト cat.jpeg を 10 分間ユーザーが参照できるようにするための署名付き URL が生成されます。

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

成功すると、以下のようなレスポンスが表示されます。

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

署名付き URL は https://storage.googleapis.com で始まる文字列であり、数行にわたる可能性があります。この URL を使用すると、設定した時間枠内の間(この例では 10 分)、関連付けられたリソース(この例では cat.jpeg)に誰でもアクセスできます。

コードサンプル

次のサンプルでは、Cloud Storage からオブジェクトを取得できる署名付き URL の作成方法を具体的に示しています。

C++

詳細については、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

詳細については、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

詳細については、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}'`);

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。