Storage Transfer Service は、次の 2 つの転送タイプで Cloud Storage ソースバケットを使用できます。
エージェントレス転送: Cloud Storage から Cloud Storage、Cloud Storage から AWS S3、Cloud Storage から Azure Blob Storage などのクラウド間転送。権限は Storage Transfer Service サービス エージェントに付与されます。
エージェント駆動型の転送: 転送エージェントとエージェント プールを使用するファイル システムまたはオンプレミス ストレージに関連する転送。権限は、サービス エージェントと転送エージェント アカウントの両方に付与する必要があります。
Google Cloud コンソールでの権限の自動付与
Google Cloud コンソールを使用してエージェントレス転送を作成し、必要なユーザー権限がある場合、サービス エージェントには、ソースバケットに必要な権限が自動的に付与されます。
このページの手順はスキップできます。必要に応じて、宛先へのアクセスを構成してから、転送を作成します。
前提条件
ユーザー アカウントの権限: このページに記載されている必要な IAM ロールを付与するには、ユーザー アカウント(またはユーザー管理のサービス アカウント)に、ソースバケットとエージェント プール プロジェクトの IAM ポリシーを変更する権限が必要です。ユーザー アカウントの要件の詳細については、ユーザー アカウントの権限をご覧ください。
エージェントベースの転送プロジェクトの権限: エージェントベースの転送の場合は、サービス エージェントと転送エージェント アカウントに必要なプロジェクト レベルのロールが構成されていることを確認します。エージェント ベースのプロジェクト レベルの権限をご覧ください。
サービス エージェントのメールアドレスを確認する
サービス エージェントは、転送ジョブを初めて作成するとき、gcloud transfer 設定コマンドを実行するとき、Google Cloud コンソールの [Storage Transfer] ページにアクセスするとき、または googleServiceAccounts.get を呼び出すときに自動的に作成されます。
Storage Transfer Service コマンドでサービス エージェントを識別するために使用されるサービス エージェントのメールアドレスを取得するには:
googleServiceAccounts.getリファレンス ページに移動します。[Try this method] というインタラクティブ パネルが開きます。- パネルの [Request parameters] にプロジェクト ID を入力します。
- [実行] をクリックします。
accountEmail の値をコピーします。project-PROJECT_NUMBER@storage-transfer-service. の形式を使用します。
必要な権限を付与する
転送タイプを選択して、アクセス権を付与する手順を確認します。
エージェントレス転送
次の事前定義ロールは、ソースバケットに必要な権限をサービス エージェントに付与します。
- Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader) - さらに、次のいずれか:
- Storage オブジェクト閲覧者(
roles/storage.objectViewer)。ソース オブジェクトが保持される場合。 - Storage オブジェクト ユーザー(
roles/storage.objectUser)。転送後にソース オブジェクトを削除する場合(deleteObjectsFromSourceAfterTransfer)。 - ストレージ オブジェクト管理者(
roles/storage.objectAdmin): オブジェクト ACL(ACL_PRESERVE)を保持する場合。転送後のソース オブジェクトの削除もサポートします。
- Storage オブジェクト閲覧者(
サービス エージェントをソースバケットの IAM ポリシーに追加します。
コンソール
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
- ソースバケットの [バケット オーバーフロー] メニュー()をクリックします。
- [アクセス権を編集] を選択します。
- [+ プリンシパルを追加] をクリックします。
- [新しいプリンシパル] に、サービス エージェントのメールアドレスを入力します。
- [ロールの選択] プルダウン メニューから
Storage Legacy Bucket Readerを選択します。 - [別のロールを追加] をクリックし、次のいずれかを選択します。
Storage Object ViewerStorage Object UserStorage Object Admin
- [保存] をクリックします。
gcloud
次の gcloud storage コマンドを実行します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
次のように置き換えます。
- BUCKET_NAME: ソースバケットの名前。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- OBJECT_ROLE: 転送オプションに応じて、次のいずれかを選択します。
objectViewer: ソース オブジェクトを保持する場合。objectUser: 転送後にソース オブジェクトを削除する場合。objectAdmin: オブジェクト ACL を保持する場合。転送後のソース オブジェクトの削除もサポートしています。
REST API
リクエストを認証するためのアクセス トークンを生成します。
gcloudCLI を使用している場合は、次のコマンドを実行します。gcloud auth print-access-token
既存のバケット IAM ポリシー(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)を取得し、次のバインディングをbindings配列に追加して、統合されたポリシーをsource_policy.jsonとして保存します。{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
次のように置き換えます。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- OBJECT_ROLE: ソース オブジェクトを保持する場合は
objectViewer、ソース オブジェクトを削除する場合はobjectUser、オブジェクト ACL を保持する場合はobjectAdminを選択します。
curlを使用してPUTリクエストを送信します。curl -X PUT --data-binary @source_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"
次のように置き換えます。
- OAUTH2_TOKEN: ステップ 1 で生成された OAuth 2.0 アクセス トークン。
- BUCKET_NAME: ソースバケットの名前。
エージェント主導の転送
次の事前定義ロールは、サービス エージェントにソースバケットに対する必要なアクセス権を付与します。
- Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader) - Storage オブジェクト作成者(
roles/storage.objectCreator)
次のロールは、転送エージェント アカウントに転送元バケットに対する必要なアクセス権を付与します。
- ソース オブジェクトを保持する場合はStorage オブジェクト閲覧者(
roles/storage.objectViewer)、転送後にソース オブジェクトを削除する場合はStorage オブジェクト ユーザー(roles/storage.objectUser)。
これらのロールをソースバケットに付与します。
コンソール
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
- ソースバケットのバケット オーバーフロー メニュー()をクリックし、[編集権限] を選択します。
- [+ プリンシパルを追加] をクリックします。
- [新しいプリンシパル] に、サービス エージェントのメールアドレスを入力します。
- [ロールの選択] プルダウン メニューから
Storage Legacy Bucket ReaderとStorage Object Creatorを選択します。 - もう一度 [+ プリンシパルを追加] をクリックします。
- 転送エージェント アカウントのメールアドレスを入力します。これは、転送エージェントのインストール時に使用されるユーザー アカウントまたはサービス アカウントです。たとえば、
my-agent-sa@PROJECT_ID.やuser@example.comです。 - 転送元オブジェクトを保持する場合は
Storage Object Viewerを選択し、転送後に転送元オブジェクトを削除する場合はStorage Object Userを選択します。 - [保存] をクリックします。
gcloud
サービス エージェントに、バケット メタデータの読み取りロールと転送ログの書き込みロールを付与します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReadergcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator転送エージェント アカウントにオブジェクト アクセスロールを付与します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.OBJECT_ROLE次のように置き換えます。
- BUCKET_NAME: ソースバケットの名前。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- serviceAccount_OR_user: 転送エージェント アカウントがサービス アカウントの場合は
serviceAccountを指定します。エージェントがユーザー アカウントでインストールされている場合はuserを指定します。 - TRANSFER_AGENT_ACCOUNT: 転送エージェントをインストールしたアカウントのメールアドレス。例:
my-agent-sa@PROJECT_ID.、user@example.com - OBJECT_ROLE: ソース オブジェクトを保持する場合は
objectViewerを指定し、転送後にソース オブジェクトを削除する場合はobjectUserを指定します。
REST API
リクエストを認証するためのアクセス トークンを生成します。
gcloudCLI を使用している場合は、次のコマンドを実行します。gcloud auth print-access-token
既存のバケット IAM ポリシー(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)を取得し、次のバインディングをbindings配列に追加して、統合されたポリシーをagent_source_policy.jsonとして保存します。{ "bindings": [ { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT"] } ] }
次のように置き換えます。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- serviceAccount_OR_user: 転送エージェント アカウントがサービス アカウントの場合は
serviceAccountを指定します。エージェントがユーザー アカウントでインストールされている場合はuserを指定します。 - TRANSFER_AGENT_ACCOUNT: 転送エージェントをインストールしたアカウントのメールアドレス。例:
my-agent-sa@PROJECT_ID.、user@example.com - OBJECT_ROLE: ソース オブジェクトを保持する場合は
objectViewerを指定し、転送後にソース オブジェクトを削除する場合はobjectUserを指定します。
curlを使用してバケット ポリシーを更新します。curl -X PUT --data-binary @agent_source_policy.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage./storage/v1/b/BUCKET_NAME/iam"次のように置き換えます。
- OAUTH2_TOKEN: ステップ 1 で生成された OAuth 2.0 アクセス トークン。
- BUCKET_NAME: ソースバケットの名前。
プロジェクト間の Cloud Storage 転送
異なる Google Cloud プロジェクトの Cloud Storage バケット間でオブジェクトを転送するには、転送元バケットと転送先バケットの両方で、転送を作成するプロジェクトのサービス エージェントに権限を付与する必要があります。
転送を作成するユーザー アカウントまたはユーザー管理のサービス アカウントには、転送ジョブが作成されるプロジェクトに対する権限のみが必要です。
プロジェクト間の転送にロールを付与するには:
- 転送を実行するプロジェクトのサービス エージェントのメールアドレスを取得します。サービス エージェントのメールアドレスを確認するをご覧ください。
- 転送元バケットで、そのサービス エージェントに次のロールを付与します。
- Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader) - さらに、次のいずれかのオブジェクト ロール:
- Storage オブジェクト閲覧者(
roles/storage.objectViewer)。ソース オブジェクトを保持する場合。 - Storage オブジェクト ユーザー(
roles/storage.objectUser)。転送後にソース オブジェクトを削除する場合(deleteObjectsFromSourceAfterTransfer)。 - ストレージ オブジェクト管理者(
roles/storage.objectAdmin): オブジェクト ACL(ACL_PRESERVE)を保持する場合。転送後のソース オブジェクトの削除もサポートします。
- Storage オブジェクト閲覧者(
- Storage レガシー バケット読み取り(
- 転送先バケットで、同じサービス エージェントに次のロールを付与します。
- Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader) - Storage オブジェクト ユーザー(
roles/storage.objectUser)。オブジェクト ACL(ACL_PRESERVE)を保持する場合は Storage オブジェクト管理者(roles/storage.objectAdmin)。
- Storage レガシー バケット読み取り(
宛先バケットへのアクセス権を付与する手順ガイドについては、シンクへのアクセスを構成する: Cloud Storage をご覧ください。
組織内アクセス制限
組織に組織のポリシーの制約が適用されている場合は、プロジェクト間のサービス エージェント アクセスが許可されていることを確認します。
- ドメイン制限付き共有(
constraints/iam.allowedPolicyMemberDomains): バケットをホストするプロジェクトのポリシーで、サービス エージェントを含むメンバー ドメインを許可する必要があります。ドメインの制限をご覧ください。 - プロジェクト間サービス アカウントの使用の無効化(
constraints/iam.disableCrossProjectServiceAccountUsage): この制約によってプロジェクト間サービス アカウントへのアクセスがブロックされないようにします。サービス アカウントの制限をご覧ください。 - VPC Service Controls: バケットが異なるサービス境界に属している場合は、転送通信を許可する上り(内向き)ルールと下り(外向き)ルールを構成します。クラウド オブジェクト ストレージ転送用に VPC Service Controls を構成するをご覧ください。
きめ細かい権限のリファレンス
転送タイプを選択して、必要なロールと権限を確認します。
エージェントレス転送
エージェントレス転送の場合、Storage Transfer Service サービス エージェントに権限を付与する必要があります。
| 権限 | 説明 |
|---|---|
storage.buckets.get |
サービス エージェントにバケット ロケーションの取得を許可します。 |
storage.objects.list |
サービス エージェントにバケット内のオブジェクトの一覧表示を許可します。 |
storage.objects.get |
サービス エージェントにバケット内のオブジェクトの読み取りを許可します。 |
storage.objects.delete |
サービス エージェントにバケット内のオブジェクトの削除を許可します。deleteObjectsFromSourceAfterTransfer が true の場合は必須です。 |
storage.objects.getIamPolicy |
ソース オブジェクトの ACL の読み取りを許可します。オブジェクト ACL の保持(ACL_PRESERVE)が有効になっている場合は必須。 |
storage.folders.liststorage.folders.get |
フォルダの一覧表示と読み取りを許可します。階層型名前空間が有効になっているバケットから転送する場合に必要です。 |
エージェント主導の転送
Cloud Storage ソースからのエージェント ドリブン転送の場合、権限は次の 2 つのプリンシパルに分割されます。
サービス エージェント: バケットのメタデータとロケーションを解決するためのバケットレベルの読み取りアクセス権と、エージェント転送ログを書き込むためのオブジェクト作成アクセス権が必要です。
転送エージェント アカウント: 転送エージェントの作成に使用されるサービス アカウントまたはユーザー アカウント。
サービス エージェントの権限
| 権限 | 説明 |
|---|---|
storage.buckets.get |
サービス エージェントにバケットのメタデータとロケーションの検査を許可します。 |
storage.objects.create |
Cloud Storage からファイル システムに転送するときに、サービス エージェントがエージェント転送ログをソースバケットに書き込めるようにします。 |
転送エージェント アカウントの権限
| 権限 | 説明 |
|---|---|
storage.objects.list |
エージェントがソースバケット内のオブジェクトを一覧表示できるようにします。 |
storage.objects.get |
エージェントがソースバケットからオブジェクトを読み取れるようにします。 |
storage.objects.delete |
deleteObjectsFromSourceAfterTransfer が有効になっている場合、エージェントがソース オブジェクトを削除できるようにします。 |
storage.folders.liststorage.folders.get |
階層型名前空間が有効になっているバケットから転送するときに、エージェントがフォルダを一覧表示して読み取れるようにします。 |
次のステップ
宛先へのアクセスを構成する必要があります。