Traffine I/O

日本語

2022-07-08

GCSにおける署名付きURL

Google Cloud Storageにおける署名付きURL

Google Cloud Storage(GCS)では、署名付きURLを使用することで、特定のバケット内に格納されたオブジェクトへの一時的なアクセスを許可することができます。この機能は、直接的なGCSへのアクセス権を持たないユーザーとオブジェクトを共有する必要がある場合に特に役立ちます。

署名付きURLは、対象のオブジェクトにアクセスするための適切な権限を持つユーザーの資格情報を使用して生成されます。URLが生成されると、それを任意のユーザーと共有することができます。このURLが使用されると、GCSはリクエストを、元々URLを生成したユーザーによって行われたものとして解釈します。

GCSにおける署名付きURLの真の強みは、その柔軟性と制御性にあります。これらのURLは、READ(GET)、WRITE(PUT)、DELETEなど、特定の操作を許可するように設定することができます。さらに、これらのURLは一時的であり、設定された有効期限が過ぎると使用できなくなります。

署名付きURLを使用する際に注意する重要なポイントは、オブジェクトのセキュリティとアクセス制御リスト(ACL)がチェックされないことです。これは、URL自体がユーザーが認証され、オブジェクトにアクセスするための権限を持っていることを証明しているためです。

GCSにおける署名付きURLの使用例

GCSにおける署名付きURLは多目的であり、さまざまなシナリオで使用することができます。以下にいくつかの一般的な使用例を示します。

  • GCPアカウントを持たないユーザーとのプライベートなオブジェクトの共有
    GCSにデータやファイルがあり、それを他の人と共有したいが、相手はGoogle Cloud Platform(GCP)アカウントを持っていない場合、データを公開するか、相手にGCPアカウントの作成を要求する代わりに、簡単に署名付きURLを作成して共有することができます。

  • オブジェクトへの一時的なアクセスの許可
    自分のGCSバケット内のオブジェクトへの一時的なアクセスを許可する必要がある場合、署名付きURLは完璧な解決策です。URLの有効期限を指定することができ、期限が過ぎるとURLは使用できなくなります。

  • Webやモバイルアプリケーションへの大容量ファイルのアップロードやダウンロード
    署名付きURLは、WebやモバイルアプリケーションでGCSに直接大容量ファイルのアップロードやダウンロードを行うために使用することができます。これにより、ファイル転送の負荷をアプリケーションサーバーから外すことができ、ファイルをサーバーにアップロードする前にGCSに転送するまでユーザーが待つ必要がなくなります。

  • 異なる地理的な場所にユーザーにコンテンツを配信
    アプリケーションが異なる地理的な場所のユーザーにコンテンツを配信する必要がある場合、署名付きURLを使用してユーザーがGCSからコンテンツを直接ダウンロードできるようにすることができます。これにより、GCSのグローバルネットワークによる高速なダウンロード速度が提供されます。

GCSでの署名付きURLの生成

GCSで署名付きURLを生成するには、いくつかの手順が必要であり、GCSバケットとオブジェクトに適切な権限を持っている必要があります。

署名付きURLを生成する前に、適切な権限を持っていることを確認する必要があります。通常、roles/storage.objectAdminまたはroles/storage.objectViewerのIdentity and Access Management(IAM)ロールを持っていることを意味します。これらの権限がない場合は、バケットの所有者またはプロジェクトの所有者に権限を付与してもらう必要があります。

また、必要な権限を持つサービスアカウントが必要であり、そのサービスアカウント用の秘密キーのJSONファイルをダウンロードする必要があります。このファイルは、署名付きURLの生成に使用されます。

必要な権限とサービスアカウントのキーファイルを取得したら、署名付きURLを生成することができます。これは、gsutil signurlコマンドを使用するか、Python、Node.js、Javaなどのプログラミング言語でGCSクライアントライブラリを使用して行うことができます。

以下は、gsutilを使用した例です。

bash
$ gsutil signurl -d 10m /path/to/service-account-key.json gs://your-bucket/your-object

このコマンドは、指定されたオブジェクト(gs://your-bucket/your-object)に対して有効期間が10分(-d 10m)の署名付きURLを生成します。-dオプションはURLの有効期間を指定します。

署名付きURLを生成した後は、ユーザーに渡すか、アプリケーションで使用することができます。ユーザーが署名付きURLを受け取った場合、それを使用してファイルを直接GCSバケットにダウンロードまたはアップロードすることができます。

URLにはバケットとオブジェクト名、署名エンティティのアクセスID、およびリクエストを認証する署名が含まれています。重要な点として、URLは指定された時間の間、指定された操作(GET、PUTなど)に対してのみ機能します。

以下は、ユーザーが署名付きURLを使用してファイルをダウンロードする例です。

bash
$ curl 'https://storage.googleapis.com/your-bucket/your-object?GoogleAccessId=your-service-account-email&Expires=expiration-timestamp&Signature=signature'

このコマンドでは、curlを使用してGETリクエストを署名付きURLに送信します。レスポンスは指定されたオブジェクトの内容です。

同様に、ユーザーは署名付きURLを使用してPUTリクエストでファイルをアップロードすることもできます。

bash
$ curl -X PUT -H 'Content-Type: your-content-type' -d @/path/to/your-file 'presigned-url'

このコマンドでは、-X PUTはPUTリクエストを指定し、-H 'Content-Type: your-content-type'はアップロードするファイルのコンテンツタイプを指定し、-d @/path/to/your-fileはアップロードするファイルを指定します。presigned-urlは先ほど生成した署名付きURLです。

参考

https://cloud.google.com/storage/docs/access-control/signed-urls

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!