V4 署名は、Cloud Storage の XML API リクエストで認証用の署名を生成するためのプロセスです。このページでは、Google Cloud CLI と Cloud Storage のクライアント ライブラリを使用して、サービス アカウントの認証情報を使用して署名付き URL を作成する方法について説明します。署名付き URL は、Cloud Storage の特定のリソースに対する期限付きの読み取りまたは書き込みアクセスを提供します。署名付き URL を作成する独自のプログラムを作成する場合は、独自のプログラムを使用した V4 署名をご覧ください。
始める前に
このページのタスクを実施する前に、次の手順を完了しておいてください。
Enable the Service Account Credentials API.
サービス アカウントを作成する。URL の署名に使用するサービス アカウントがすでにある場合は、この手順をスキップできます。
署名付き URL によるリクエストを実行するのに十分な権限をサービス アカウントに付与する。たとえば、署名付き URL でユーザーがオブジェクト データを読み取ることができるようにする場合、サービス アカウントにはオブジェクト データを読み取る権限が必要です。
このガイドで説明するタスクを行うには、サービス アカウントに次のいずれかの IAM ロールを付与するよう管理者に依頼してください。
Storage オブジェクト ユーザー(
roles/storage.objectUser
): オブジェクトのアップロードとダウンロードの両方を行うための署名付き URL を作成するには、このロールを使用します。このロールは、署名付き URL によって既存のオブジェクトが上書きされる場合にも必要です。Storage オブジェクト閲覧者(
roles/storage.objectViewer
): オブジェクトをダウンロードするための署名付き URL の作成のみをする場合は、このロールを使用します。Storage オブジェクト作成者(
roles/storage.objectCreator
): オブジェクトをアップロードするための署名付き URL の作成のみをし、アップロードされたオブジェクトがバケット内の既存のオブジェクトを上書きしない場合は、このロールを使用します。
これらの事前定義ロールには、オブジェクトをダウンロードしてアップロードする署名付き URL の作成に必要な権限が含まれています。具体的に必要な権限については、「必要な権限」のセクションを開いてご確認ください。
必要な権限
storage.objects.get
(オブジェクトのアップロードのみを行う場合は不要)storage.objects.create
(オブジェクトのダウンロードのみを行う場合は不要)storage.objects.delete
(アップロード時にオブジェクトを上書きする必要がない場合は不要)
これらの権限は、カスタムロールや他の事前定義ロールを使って取得できる場合もあります。どのロールがどの権限に関連付けられているかを確認するには、Cloud Storage に適用される IAM のロールをご覧ください。
サービス アカウントで blob に署名するための十分な権限がある。サービス アカウント トークン作成者ロール(
roles/iam.serviceAccountTokenCreator
)を付与するよう管理者に依頼します。ユーザー認証情報を使って認証する場合は、このロールが割り当てられているプリンシパルである必要があります。また、署名付き URL の作成に使用されるサービス アカウントにこのロールが付与されている必要があります。
コンピューティング インスタンスに接続されたサービス アカウントを使って認証する場合は、サービス アカウントが自身の権限を借用するため、このロールのプリンシパルである必要があります。また、このロールは、サービス アカウントを含むプロジェクトに付与する必要があります。
この事前定義ロールには、サービス アカウントで blob に署名するために必要な権限が含まれています。具体的に必要な権限については、「必要な権限」のセクションを開いてご確認ください。
必要な権限
iam.serviceAccounts.signBlob
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。 どのロールがどの権限に関連付けられているかを確認するには、Cloud Storage に適用される IAM のロールをご覧ください。
プロジェクトにロールを付与する手順については、プロジェクトへのアクセス権を管理するをご覧ください。
署名付き URL を作成してオブジェクトをダウンロードする
バケットからオブジェクトを取得できる署名付き URL を作成するには、次の操作を行います。
コマンドライン
gcloud storage sign-url
コマンドを使用します。たとえば、次のコマンドは、オブジェクトを 10 分間ダウンロードできる署名付き URL を作成します。gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m
ここで
BUCKET_NAME
は、オブジェクトが配置されているバケットの名前です。例:example-bucket
OBJECT_NAME
は、ダウンロードするオブジェクトの名前です。例:cat.jpeg
SERVICE_ACCOUNT_EMAIL
は、署名を行う鍵を持つサービス アカウントのメールアドレスです。例:signed-url-account@my-project.iam.gserviceaccount.com
成功すると、レスポンスは次のようになります。
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.googleapis.com/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-account%40 my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog 4_request&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-si gnedheaders=host
この URL を使用すると、設定した時間内(この場合は 10 分)、関連付けられたリソース(この場合は
cat.jpeg
)に誰でもアクセスできます。
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
署名付き URL を作成してオブジェクトをアップロードする
バケットにオブジェクトをアップロードできる署名付き URL を作成するには、次の操作を行います。
コマンドライン
gcloud storage sign-url
コマンドを使用します。たとえば、次のコマンドは、ユーザーが 1 時間ファイルをアップロードできる署名付き URL を作成します。gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --http-verb=PUT --duration=1h --headers=content-type=CONTENT_TYPE
BUCKET_NAME
は、オブジェクトがアップロードされるバケットの名前です。例:example-bucket
OBJECT_NAME
は、アップロードされたオブジェクトに割り当てる名前です。例:cat.png
SERVICE_ACCOUNT_EMAIL
は、署名を行う鍵を持つサービス アカウントのメールアドレスです。例:signed-url-account@my-project.iam.gserviceaccount.com
CONTENT_TYPE
は、アップロードされるオブジェクトのコンテンツ タイプです。例:image/png
成功すると、レスポンスは次のようになります。
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.googleapis.com/example-bucket/cat.png? x-goog-signature=2f670a686102963e0574f3c1a3b4d29ee4aa406c1528d42d2 30195d17fef73834b254314de7d7990afd48538a84b66f20010e7ecd90a900490e 6119b7e56a912f71c8d64285c40e86f31b8fec51cf8c7a61ded81de3cedac9c1ca b92474b7371740fdac20b2d8d092b15396f79443bbde954a4174ed11aef6c2cf5f a4d72a84ff60fd6003ed0a505b0e40b6207ddbaec2a15778f715c3ec7537a1b14f b6661b2abaa5736f1670a412ca7e2555c830591f0595c01ff95af7f2206abe2e27 41948c16d4bd4c7cbb25f41277ece59236c06e00ca6c63ae2eb3efc22c216bb24c e1b8b3801d07fd3a7ed3f2df3db6e59c6fc3cc76a002335dd936efd0237cf584e3 6&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-a ccount%40my-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstor age%2Fgoog4_request&x-goog-date=20230714T223547Z&x-goog-expires=36 00&x-goog-signedheaders=content-type%3Bhost
この URL を使用すると、指定した時間で(この場合は 1 時間)誰でもリソース(この場合は
cat.png
)を特定の Cloud Storage バケットにアップロードできます。
クライアント ライブラリ
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、クライアント ライブラリの認証情報を設定するをご覧ください。
次のステップ
- 独自のプログラムで URL に署名する方法を確認する。
- 署名付き URL の詳細を確認する。
- XML API を使用したオブジェクトのアップロードについて確認する。
- オブジェクトのアップロードについて確認する。