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

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

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

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

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

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

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

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

組織のポリシーに対してこれらの権限の範囲が広すぎる場合は、このドキュメントの後半セクションで 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
  • Google 管理のサービス アカウント:

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

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

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

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

管理者アカウント

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

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

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

ユーザー アカウント

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

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

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

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

Google 管理のサービス アカウントの権限

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

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

ロールの自動割り当て

Google 管理のサービス アカウントに適切なロールを自動的に割り当てるには、次の 2 つの方法があります。

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

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

ロールの手動割り当て

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

ロール / 権限 機能 メモ
ストレージ オブジェクト作成者(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 と Pub/Sub の権限を転送エージェントに付与します。 エージェントによって使用されるユーザーまたはサービス アカウントにこのロールを付与します。

このロールで付与される権限の詳細については、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 バケット内のマルチパート アップロード セッションを一覧表示します。

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

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