データソースとデータシンクへのアクセスの構成

このページでは、Storage Transfer Service を使用するデータ転送に、データソースとデータシンクへのアクセス権を設定する方法について説明します。

Storage Transfer Service は、Google が管理するサービス アカウントを使用してデータを移動します。Cloud Storage リソースの IAM ポリシーを更新する権限があり、Google Cloud Console から転送を作成した場合、Google Cloud Console から作成した転送により、Storage Transfer Service が使用する Google が管理するサービス アカウントに、転送に必要な権限が自動的に付与されます。

Google Cloud 以外のデータソースや Storage Transfer Service API を使用して作成された転送にアクセスするには、追加の設定が必要です。

前提条件

サービス アカウントの権限は、バケットレベルで付与されます。これらの権限を付与できるロール(ストレージ管理者など)が必要です。詳細については、Identity and Access Management をご覧ください。

転送に Pub/Sub を使用する場合は、目的の Pub/Sub トピックに対する IAM ロール roles/pubsub.publisher をサービス アカウントに付与します。ロールを割り当てた後、そのロールがサービス アカウントに適用されるまでには数秒かかることがあります。この権限をプログラムで付与する場合は、30 秒待ってから Storage Transfer Service を構成します。

Cloud Storage のソースバケットまたは宛先バケットで Cloud Key Management Service が有効になっている場合、プロジェクトの割り当てページで Cloud KMS の割り当てが Storage Transfer Service の読み取り割り当て書き込み割り当てに対応していることを確認します。対応していない場合は、プロジェクトの割り当てページから割り当て量の増加をリクエストしてください。

詳しくは次の記事をご覧ください。

データソースへのアクセスの設定

Cloud Storage

Storage Transfer Service では、Google が管理するサービス アカウントを使用して Cloud Storage ソースバケットからデータを移行します。これは、最初に googleServiceAccounts.get を呼び出すときに作成されます。

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

Cloud Storage をデータソースとして使用するように Storage Transfer Service を設定するには、googleServiceAccounts.get API 呼び出しによって返される Google が管理するサービス アカウントに、次のロールまたは同等の権限を割り当てます。

ロール 機能
roles/storage.objectViewer サービス アカウントで、バケットのコンテンツの読み取り、オブジェクトのデータとメタデータの読み取りを行うことができます。
roles/storage.legacyBucketReader サービス アカウントで、バケットのコンテンツとメタデータの読み取り、オブジェクトのメタデータの読み取りを行うことができます。 Cloud Storage からソース オブジェクトを削除しない場合は、roles/storage.legacyBucketReader をサービス アカウントに割り当てます。
roles/storage.legacyBucketWriter サービス アカウントで、オブジェクトの作成 / 上書き / 削除、バケット内のオブジェクトの一覧表示、一覧表示したオブジェクトのメタデータの読み取り、バケットのメタデータの読み取り(IAM ポリシーを除く)を行うことができます。 Cloud Storage からソース オブジェクトを削除する場合は、roles/storage.legacyBucketWriter をサービス アカウントに割り当てます。

高度なデータ転送については、Storage Transfer Service の IAM 権限をご覧ください。

Amazon S3

次の手順で、Amazon S3 バケットへのアクセスを設定します。

  1. 次のいずれかの方法で Amazon S3 バケットへのアクセスを設定します。

    アクセス認証情報

    1. AWS Identity and Access Management(AWS IAM)ユーザーを transfer-user などのわかりやすい名前で作成します。名前が AWS IAM ユーザー名のガイドラインに従っていることを確認します(IAM エンティティとオブジェクトの制限についての記事をご覧ください)。
    2. AWS IAM ユーザーが、次のことを行うことができるようにします。
      • Amazon S3 バケットの一覧を表示する
      • バケットのロケーションを取得する
      • バケット内のオブジェクトを読み取る
      • オブジェクトの転送後にソースからオブジェクトを削除する場合は、ユーザーにオブジェクトの削除権限を付与します。
    3. 設定する転送ジョブに、少なくとも 1 つのアクセスキーと秘密鍵のペアを作成します。転送ジョブごとにアクセスキーと秘密鍵のペアを個別に作成することもできます。

    フェデレーション ID

    1. Storage Transfer Service は、Google 管理のサービス アカウントを使用して Amazon S3 のソースバケットからデータを移動します。サービス アカウントの形式は通常 project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com です。サービス アカウントの形式を確認し、サービス アカウントを作成するには(サービス アカウントが存在しない場合)、googleServiceAccounts.get API 呼び出しを使用します。次の手順でサービス アカウントを確認します。
    2. サービスがサービス アカウントでアウトバウンド リクエストを認証できるようにするには、以前にメモしたサービス アカウントに Service Account Token Creator のロールを追加します。
    3. AssumeRoleWithWebIdentity 権限で、次の Amazon Resource Name(ARN)の IAM ロールを作成します。
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "accounts.google.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              "StringEquals": {
                "accounts.google.com:sub": "Service_account_subject_identifier"
              }
            }
          }
        ]
      }
                        
      ARN の詳細については、IAM ARN をご覧ください。
    4. Storage Transfer Service に Amazon S3 リソースへのアクセスを許可する権限を追加します。これを行うには、ARN IAM ロールに次のポリシーを接続します。このロールは、AWS IAM Console で実行できます。
      {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3:Delete*",
             ],
            "Resource": "*"
          }
        ]
      }
                        
  2. Amazon Glacier にアーカイブされているすべてのオブジェクトを復元します。Amazon Glacier にアーカイブされている Amazon S3 のオブジェクトには、復元するまでアクセスできません。詳細については、Amazon Glacier から Cloud Storage への移行に関するホワイト ペーパーをご覧ください。

Microsoft Azure Blob Storage

Microsoft Azure Storage コンテナへのアクセスを構成するには、次の手順を行います。

  1. 既存の Microsoft Azure Storage ユーザーを作成または使用して、Microsoft Azure Storage Blob コンテナのストレージ アカウントにアクセスします。
  2. コンテナレベルで SAS トークンを作成します。Shared Access Signature を使用した Azure Storage リソースへのアクセスの制限を付与するをご覧ください。

    SAS トークンのデフォルトの有効期限は 8 時間です。SAS トークンを作成する際は、転送を正常に完了できるように、十分な有効期限を設定してください。

URL リスト

データソースが URL リストの場合は、URL リストの各オブジェクトが一般公開されていることを確認してください。

データシンクへのアクセスの設定

Storage Transfer Service では、Google が管理するサービス アカウントを使用して Cloud Storage ソースバケットからデータを移行します。これは、最初に googleServiceAccounts.get を呼び出すときに作成されます。

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

データ転送用のデータシンクは常に Cloud Storage バケットです。

Cloud Storage をデータシンクとして使用するように Storage Transfer Service を設定するには、googleServiceAccounts.get API 呼び出しによって返される Google が管理するサービス アカウントに、次のロールまたは同等の権限を割り当てます。

ロール 機能
roles/storage.legacyBucketWriter Google が管理するサービス アカウントで、オブジェクトの作成 / 上書き / 削除、宛先バケット内のオブジェクトの一覧表示、バケットのメタデータの読み取りを行うことができます。
roles/storage.objectViewer Google が管理するサービス アカウントで、宛先バケット内のオブジェクトを一覧表示して取得できます。

必要な権限の詳細については、Storage Transfer Service の IAM 権限をご覧ください。

次のステップ