シンクへのアクセスを構成する: ファイル システム

オンプレミスまたはプライベート クラウドのファイル システム(POSIX、NFS、SMB など)にデータを転送する場合は、次の構成を行う必要があります。

  • ローカル ファイル システムの権限: 宛先の転送エージェントに、ターゲット ディレクトリへの OS レベルの書き込みアクセス権を付与します。
  • 中間バケットの権限(ファイル間のみ): ファイル システム間でファイルをステージングするために使用される中間 Cloud Storage バケットに IAM ロールを付与します。

前提条件

  • ユーザー権限: ユーザー アカウントまたはユーザー管理のサービス アカウントに、転送ジョブとエージェント プールを構成する権限があることを確認します。必要なユーザー権限をご覧ください。
  • エージェント ベースのプロジェクト レベルの権限: サービス エージェントと転送エージェント アカウントに必要なプロジェクト レベルのロールが構成されていることを確認します。エージェント ベースのプロジェクト レベルの権限をご覧ください。

ローカル ターゲット ファイル システムの権限

転送エージェントは、ホスト ファイル システムにファイルを直接書き込みます。書き込みを成功させるには、次の操作を行います。

  1. OS ユーザー権限: コンテナ プロセスを実行するオペレーティング システム ユーザーに、宛先ディレクトリ ツリーに対する読み取り、書き込み、実行の権限があることを確認します。

  2. ディレクトリをマウントする: 宛先エージェントをインストールするときに、--mount-directories フラグを使用してターゲット ディレクトリ パスをコンテナにマウントします。

    gcloud transfer agents install --pool=DESTINATION_POOL_NAME \
     --mount-directories=/path/to/destination/dir

中間バケットの権限(ファイル間転送)

2 つのファイル システム間の転送では、転送中にファイルをステージングするために中間の Cloud Storage バケットが使用されます。

次の事前定義ロールは、中間バケットに必要なアクセス権をサービス エージェントに付与します。

  • Storage オブジェクト作成者(roles/storage.objectCreator)
  • Storage オブジェクト閲覧者(roles/storage.objectViewer)
  • Storage レガシー バケット読み取り(roles/storage.legacyBucketReader)

次のロールは、転送エージェント アカウントに中間バケットに対する必要なアクセス権を付与します。

  • Storage オブジェクト ユーザー(roles/storage.objectUser)

中間バケットに次のロールを付与します。

コンソール

  1. Google Cloud コンソールで Cloud Storage の [バケット] ページに移動します。

    [バケット] に移動

  2. 中間バケットのバケット オーバーフロー メニュー()をクリックし、[編集権限] を選択します。
  3. [+ プリンシパルを追加] をクリックします。
  4. [新しいプリンシパル] に、サービス エージェントのメールアドレスを入力します。
  5. [ロールの選択] プルダウン メニューから Storage Object Creator、Storage Object Viewer、Storage Legacy Bucket Reader を選択します。
  6. もう一度 [+ プリンシパルを追加] をクリックします。
  7. ソース エージェント プールと宛先エージェント プールに使用する転送エージェント アカウントのメールアドレスを入力します。
  8. [ロールの選択] プルダウン メニューから Storage Object User を選択します。
  9. [保存] をクリックします。

gcloud

  1. サービス エージェントにロギングとメタデータのロールを付与します。

    gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectCreator
    gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.objectViewer
    gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \
        --member=serviceAccount:SERVICE_AGENT_EMAIL --role=roles/storage.legacyBucketReader
  2. 転送元と転送先のエージェント プールの転送エージェント アカウントにオブジェクト管理ロールを付与します。

    gcloud storage buckets add-iam-policy-binding gs://INTERMEDIATE_BUCKET_NAME \
        --member=serviceAccount_OR_user:TRANSFER_AGENT_ACCOUNT --role=roles/storage.objectUser

    次のように置き換えます。

    • INTERMEDIATE_BUCKET_NAME: 中間ステージング バケットの名前。
    • SERVICE_AGENT_EMAIL: サービス エージェントのメールアドレス。
    • serviceAccount_OR_user: 転送エージェント アカウントがサービス アカウントの場合は serviceAccount を指定し、エージェントがユーザー アカウントでインストールされている場合は user を指定します。
    • TRANSFER_AGENT_ACCOUNT: 転送エージェントを実行しているアカウントのメールアドレス。移行元と移行先のエージェント プールで異なるアカウントを使用している場合は、このコマンドを繰り返します。

REST API

  1. リクエストを認証するためのアクセス トークンを生成します。gcloud CLI を使用している場合は、次のコマンドを実行します。

    gcloud auth print-access-token
  2. 既存のバケット IAM ポリシー(GET https://storage./storage/v1/b/<var>INTERMEDIATE_BUCKET_NAME</var>/iam)を取得し、次のバインディングを bindings 配列に追加して、統合されたポリシーを intermediate_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: 転送エージェントをインストールしたアカウントのメールアドレス。移行元と移行先のエージェント プールで異なるアカウントを使用する場合は、roles/storage.objectUser の members 配列に両方のアカウントを含めます。
  3. curl を使用して中間バケット ポリシーを更新します。

    curl -X PUT --data-binary @intermediate_policy.json \
        -H "Authorization: Bearer OAUTH2_TOKEN" \
        -H "Content-Type: application/json" \
        "https://storage./storage/v1/b/INTERMEDIATE_BUCKET_NAME/iam"

    次のように置き換えます。

    • OAUTH2_TOKEN: ステップ 1 で生成された OAuth 2.0 アクセス トークン。
    • INTERMEDIATE_BUCKET_NAME: 中間バケットの名前。

ファイル間アーキテクチャの詳細については、ファイル システムからファイル システムへの転送をご覧ください。

パフォーマンスと最適化

  • 大規模なファイル システムに転送する際のスループットを最大化するには、宛先エージェント プールに複数のエージェントをインストールします(推奨される最小数は 3)。転送エージェントのベスト プラクティスをご覧ください。
  • ファイル間転送で大きなファイルを転送する場合は、中間バケットへのマルチパート アップロードを有効にすることを検討してください。Storage オブジェクト ユーザー(roles/storage.objectUser)を使用すると、必要なマルチパート アップロード権限(storage.multipartUploads.*)が自動的に含まれます。

次のステップ