Storage Transfer Service は、次の 2 種類の転送で Cloud Storage の宛先(シンク)バケットを使用できます。
エージェントレス転送: AWS S3、Azure Blob Storage、Cloud Storage から Cloud Storage への転送などのクラウド間転送。権限は Storage Transfer Service サービス エージェントに付与されます。
エージェント駆動型の転送: 転送エージェントとエージェント プールを使用して、ファイル システム、HDFS、S3 互換ストレージから Cloud Storage に転送します。サービス エージェントと転送エージェント アカウントの両方に権限を付与する必要があります。
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.objectUser)。オブジェクト ACL(ACL_PRESERVE)を保持する場合は Storage オブジェクト管理者(roles/storage.objectAdmin)。
宛先バケットの IAM ポリシーにサービス エージェントを追加します。
コンソール
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
- 宛先バケットの [バケット オーバーフロー] メニュー()をクリックします。
- [アクセス権を編集] を選択します。
- [+ プリンシパルを追加] をクリックします。
- [新しいプリンシパル] に、サービス エージェントのメールアドレスを入力します。
- [ロールの選択] プルダウン メニューから
Storage Legacy Bucket Readerを選択します。 - [別のロールを追加] をクリックし、
Storage Object Userを選択します。オブジェクト ACL を保持する場合は、Storage Object Adminを選択します。 - [保存] をクリックします。
gcloud
次の gcloud storage コマンドを実行します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.OBJECT_ROLE
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
次のように置き換えます。
- BUCKET_NAME: 宛先バケットの名前。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- OBJECT_ROLE: デフォルトでは
objectUserを指定します。オブジェクト ACL(ACL_PRESERVE)を保持する場合はobjectAdminを指定します。
REST API
リクエストを認証するためのアクセス トークンを生成します。
gcloudCLI を使用している場合は、次のコマンドを実行します。gcloud auth print-access-token
既存のバケット IAM ポリシー(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)を取得し、次のバインディングをbindings配列に追加して、統合されたポリシーをsink_policy.jsonとして保存します。{ "bindings": [ { "role": "roles/storage.OBJECT_ROLE", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] } ] }
次のように置き換えます。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- OBJECT_ROLE: デフォルトでは
objectUserを指定します。オブジェクト ACL(ACL_PRESERVE)を保持する場合はobjectAdminを指定します。
curlを使用してPUTリクエストを送信します。curl -X PUT --data-binary @sink_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.objectCreator) - Storage オブジェクト閲覧者(
roles/storage.objectViewer) - Storage レガシー バケット読み取り(
roles/storage.legacyBucketReader)
次のロールは、転送エージェント アカウントに宛先バケットに対する必要なアクセス権を付与します。
- Storage オブジェクト ユーザー(
roles/storage.objectUser)
宛先バケットにこれらのロールを付与します。
コンソール
- Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。
- 宛先バケットのバケット オーバーフロー メニュー()をクリックし、[アクセスを編集] を選択します。
- [+ プリンシパルを追加] をクリックします。
- [新しいプリンシパル] に、サービス エージェントのメールアドレスを入力します。
- [ロールの選択] プルダウン メニューから
Storage Object Creator、Storage Object Viewer、Storage Legacy Bucket Readerを選択します。 - もう一度 [+ プリンシパルを追加] をクリックします。
- 転送エージェント アカウントのメールアドレスを入力します。これは、転送エージェントのインストール時に使用されるユーザー アカウントまたはサービス アカウントです。たとえば、
my-agent-sa@PROJECT_ID.やuser@example.comです。 - [ロールの選択] プルダウン メニューから
Storage Object Userを選択します。 - [保存] をクリックします。
gcloud
サービス エージェントにロギングと閲覧者のロールを付与します。
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreatorgcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewergcloud 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_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser次のように置き換えます。
- BUCKET_NAME: 転送先バケットの名前。
- SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
- serviceAccount_OR_user: 転送エージェント アカウントがサービス アカウントの場合は
serviceAccountを指定します。エージェントがユーザー アカウントでインストールされている場合はuserを指定します。 - TRANSFER_AGENT_ACCOUNT: 転送エージェントをインストールしたアカウントのメールアドレス。例:
my-agent-sa@PROJECT_ID.、user@example.com
REST API
リクエストを認証するためのアクセス トークンを生成します。
gcloudCLI を使用している場合は、次のコマンドを実行します。gcloud auth print-access-token
既存のバケット IAM ポリシー(
GET https://storage./storage/v1/b/<var>BUCKET_NAME</var>/iam)を取得し、次のバインディングをbindings配列に追加して、統合されたポリシーをagent_sink_policy.jsonとして保存します。{ "bindings": [ { "role": "roles/storage.objectCreator", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectViewer", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.legacyBucketReader", "members": ["serviceAccount:SERVICE_AGENT_EMAIL"] }, { "role": "roles/storage.objectUser", "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
curlを使用してバケット ポリシーを更新します。curl -X PUT --data-binary @agent_sink_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 Transfer Service サービス エージェントに権限を付与する必要があります。
| 権限 | 説明 |
|---|---|
storage.buckets.get |
サービス エージェントにバケットのメタデータとロケーションの検査を許可します。 |
storage.objects.create |
サービス エージェントに、転送されたオブジェクトを転送先バケットに書き込むことを許可します。 |
storage.objects.get |
既存のオブジェクトとメタデータを表示できます。転送が、異なる場合またはなしの場合にシンク内のオブジェクトを上書きするように構成されている場合は必須です。 |
storage.objects.list |
転送先バケット内のオブジェクトの一覧表示を許可します。オブジェクトがシンクにすでに存在するかどうかを確認する場合に必要です。 |
storage.objects.delete |
転送先バケット内のオブジェクトの削除を許可します。上書きオプションまたは一意のオブジェクト削除オプションが有効になっている場合は必須です。 |
storage.objects.setIamPolicy |
宛先バケットにオブジェクト ACL を設定できます。オブジェクト ACL の保持(ACL_PRESERVE)が有効になっている場合は必須。 |
storage.folders.createstorage.folders.get |
フォルダの作成と読み取りを許可します。階層型名前空間が有効になっている転送先バケットに転送する場合に必要です。 |
エージェント主導の転送
Cloud Storage 宛先へのエージェント駆動型転送の場合、権限は次の 2 つのプリンシパルに分割されます。
サービス エージェント: 転送ログを書き込み、転送先バケットにオブジェクトが存在することを確認するための権限が必要です。
転送エージェント アカウント: Cloud Storage にファイルを書き込む転送エージェントを実行するサービス アカウントまたはユーザー アカウント。
サービス エージェントの権限
| 権限 | 説明 |
|---|---|
storage.buckets.get |
サービス エージェントにバケットのメタデータとロケーションの検査を許可します。 |
storage.objects.create |
バケットに転送ログを作成できるようにします。 |
storage.objects.get |
オブジェクトがすでに転送されているかどうかを確認できます。 |
転送エージェント アカウントの権限
| 権限 | 説明 |
|---|---|
storage.objects.create |
転送中にエージェントが転送先バケットにオブジェクトを書き込めるようにします。 |
storage.objects.get |
エージェントが転送先バケット内のオブジェクト データとメタデータを読み取れるようにします。 |
storage.objects.list |
エージェントが転送先バケット内の既存のオブジェクトを一覧表示できるようにします。 |
storage.objects.delete |
シンク内のオブジェクトを上書きまたは削除するように転送が構成されている場合は必須です。 |
storage.multipartUploads.createstorage.multipartUploads.abortstorage.multipartUploads.listPartsstorage.multipartUploads.list |
エージェントが大きなファイルのマルチパート アップロードを実行できるようにします。roles/storage.objectUser に自動的に含まれます。 |
storage.folders.createstorage.folders.get |
階層型名前空間が有効になっている転送先バケットに転送するときに、エージェントがフォルダを作成して読み取れるようにします。 |
次のステップ
- ソースへのアクセスを構成する方法を学習する。
- 転送を作成する方法を学習する。
- ロールと権限のリファレンスを確認する。