署名付き URL

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

概要

署名付き URL は、リクエスト時における制限付きの権限と有効期限が設定された URL です。署名付き URL のクエリ文字列には認証情報が含まれているため、認証情報を持たないユーザーでもリソースに対して特定の操作を実行できます。

  • 署名付き URL を生成するときには、署名付き URL によるリクエストを実行するのに十分な権限を持つアカウントを指定する必要があります。

    • ほとんどの場合、このアカウントはサービス アカウントです。

    • 署名付き URL を生成する独自のプログラムを作成する場合は、ユーザー アカウントを使用できます(HMAC 鍵が関連付けられている場合)。

署名付き URL を生成すると、その URL を所有するすべてのユーザーが、指定された期間内に、その署名付き URL を使用してオブジェクトの読み取りなどの指定されたアクションを実行できます。

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

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

署名付き URL の最も一般的な使用例は、アップロードとダウンロードです。このようなリクエストでは、オブジェクト データがリクエスト元と Cloud Storage 間を移動するからです。他のほとんどのケース(オブジェクトのコピー、オブジェクトの作成、オブジェクトの削除、メタデータの編集など)では、署名付き URL を作成して使用者に渡す必要はありません。これは不要な手順です。代わりに、署名付き URL を作成するエンティティが直接 Cloud Storage に対して必要なリクエストを行う設計を検討する必要があります。

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

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

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

  • HMAC 認証による署名: Amazon Simple Storage Service(Amazon S3)ユーザーの場合は、既存のワークフローを使用して Cloud Storage の署名付き URL を生成できます。Cloud Storage リソースとホスト storage.googleapis.com を指定してから、署名付き URL を生成するプロセスにおいて Cloud Storage 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-central1%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 分です。有効期間の最大値は 604,800 秒(7 日間)です。

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

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

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

通常、再開可能なアップロード用の署名付き URL を作成する必要はありません。アップロードを開始するリクエストの後、オブジェクト データをアップロードする後続の PUT リクエストでは、認証トークンとして機能するセッション URI が使用されるためです。つまり、PUT リクエストでは署名付き URL は使用されません。

最初の POST リクエストに署名付き URL を作成してアップロードを開始できますが、ほとんどの場合、サーバーが再開可能なアップロードを開始できます。サーバーは、セッション URI をクライアントに送信してアップロードを実行します。これにより、サーバーが署名付き URL を作成する複雑さや、クライアントが署名付き URL を処理して再開可能なアップロードを開始する複雑さが回避されます。

署名付き URL と同様に、セッション URI は、保持する人なら誰でもデータのアップロードに使用できます。セッション URI をクライアントに渡すときは、必ず HTTPS 経由で転送してください。

署名付き URL の考慮事項

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

  • 署名付き URL は、XML API エンドポイントを介して Cloud Storage リソースにアクセスする場合にのみ使用できます。

  • 一般的には、あらゆる種類の XML API リクエストに対して、署名付き URL を作成できます。ただし、以下の 2 つの例外があります。

    • V4 署名を使用する署名付き URL は、本文がチャンクされたエンコードを使用するリクエストでは使用できません。

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

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

  • 署名付き URL を使用するリクエストでは、必ず認証ヘッダーを省略してください。どちらも使用すると、Cloud Storage は署名付き URL ではなく、ヘッダーで提供された認証情報で認証を行います。この場合、想定よりもリソースへのアクセスが増える可能性があります。

正規リクエスト

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

認証情報スコープ

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

次のステップ