V4 署名は、Cloud Storage の XML API リクエストで認証用の署名を生成するためのプロセスです。このページでは、Google Cloud CLI と Cloud Storage のクライアント ライブラリを使用して、サービス アカウントの認証情報を使用して署名付き URL を作成する方法について説明します。署名付き URL は、Cloud Storage の特定のリソースに対する期限付きの読み取りまたは書き込みアクセスを提供します。署名付き URL を作成する独自のプログラムを作成する場合は、独自のプログラムを使用した V4 署名をご覧ください。
必要なロール
オブジェクトのダウンロードとアップロードを行うための署名付き URL の作成に必要な権限を取得するには、次のロールを付与するよう管理者に依頼してください。
Storage オブジェクト ユーザー(
roles/storage.objectUser
): オブジェクトのダウンロード、アップロード、上書きには、このロールが必要です。このロールは、URL の署名に使用する鍵を持つサービス アカウントに付与する必要があります。オブジェクトのダウンロードのみを行う場合は、ストレージ オブジェクト ユーザーロールの代わりにストレージ オブジェクト閲覧者(
roles/storage.objectViewer
)ロールをサービス アカウントに付与するよう管理者に依頼してください。オブジェクトのアップロードのみを行う場合(上書きせずにアップロードする場合)は、ストレージ オブジェクト ユーザーロールの代わりにストレージ オブジェクト作成者(
roles/storage.objectCreator
)ロールをサービス アカウントに付与するよう管理者に依頼してください。
サービス アカウント トークン作成者(
roles/iam.serviceAccountTokenCreator
): 秘密鍵ファイルがローカルに提供されていない場合に、サービス アカウントに有効期間の短い認証情報を生成するには、このロールが必要です。このロールは、署名付き URL を作成するプリンシパルに付与する必要があります。認証にユーザー認証情報を使用する場合は、ユーザー ID にこのロールが割り当てられている必要があります。また、URL の署名に使用されるサービス アカウントの権限を借用するようにコマンドを変更する必要があります。
認証にコンピューティング インスタンスに接続されたサービス アカウントを使用する場合は、サービス アカウントが自身の権限を借用するため、このロールが必要です。また、URL の署名に使用されるサービス アカウントを権限借用するようにコマンドを変更する必要があります。
認証に秘密鍵ファイルを使用する場合は、このロールは必要ありません。
これらの事前定義ロールには、署名付き URL を使用してオブジェクトをダウンロードおよびアップロードするためにサービス アカウントに必要な権限が含まれています。必要な権限を確認するには、[必要な権限] セクションを開きます。
必要な権限
storage.objects.get
storage.objects.create
(オブジェクトのダウンロードのみを行う場合は不要)storage.objects.delete
(アップロード時にオブジェクトを上書きする必要がない場合は不要)iam.serviceAccounts.signBlob
(署名の作成にローカルでサービス アカウント キーを提供する場合は不要。この場合、signBlob
メソッドを呼び出す必要はありません)
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。どのロールがどの権限に関連付けられているかを確認するには、Cloud Storage に適用される IAM のロールをご覧ください。
プロジェクトにロールを付与する手順については、プロジェクトへのアクセス権を管理するをご覧ください。
署名付き URL を作成してオブジェクトをダウンロードする
バケットからオブジェクトを取得できる署名付き URL を作成するには、次の操作を行います。
コマンドライン
新しい秘密鍵を生成するか、サービス アカウント用の既存の秘密鍵を使用します。鍵は JSON 形式にする必要があります。
秘密鍵とサービス アカウントについて詳しくは、サービス アカウントをご覧ください。
gcloud storage sign-url
コマンドを使用します。たとえば、次のコマンドは、オブジェクトを 10 分間ダウンロードできる署名付き URL を作成します。gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --duration=10m
ここで
BUCKET_NAME
は、オブジェクトが配置されているバケットの名前です。例:example-bucket
OBJECT_NAME
は、ダウンロードするオブジェクトの名前です。例:cat.jpeg
KEY_FILE
は、サービス アカウントの秘密鍵を含むファイルのパスです。例:Desktop/private-key.json
成功すると、レスポンスは次のようになります。
--- 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=example%40example-pro ject.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog4_requ est&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-signedhe aders=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 を作成するには、次の操作を行います。
コマンドライン
新しい秘密鍵を生成するか、サービス アカウント用の既存の秘密鍵を使用します。鍵は、JSON 形式か PKCS12 形式のものを使用できます。
秘密鍵とサービス アカウントについて詳しくは、サービス アカウントをご覧ください。
gcloud storage sign-url
コマンドを使用します。たとえば、次のコマンドは、ユーザーが 1 時間ファイルをアップロードできる署名付き URL を作成します。gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --http-verb=PUT --duration=1h --headers=Content-Type=CONTENT_TYPE
BUCKET_NAME
は、オブジェクトがアップロードされるバケットの名前です。例:example-bucket
OBJECT_NAME
は、アップロードされたオブジェクトに割り当てる名前です。例:cat.png
KEY_FILE
は、サービス アカウントの秘密鍵を含むファイルのパスです。例:Desktop/private-key.json
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=example%40ex ample-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2F goog4_request&x-goog-date=20230714T223547Z&x-goog-expires=3600&x-g oog-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 を使用したオブジェクトのアップロードについて確認する。
- オブジェクトのアップロードについて確認する。