ソースへのアクセスを構成する: Amazon S3

Amazon S3 バケットへのアクセスは、次のいずれかの方法で設定できます。

サポートされるリージョン

Storage Transfer Service は、次の Amazon S3 リージョンからデータを転送できます。 af-south-1ap-east-1ap-northeast-1ap-northeast-2ap-northeast-3ap-south-1ap-south-2ap-southeast-1ap-southeast-2ap-southeast-3ca-central-1eu-central-1eu-central-2eu-north-1eu-south-1eu-south-2eu-west-1eu-west-2eu-west-3me-central-1me-south-1sa-east-1us-east-1us-east-2us-west-1us-west-2

必要な権限

Storage Transfer Service を使用して Amazon S3 バケットからデータを移動するには、ユーザー アカウントまたはフェデレーション ID のロールにバケットに対する適切な権限が必要です。

権限 説明 使用
s3:ListBucket Storage Transfer Service にバケット内のオブジェクトの一覧表示を許可します。 常に必要。
s3:GetBucketLocation Storage Transfer Service にバケットのロケーションの取得を許可します。 常に必要。
s3:GetObject Storage Transfer Service にバケット内のオブジェクトの読み取りを許可します。 すべてのオブジェクトを現在のバージョンに転送する場合は必須です。マニフェストでオブジェクトのバージョンが指定されている場合は、代わりに s3:GetObjectVersion を使用します。
s3:GetObjectVersion Storage Transfer Service にバケット内の特定のバージョンのオブジェクトの読み取りを許可します。 マニフェストでオブジェクトのバージョンが指定されている場合は必須です。それ以外の場合は、s3:GetObject を使用します。
s3:DeleteObject Storage Transfer Service にバケット内のオブジェクトの削除を許可します。 deleteObjectsFromSourceAfterTransfertrue に設定する場合は必須です。

アクセス認証情報を使用して認証する

アクセスキー ID と秘密鍵を使用して AWS を認証するには:

  1. AWS Identity and Access Management(AWS IAM)ユーザーを transfer-user などのわかりやすい名前で作成します。

  2. AWS アクセスタイプで [Access key - Programmatic access] を選択します。

  3. 次のいずれかのロールをユーザーに付与します。

    • AmazonS3ReadOnlyAccess。ソースに対する読み取り専用アクセス権を付与します。これにより転送は可能になりますが、転送完了後にソースでオブジェクトを削除することはできません。
    • AmazonS3FullAccess。転送時にオブジェクトを削除するように構成されている場合に使用します。
    • 上の必要な権限の表にある適切な権限を持つカスタムロール。 最小権限の JSON は次の例のようになります。

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
      
  4. ユーザーが正常に作成されたら、アクセスキー IDシークレット アクセス キーをメモします。

アクセスキー ID とシークレット アクセスキーを Storage Transfer Service に渡す方法は、転送を開始するために使用するインターフェースによって異なります。

Cloud コンソール

値を転送ジョブ作成フォームに直接入力します。

開始するには、転送を作成するをご覧ください。

gcloud CLI

次の形式の JSON ファイルを作成します。

{
  "accessKeyId": "AWS_ACCESS_KEY_ID",
  "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}

source-creds-file フラグを使用して、ファイルの場所を gcloud transfer jobs create コマンドに渡します。

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/KEYFILE.JSON

REST API

transferSpec オブジェクトに awsS3DataSource オブジェクトの一部として鍵情報を含める必要があります。

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "awsAccessKey": {
      "accessKeyId": "AWS_ACCESS_KEY_ID",
      "secretAccessKey": "AWS_SECRET_ACCESS_KEY"
    }
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

クライアント ライブラリ

転送を作成するページの例をご覧ください。

フェデレーション ID を使用して認証する

フェデレーション ID を使用して AWS を認証するには:

  1. AWS で新しい IAM ロールを作成します。

  2. 信頼できるエンティティ タイプとして [Custom trust policy] を選択します。

  3. 次の信頼ポリシーをコピーして貼り付けます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Federated": "accounts.google.com"
          },
          "Action": "sts:AssumeRoleWithWebIdentity",
          "Condition": {
            "StringEquals": {
              "accounts.google.com:sub": "SUBJECT_ID"
            }
          }
        }
      ]
    }
    
  4. SUBJECT_ID は、Storage Transfer Service の使用を開始するときに自動的に作成される、Google 管理のサービス アカウントの subjectID に置き換えます。subjectID を取得するには:

    1. googleServiceAccounts.get リファレンス ページに移動します。

      [Try this method] というインタラクティブ パネルが開きます。

    2. パネルの [Request parameters] にプロジェクト ID を入力します。ここで指定するプロジェクトは、Storage Transfer Service の管理に使用しているプロジェクトである必要があります。

    3. [実行] をクリックします。レスポンスに subjectId が含まれている。

  5. 次のいずれかの権限ポリシーをロールに付与します。

    • AmazonS3ReadOnlyAccess。ソースへの読み取り専用アクセスを提供します。これにより転送は可能になりますが、転送完了後にソースでオブジェクトを削除することはできません。
    • AmazonS3FullAccess。転送時にオブジェクトを削除するように構成されている場合に使用します。
    • 上の必要な権限の表にある適切な権限を持つカスタムロール。 最小権限の JSON は次の例のようになります。

      {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::AWS_BUCKET_NAME/*",
                    "arn:aws:s3:::AWS_BUCKET_NAME"
                ]
            }
        ]
      }
      
  6. ロールに名前を割り当てて、ロールを作成します。

  7. 作成したら、ロールの詳細を表示して、Amazon リソース名(ARN)を取得します。この値をメモします。形式は arn:aws:iam::AWS_ACCOUNT:role/ROLE_NAME です。

ARN を Storage Transfer Service に渡す方法は、転送の開始に使用するインターフェースによって異なります。

Cloud コンソール

ARN を転送ジョブ作成フォームに直接入力します。

開始するには、転送を作成するをご覧ください。

gcloud CLI

次の形式の JSON ファイルを作成します。

{
  "roleArn": "ARN"
}

source-creds-file フラグを使用して、ファイルの場所を gcloud transfer jobs create コマンドに渡します。

gcloud transfer jobs create s3://S3_BUCKET_NAME gs://GCS_BUCKET_NAME \
  --source-creds-file=PATH/TO/ARNFILE.JSON

REST API

transferSpec オブジェクトに awsS3DataSource オブジェクトの一部として ARN 情報を含める必要があります。

"transferSpec": {
  "awsS3DataSource": {
    "bucketName": "AWS_SOURCE_NAME",
    "roleArn": "ARN"
  },
  "gcsDataSink": {
    "bucketName": "GCS_SINK_NAME"
  }
}

クライアント ライブラリ

転送を作成するページの例をご覧ください。

IP の制限

AWS プロジェクトでストレージへのアクセスに IP 制限を使用する場合は、Storage Transfer Service ワーカーで使用される IP 範囲を許可 IP リストに追加する必要があります。

これらの IP 範囲は変更される可能性があるため、永続的なアドレスに現在の値を JSON ファイルとして公開します。

https://www.gstatic.com/storage-transfer-service/ipranges.json

ファイルに新しい範囲が追加された場合、Storage Transfer Service からのリクエストに対してその範囲が使用されるまでに少なくとも 7 日間はかかります。

セキュリティ構成を最新の状態に保つため、少なくとも週に 1 回、このドキュメントからデータを pull することをおすすめします。JSON ファイルから IP 範囲を取得する Python スクリプトの例については、Virtual Private Cloud のドキュメントをご覧ください。

これらの範囲を許可された IP として追加するには、AWS S3 のドキュメントの特定の IP アドレスに基づいてアクセスを管理するで説明されているように、バケット ポリシーで Condition フィールドを使用します。