Storage Transfer Service は、Google 管理のサービス アカウント(サービス エージェント)を使用して、データを Cloud Storage バケットから移動します。このサービス エージェントは、初めて googleServiceAccounts.get
を呼び出すときに作成されます。
ソースバケットは、サービス エージェントと同じプロジェクトに属している必要はありません。バケットがどのプロジェクトにあっても手順は同じです。
ユーザー権限
サービス エージェントに必要な権限を付与するには、ソースバケットに関連する権限が必要です。
storage.buckets.getIamPolicy
storage.buckets.setIamPolicy
必要な権限は、ストレージのレガシー バケット オーナーロール(roles/storage.legacyBucketOwner
)またはストレージ管理者ロール(roles/storage.admin
)に含まれています。
Google Cloud コンソールでの権限の自動付与
Google Cloud コンソールを使用して転送を作成し、ユーザー権限に記載されている権限がある場合、サービス エージェントには、ソースバケットに必要な権限が自動的に付与されます。
その場合は、このページの手順をスキップして転送の作成に進んでください。
必要な権限
サービス エージェントには、ソースバケットに対する次の権限が必要です。
権限 | 説明 |
---|---|
storage.buckets.get |
サービス エージェントにバケット ロケーションの取得を許可します。 |
storage.objects.list |
サービス エージェントにバケット内のオブジェクトの一覧表示を許可します。 |
storage.objects.get |
サービス エージェントにバケット内のオブジェクトの読み取りを許可します。 |
storage.objects.create |
サービス エージェントにバケット内のオブジェクトの作成を許可します。ファイル システムに転送される場合は必須です。 Storage Transfer Service は、ソースバケット内に 2 つのフォルダを作成してデータを挿入します。 |
storage.objects.delete |
サービス エージェントにバケット内のオブジェクトの削除を許可します。deleteObjectsFromSourceAfterTransfer を true に設定する場合は必須です。 |
次の事前定義ロールを使用すると、必要な権限を付与できます。
- 次のいずれか:
- Storage オブジェクト閲覧者(
roles/storage.objectViewer
)。別の Cloud Storage バケットに転送される場合。 - Storage オブジェクト作成者(
roles/storage.objectCreator
): ファイル システムに転送される場合。
- Storage オブジェクト閲覧者(
- さらに、次のいずれか:
- ストレージのレガシー バケット書き込み(
roles/storage.legacyBucketWriter
): オブジェクト削除権限が必要な場合。 - Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader
): オブジェクト削除権限が必要ない場合。
- ストレージのレガシー バケット書き込み(
legacy
ロールとしてマークされた Cloud Storage のロールは、バケットレベルでのみ付与できます。
Cloud Storage のロールと権限の一覧については、IAM ロールをご覧ください。
オブジェクトの ACL で ACL_PRESERVE が設定されている場合、ソース オブジェクトには Storage レガシー オブジェクト オーナーのロール(roles/storage.legacyObjectOwner
)も必要です。ACL_PRESERVE の場合は、サービス アカウントに手動で Storage レガシー オブジェクト オーナーのロールを追加し、ソース オブジェクトの権限 storage.objects.getIamPolicy
を付与します。
必要な権限を付与する
サービス エージェントに必要な権限を付与するには、次の手順を行います。
サービス エージェントのメールアドレスを確認する
googleServiceAccounts.get
リファレンス ページに移動します。[Try this method] というインタラクティブ パネルが開きます。
パネルの [Request parameters] にプロジェクト ID を入力します。ここで指定するプロジェクトは Storage Transfer Service の管理に使用しているプロジェクトで、これは、ソースバケットのプロジェクトとは異なる場合があります。
[実行] をクリックします。
サービス エージェントのメールアドレスが
accountEmail
の値として返されます。この値をコピーします。サービス エージェントのメールアドレスは
project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
の形式です。
バケットレベルのポリシーにサービス エージェントを追加する
Console
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
プリンシパルにロールを付与するバケットと関連付けられている [バケット オーバーフロー] メニュー(
)をクリックします。[アクセス権を編集] を選択します。
[+ プリンシパルを追加] ボタンをクリックします。
[新しいプリンシパル] フィールドに、サービス エージェント アカウントのメールアドレスを入力します。
[ロールの選択] プルダウン メニューから
Storage Object Viewer
またはStorage Object Creator
を選択します。[別のロールを追加] をクリックします。
Storage Legacy Bucket Writer
またはStorage Legacy Bucket Reader
を選択します。[保存] をクリックします。
gcloud
gcloud storage buckets add-iam-policy-binding
コマンドを使用します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:YOUR_AGENT_EMAIL --role=roles/storage.legacyBucketReader
ここで
BUCKET_NAME
は、プリンシパルのアクセス権を付与するバケットの名前です。例:my-bucket
YOUR_AGENT_EMAIL
は、サービス エージェントのメールアドレスを確認するでコピーしたエージェント アカウントのメールアドレスです。
コードサンプル
C++
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
C#
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Go
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Java
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Node.js
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
PHP
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Python
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
Ruby
Cloud Storage 用のクライアント ライブラリをインストールして使用する方法については、Cloud Storage のクライアント ライブラリをご覧ください。 詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Cloud Storage に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証の設定をご覧ください。
JSON
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。次の情報が含まれる JSON ファイルを作成します。
{ "bindings":[ { "role": "roles/storage.objectViewer", "members":[ "YOUR_AGENT_EMAIL" ] }, { "role": "roles/storage.legacyBucketReader", "members":[ "YOUR_AGENT_EMAIL" ] } ] }
ここで
YOUR_AGENT_EMAIL
は、サービス エージェントのメールアドレスを確認するでコピーしたエージェント アカウントのメールアドレスです。
cURL
を使用して、PUT setIamPolicy
リクエストで JSON API を呼び出します。curl -X PUT --data-binary @JSON_FILE_NAME \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/iam"
ここで
JSON_FILE_NAME
は、手順 2 で作成したファイルのパスです。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、プリンシパルのアクセス権を付与するバケットの名前です。例:my-bucket
。