署名付き URL

このページでは、署名付き URL の概要を示します。これを使用すると、Google アカウントを持っているかどうかにかかわらず、URL を所有しているユーザーに、期限付きのリソース アクセス権を提供できます。署名付き URL を作成する方法については、Cloud Storage Tools を使用した V4 署名プロセスと、独自プログラムを使用した V4 署名プロセスをご覧ください。バケットとオブジェクトへのアクセスを制御するその他の方法については、アクセス制御の概要をご覧ください。

概要

署名付き URL は、リクエスト時における制限付きの権限と有効期限が設定された URL です。署名付き URL のクエリ文字列には認証情報が含まれているため、認証情報を持たないユーザーでもリソースに対して特定の操作を実行できます。署名付き URL を生成する際には、署名付き URL によるリクエストを実行するのに十分な権限を持っているユーザーまたはサービス アカウントを指定します。署名付き URL を生成すると、その URL を所有するすべての人が、指定された期間内に、その署名付き URL を使用してオブジェクトの読み取りなどの指定されたアクションを実行できます。

署名付き URL を使用する必要がある場合

シナリオによっては、ユーザーの Google アカウントによって Cloud Storage へのアクセスを制御することが望ましくなく、むしろアプリケーション固有のロジックを使ってアクセスを制御したい場合があります。このような場合には、一般にユーザーに署名付き URL を提供し、ユーザーにそのリソースについて期間限定で読み取り、書き込み、削除のアクセス権を与えることで対処します。URL が期限切れになるまで、URL を知っている人であれば誰でもそのリソースにアクセスできます。署名付き URL を作成するときには、有効期限を指定します。

署名付き URL を生成するためのオプション

Cloud Storage では、署名付き URL を生成するいくつかの方法がサポートされています。

  • サービス アカウント認証による V4 署名ベータ版: この署名メカニズムについては後述します。

  • サービス アカウント認証による V2 署名: この署名メカニズムの詳細については、こちらをご覧ください。

  • HMAC 認証による署名: Amazon Simple Storage Service(Amazon S3)ユーザーの場合は、既存のワークフローを使用して Cloud Storage の署名付き URL を生成できます。Cloud Storage リソースとホスト storage.googleapis.com を指定してから、署名付き URL を生成するプロセスにおいて Google HMAC の認証情報を使用します。

署名付き URL の例

次は、サービス アカウント認証を使用した V4 署名プロセスに従って作成された署名付き URL の例です。

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

この署名付き URL により、バケット example-bucket 内の cat.jpeg オブジェクトの読み取りアクセスが提供されます。この署名付き URL の基になったクエリ パラメータは次のとおりです。

  • X-Goog-Algorithm: URL の署名に使用されるアルゴリズム。

  • X-Goog-Credential: 署名付き URL の作成に使用される認証情報。

  • X-Goog-Date: 署名付き URL が使用可能になる日付と時刻。ISO 8601 の基本形式YYYYMMDD'T'HHMMSS'Z')で表示されます。

  • X-Goog-Expires: 署名付き URL の有効期間。X-Goog-Date に格納された値からの秒数で表されます。この例では、署名付き URL の有効期限は 15 分です。有効期間の最大値は 604800 秒(7 日間)です。

  • X-Goog-SignedHeaders: 署名付き URL を使用するリクエストの一部として含める必要があるヘッダー。

  • X-Goog-Signature: cat.jpeg へのアクセスに、署名付き URL を使用したリクエストを許可する認証文字列。

再開可能なアップロードでの署名付き URL の使用

再開可能アップロードで署名付き URL を使用してオブジェクトをバケットにアップロードする場合、署名付き URL を使用する必要があるのは最初の POST リクエストだけです。POST リクエストではデータはアップロードされません。その場合、リクエストは、データをアップロードするための後続の PUT リクエストで使用されるセッション URI を返します。セッション URI は事実上の認証トークンであるため、PUT リクエストにおいては元の署名付き URL を使用する必要はなくなります。この動作によりサーバーによる POST リクエストの処理が許可され、クライアント自身が署名付き URL を処理する必要が回避されます。

再開可能なアップロードは、それが開始されるリージョンに固定されます。たとえば、米国で作成された再開可能なアップロード URL がアジアのクライアントに渡された場合でも、アップロード自体は米国で実行されます。そのため、再開可能なアップロードを開始したリージョンとは異なるリージョンで実行すると、アップロードに時間がかかる可能性があります。この状況を回避するには、最初の POST リクエストの作成と署名をサーバーで実行した後、署名付き URL をクライアントに渡してアップロードがそのロケーションから開始されるようにします。アップロードが開始されたら、クライアントは得られたセッション URI を通常どおり使用して、署名が不要な PUT リクエストを発行できます。

署名付き URL の考慮事項

署名付き URL を使用する際は、次の点に注意してください。

  • 一般的には、あらゆる種類の XML API リクエストに対して、署名付き URL を使用できます。ただし、現在 Node.js の Cloud Storage クライアント ライブラリでは、個々のオブジェクトに対してだけ署名付き URL を作成します。たとえば、バケット内のオブジェクトを一覧表示する署名付き URL を作成することはできません。

  • 認証情報を指定するときに、メールアドレスを使用してサービス アカウントを特定することをおすすめします。ただし、サービス アカウント ID の使用もサポートされています。

正規リクエスト

署名付き URL では、X-Goog-Signature クエリ文字列パラメータでエンコードされた情報の一部として正規リクエストを使用します。Cloud Storage ツールで署名済み URL を作成すると、必要な正規リクエストが自動的に作成され、組み込まれます。ただし、自分のプログラムで署名付きの URL を作成する場合、正規リクエストを自分で定義する必要があります。

認証情報スコープ

認証情報スコープは、署名する文字列と X-Goog-Credential クエリ文字列パラメータの両方に表示されます。次のような構文で表示されます。

[DATE]/[LOCATION]/storage/goog4_request
  • [DATE]: YYYYMMDD 形式の日付。署名する文字列で使用されている日付と一致する必要があります。
  • [LOCATION]: リソースが存在する、または作成される予定のリージョン。Cloud Storage のリソースの場合、[LOCATION] の値は任意です。[LOCATION] パラメータは、Amazon Simple Storage Service(Amazon S3)との互換性を維持するために提供されています。
  • storage: サービス名。
  • goog4_request: 署名付き URL の種類。

例: 20181102/us/storage/goog4_request

Google Cloud Platform ツールを使用した文字列への署名

プログラムから署名付き URL を生成する場合、GCP が提供するツールを使用して文字列に署名できます。

App Engine の App Identity サービス

App Engine アプリケーション内の署名処理は、App Engine サービス アカウントの認証情報を利用する App Engine の Identity サービスによって実行されます。たとえば、Python App Identity API を使用すると、次のことが可能になります。

  • google.appengine.api.app_identity.sign_blob() を使用して、作成した文字列のバイトに署名する。Signature は、署名付き URL を組み立てるときに必要になります。

  • google.appengine.api.app_identity.get_service_account_name() を使用してサービス アカウント名を取得する。サービス アカウント名 GoogleAccessId は、署名付き URL を組み立てるときに必要になります。

App Engine ではその他の言語もサポートしています。

App Identity サービスは、blob を署名するときに秘密鍵をローテーションします。App Identity サービスで生成された署名付き URL は、少なくとも 1 時間有効であり、リソースへの短時間のアクセスに最適です。

IAM signBlob

IAM signBlob メソッドを使用して署名できます。

次のステップ

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

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

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