Amazon S3 バケットへのアクセスは、次のいずれかの方法で設定できます。
サポートされるリージョン
Storage Transfer Service は、次の Amazon S3 リージョンからデータを転送できます。af-south-1
, ap-east-1
, ap-northeast-1
,
ap-northeast-2
, ap-northeast-3
, ap-south-1
,
ap-south-2
, ap-southeast-1
, ap-southeast-2
,
ap-southeast-3
, ca-central-1
, eu-central-1
,
eu-central-2
, eu-north-1
, eu-south-1
,
eu-south-2
, eu-west-1
, eu-west-2
, eu-west-3
,
me-central-1
, me-south-1
, sa-east-1
, us-east-1
,
us-east-2
, us-west-1
, us-west-2
.
必要な権限
Storage Transfer Service を使用して Amazon S3 バケットからデータを移動するには、ユーザー アカウントまたはフェデレーション ID のロールにバケットに対する適切な権限が必要です。
権限 | 説明 | 使用 |
---|---|---|
s3:ListBucket |
Storage Transfer Service にバケット内のオブジェクトの一覧表示を許可します。 | 常に必要。 |
s3:GetObject |
Storage Transfer Service にバケット内のオブジェクトの読み取りを許可します。 | すべてのオブジェクトを現在のバージョンに転送する場合は必須です。manifestでオブジェクトのバージョンが指定されている場合は、代わりに s3:GetObjectVersion を使用します。 |
s3:GetObjectVersion |
Storage Transfer Service にバケット内の特定のバージョンのオブジェクトの読み取りを許可します。 | manifestでオブジェクトのバージョンが指定されている場合は必須です。それ以外の場合は、s3:GetObject を使用します。 |
s3:DeleteObject |
Storage Transfer Service にバケット内のオブジェクトの削除を許可します。 | deleteObjectsFromSourceAfterTransfer を true に設定する場合は必須です。 |
アクセス認証情報を使用して認証する
アクセスキー ID と秘密鍵を使用して AWS を認証するには:
AWS Identity and Access Management(AWS IAM)ユーザーを
transfer-user
などのわかりやすい名前で作成します。AWS アクセスタイプで [Access key - Programmatic access] を選択します。
次のいずれかのロールをユーザーに付与します。
- AmazonS3ReadOnlyAccess。ソースに対する読み取り専用アクセス権を付与します。これにより転送は可能になりますが、転送完了後にソースでオブジェクトを削除することはできません。
- AmazonS3FullAccess。転送時にオブジェクトを削除するように構成されている場合に使用します。
上の必要な権限の表にある適切な権限を持つカスタムロール。 最小権限の JSON は次の例のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
ユーザーが正常に作成されたら、アクセスキー 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"
}
}
クライアント ライブラリ
転送を作成するページの例をご覧ください。
アクセス認証情報を Secret Manager に保存する
Secret Manager は、パスワードなどの機密データを保存して管理する安全なサービスです。強力な暗号化、ロールベース アクセス制御、監査ロギングを使用してシークレットを保護します。
Storage Transfer Service では、Secret Manager を利用して AWS のアクセス認証情報を保護できます。Secret Manager に認証情報を読み込み、シークレット リソース名を Storage Transfer Service に渡します。
API を有効にする
Enable the Secret Manager API.
追加の権限を設定する
ユーザー権限
シークレットを作成するユーザーには、次のロールが必要です。
- Secret Manager 管理者(
roles/secretmanager.admin
)
ロールを付与する方法を確認する。
サービス エージェントの権限
Storage Transfer Service のサービス エージェントには、次の IAM ロールが必要です。
- Secret Manager のシークレット アクセサー(
roles/secretmanager.secretAccessor
)
サービス エージェントにロールを付与するには:
Cloud コンソール
手順に沿ってサービス エージェントのメールアドレスを取得します。
Google Cloud コンソールで [IAM] ページに移動します。
[アクセス権を付与] をクリックします。
[新しいプリンシパル] テキスト ボックスに、サービス エージェントのメールアドレスを入力します。
[ロールを選択] プルダウンで、「Secret Manager のシークレット アクセサー」を検索して選択します。
[保存] をクリックします。
gcloud
gcloud projects add-iam-policy-binding
コマンドを使用して、サービス エージェントに IAM ロールを追加します。
手順に沿ってサービス エージェントのメールアドレスを取得します。
コマンドラインで次のコマンドを入力します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:SERVICE_AGENT_EMAIL' \ --role='roles/secretmanager.secretAccessor'
シークレットを作成する
Secret Manager でシークレットを作成します。
Cloud コンソール
Google Cloud コンソールの [Secret Manager] ページに移動します。
[シークレットの作成] をクリックします。
名前を入力します。
[シークレットの値] テキスト ボックスに、次の形式で認証情報を入力します。
{ "accessKeyId": "AWS_ACCESS_KEY_ID", "secretAccessKey": "AWS_SECRET_ACCESS_KEY" }
[シークレットの作成] をクリックします。
シークレットが作成されたら、シークレットの完全なリソース名をメモします。
[Overview] タブを選択します。
[リソース ID] の値をコピーします。これには次のフォーマットが使用されます。
projects/1234567890/secrets/SECRET_NAME
gcloud
gcloud コマンドライン ツールを使用して新しいシークレットを作成するには、JSON 形式の認証情報を gcloud secrets create
コマンドに渡します。
printf '{
"accessKeyId": "AWS_ACCESS_KEY_ID",
"secretAccessKey": "AWS_SECRET_ACCESS_KEY"
}' | gcloud secrets create SECRET_NAME --data-file=-
シークレットの完全なリソース名を取得します。
gcloud secrets describe SECRET_NAME
レスポンスの name
の値をメモします。これには次のフォーマットが使用されます。
projects/1234567890/secrets/SECRET_NAME
シークレットの作成と管理の詳細については、Secret Manager のドキュメントをご覧ください。
シークレットをジョブ作成コマンドに渡す
Storage Transfer Service で Secret Manager を使用するには、REST API を使用して転送ジョブを作成する必要があります。
Secret Manager リソース名を transferSpec.awsS3DataSource.credentialsSecret
フィールドの値として渡します。
POST https://storagetransfer.googleapis.com/v1/transferJobs
{
"description": "Transfer with Secret Manager",
"status": "ENABLED",
"projectId": "PROJECT_ID",
"transferSpec": {
"awsS3DataSource": {
"bucketName": "AWS_BUCKET_NAME",
"credentialsSecret": "SECRET_RESOURCE_ID",
},
"gcsDataSink": {
"bucketName": "CLOUD_STORAGE_BUCKET_NAME"
}
}
}
フェデレーション ID を使用して認証する
フェデレーション ID を使用して AWS を認証するには:
AWS で新しい IAM ロールを作成します。
信頼できるエンティティ タイプとして [Custom trust policy] を選択します。
次の信頼ポリシーをコピーして貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "SUBJECT_ID" } } } ] }
SUBJECT_ID は、Storage Transfer Service の使用を開始するときに自動的に作成される、Google 管理のサービス アカウントの
subjectID
に置き換えます。subjectID
を取得するには:googleServiceAccounts.get
リファレンス ページに移動します。[Try this method] というインタラクティブ パネルが開きます。
パネルの [Request parameters] にプロジェクト ID を入力します。ここで指定するプロジェクトは、Storage Transfer Service の管理に使用しているプロジェクトである必要があります。
[実行] をクリックします。レスポンスに
subjectId
が含まれている。
次のいずれかの権限ポリシーをロールに付与します。
- AmazonS3ReadOnlyAccess。ソースへの読み取り専用アクセスを提供します。これにより転送は可能になりますが、転送完了後にソースでオブジェクトを削除することはできません。
- AmazonS3FullAccess。転送時にオブジェクトを削除するように構成されている場合に使用します。
上の必要な権限の表にある適切な権限を持つカスタムロール。 最小権限の JSON は次の例のようになります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::AWS_BUCKET_NAME/*", "arn:aws:s3:::AWS_BUCKET_NAME" ] } ] }
ロールに名前を割り当てて、ロールを作成します。
作成したら、ロールの詳細を表示して、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
フィールドを使用します。