エージェント ベースの転送の権限

エージェント ベースの転送を作成する前に、次のエンティティの権限を構成する必要があります。

  • 転送の作成に使用されているユーザーまたはユーザー管理のサービス アカウント 。これは、コンソールにログインしているアカウント、または gcloud CLI の認証時に指定されたアカウントです。 Google Cloud ユーザー アカウントは 、通常のユーザー アカウントでも、ユーザーが管理するサービス アカウントでもかまいません。

  • Storage Transfer Service で使用されるサービス エージェント。通常、このアカウントは メールアドレスで識別されます。メールアドレスの形式は project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com です。

  • 転送エージェントに Google Cloud 権限を付与する転送エージェント アカウント。転送エージェント アカウントは、インストールしたユーザーの認証情報、またはユーザー管理のサービス アカウントの認証情報を使用して認証を行います。

IAM ロールの付与については、リソースに対するアクセス権の付与、変更、取り消しをご覧ください。

権限を付与する最も簡単な方法

gcloud CLI を使用すると、ユーザー / ユーザー管理のサービス アカウントとサービス エージェントに必要な権限を付与できます。これらの権限により、ユーザーは転送ジョブの作成、編集、削除と、帯域幅の上限の設定、変更を行うことができます。

組織のポリシーに対してこれらの権限の範囲が広すぎる場合は、このドキュメントの後半セクションで Storage Transfer Service に必要な最小権限を確認してください。

既存の権限で不足しているロールを確認するには、次のコマンドを実行します。

gcloud transfer authorize

これらのロールを自動的に適用するには、--add-missing フラグを使用します。

gcloud transfer authorize --add-missing

ユーザー管理のサービス アカウントに権限を付与するには、サービス アカウント キーのファイルを渡します。

gcloud transfer authorize --add-missing --creds-file=path/to/key.json

サービス アカウントの作成については、サービス アカウントの作成と管理をご覧ください。

このコマンドは次の権限を付与します。

  • ユーザー / ユーザー管理のサービス アカウント:

    • roles/owner
    • roles/storagetransfer.admin
    • roles/storagetransfer.transferAgent
    • roles/storage.objectAdmin
    • roles/pubsub.editor
  • サービス エージェント:

    • roles/storage.admin
    • roles/storagetransfer.serviceAgent

gcloud CLI のインストール手順については、 gcloud クイックスタートをご覧ください

ユーザーまたはユーザー管理のサービス アカウントの権限

このセクションでは、転送を管理および実行するアカウントに必要なロールについて説明します。組織の要件により、各ペルソナに対する適切なロールが指定されます。このセクションでは、管理者とユーザーを作成することを前提としています。

管理者アカウント

Storage Transfer Service 管理者アカウントは、転送エージェントの管理、帯域幅の使用量上限の設定、転送ジョブの削除を行います。

管理者アカウントを設定するには、次の IAM の権限とロールを割り当てます。

ロール / 権限 機能
resourcemanager.projects.getIamPolicy この権限は、転送に必要な権限がサービス エージェント にあることを確認するために使用します。 この権限を付与するには、 ロール閲覧者 (roles/iam.roleViewer)の事前定義ロールを付与するか、 この権限のみを含むカスタムロールを作成して付与します。
Storage Transfer 管理者 (roles/storagetransfer.admin プロジェクト設定やエージェントのモニタリングなど、転送プロジェクトでの管理アクションを有効にします。 付与される権限の詳細については、 Storage Transfer Service の事前定義ロールをご覧ください。

ユーザー アカウント

Storage Transfer Service ユーザー アカウントは転送の作成と実行に使用されます。通常、これらのアカウントには転送ジョブの削除権限はありません。

ユーザー アカウントとして使用できるのは、 Google Cloud コンソール ユーザーまたはサービス アカウントのいずれかです。サービス アカウントを使用している場合、Storage Transfer Service に認証情報を渡す方法は、使用するインターフェースによって異なります。

ユーザー アカウントを設定するには、アカウントに次の権限とロールを割り当てます。

ロール / 権限 機能
resourcemanager.projects.getIamPolicy 転送に必要な Pub/Sub 権限が サービス エージェントにあることを確認するために使用されます。 この権限を付与するには、 ロール閲覧者 (roles/iam.roleViewer)の事前定義ロールを付与するか、 この権限のみを含むカスタムロールを作成して付与します。
Storage Transfer ユーザー (roles/storagetransfer.user ユーザーが転送の作成、取得、更新、一覧表示を行えるようにします。 付与される権限の詳細については、 Storage Transfer Service の事前定義ロールをご覧ください。

サービス エージェントの権限

Storage Transfer Service は、 サービス エージェントを使用してデータを移動します。このサービス アカウントは、転送ジョブの作成、 googleServiceAccounts.get の呼び出し、 Google Cloud コンソールのジョブ作成ページへの初回アクセスの際に自動的に作成されます。

サービス アカウントの形式は通常 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com. です。サービス アカウント ID を取得するには、 googleServiceAccounts.get API 呼び出しを使用します。

ロールの自動割り当て

サービス エージェントに適切なロールを自動的に割り当てるには、次の 2 つの方法があります。

  • コンソールを使用して転送を作成します。 Google Cloud コンソールでは必要な権限が自動的に適用されます。

  • gcloud transfer authorize --add-missing を使用してください。権限を付与する最も簡単な方法をご覧ください。

ロールの手動割り当て

転送を完了するために必要なリソースにサービス エージェントがアクセスできるようにするには、次のロールまたは同等の権限をサービス アカウントに割り当てます。

ロール / 権限 機能 メモ
ストレージ オブジェクト作成者(roles/storage.objectCreator この転送に接続されている Cloud Storage バケットに Storage Transfer Service が転送ログを作成できるようにします。 転送で使用されるすべての Cloud Storage バケットに付与します。状況に応じて、Storage Transfer Service の実行元プロジェクトにプロジェクト レベルでロールを付与できます。

これらのロールで付与される権限の詳細については、Cloud Storage の事前定義ロールをご覧ください。
ストレージ オブジェクト閲覧者(roles/storage.objectViewer ファイルが Cloud Storage との間で転送されているかどうかを Storage Transfer Service が判断できるようにします。
Storage Transfer Service エージェント (roles/storagetransfer.serviceAgent) Google Cloud から転送エージェントに通信するための Pub/Sub トピックを Storage Transfer Service が自動的に作成または変更できるようにします。 Storage Transfer Service の実行元のプロジェクトにプロジェクト レベルでロールを適用します。

このロールで付与される権限の詳細については、権限とロールをご覧ください。
Storage レガシー バケット読み取り (roles/storage.legacyBucketReader) Storage Transfer Service が Cloud Storage バケットのメタデータの読み取りを実行できるようにします。

転送で使用される各 Cloud Storage バケットに付与します。

Cloud Storage の legacy ロールは、バケットレベルでのみ付与できます。

手順については、必要な権限の付与をご覧ください。

転送エージェント アカウントの権限

Storage Transfer Service 転送エージェントは、ユーザーのアカウントまたはサービス アカウントのどちらでも実行できます。

転送エージェントのサービス アカウントまたは転送エージェントを実行するユーザー アカウントを設定するには、次のロールを割り当てます。

ロール / 権限 機能 メモ
Storage Transfer エージェント (roles/storagetransfer.transferAgent) 転送を完了するために必要な Storage Transfer Service の権限を転送エージェントに付与します。このロールには、スキップされたファイルをログに記録するために必要な権限も含まれています。 エージェントによって使用されるユーザーまたはサービス アカウントにこのロールを付与します。

このロールで付与される権限の詳細については、IAM を使用したアクセス制御をご覧ください。

ソースと宛先の権限

また、ソースデータにアクセスし、宛先に書き込むための適切な権限が、エージェント アカウントに付与されている必要があります。

ファイル システム、S3 互換ストレージ、HDFS から Cloud Storage

転送先が Cloud Storage バケットの場合、転送エージェントには転送先バケットに対する次の権限が必要です。手順については、バケットレベルのポリシーにプリンシパルを追加するをご覧ください。

権限 説明
storage.objects.create 転送中、エージェント アカウントに Cloud Storage オブジェクトの書き込みを許可します。
storage.objects.get エージェント アカウントに、オブジェクト データとメタデータの読み取りを許可します。
storage.objects.list エージェント アカウントに、Cloud Storage バケット内のオブジェクトの一覧表示を許可します。
storage.objects.delete シンク内のオブジェクトを上書きまたは削除するように転送が構成されている場合は必須です(たとえば、転送の transferOptions 構成で overwriteObjectsAlreadyExistingInSink または deleteObjectsUniqueInSink が設定されている場合)。

これらの権限を付与するには、次のロールを付与します。

または、特定の権限を持つカスタムロールを作成してロールを付与します。

マルチパート アップロードを有効にするには、追加の権限が必要です。

Cloud Storage からファイル システム

転送元が Cloud Storage バケットの場合、転送エージェントには転送元バケットに対する次の権限が必要です。

権限 説明
storage.objects.create エージェント アカウントに、転送ログと転送関連のメタデータの Cloud Storage ソースバケットへの書き込みを許可します。
storage.objects.get エージェント アカウントに、オブジェクト データとメタデータの読み取りを許可します。
storage.objects.list エージェント アカウントに、Cloud Storage バケット内のオブジェクトの一覧表示を許可します。
storage.objects.delete 転送元からのオブジェクトを削除するように構成されている場合は必須です。deleteObjectsFromSourceAfterTransfer をご覧ください。

この権限を付与するには、次のロールを付与します。

または、この単一の権限を持つカスタムロールを作成してロールを付与します。

ファイル システム間

2 つのファイル システム間の転送の場合、転送エージェントには中間バケットに対する次の権限が必要です。

権限 説明
storage.objects.create 転送中、エージェント アカウントに Cloud Storage オブジェクトの書き込みを許可します。
storage.objects.get エージェント アカウントに、オブジェクト データとメタデータの読み取りを許可します。
storage.objects.list エージェント アカウントに、Cloud Storage バケット内のオブジェクトの一覧表示を許可します。
storage.objects.delete 転送が完了した後、中間バケット内のオブジェクトを削除するように構成されている場合は必須です。

これらの権限を付与するには、次のロールを付与します。

または、特定の権限を持つカスタムロールを作成してロールを付与します。

マルチパート アップロードを有効にするには、追加の権限が必要です。

マルチパート アップロード

ファイル システムから Cloud Storage への転送やファイル システム間の転送のマルチパート アップロードを有効にするには、さらに次の権限をエージェントに付与します。

  • Cloud Storage への転送の場合は、転送先のバケットに権限を割り当てます。
  • ファイル システム間の転送の場合は、中間バケットに権限を割り当てます。
マルチパート アップロードの権限名 説明
storage.multipartUploads.create 複数のパートでオブジェクトをアップロードします。
storage.multipartUploads.abort マルチパート アップロード セッションを中止します。
storage.multipartUploads.listParts マルチパート アップロード セッションで、アップロードされたオブジェクト パーツを一覧表示します。
storage.multipartUploads.list バケット内のマルチパート アップロード セッションを一覧表示します。

これらの権限を付与するには、次のロールを付与します。

または、特定の権限を持つカスタムロールを作成してロールを付与します。