こんにちは。SCSK石原です。
GCPのData Transferを利用すると、AWSのIAMロールを利用してS3からCloud Storageにデータをコピーすることができるそうです。
アクセスキーは定期的なローテーションが推奨されています。アクセスキーを使わなくていいのは管理面で有効化ですね。
こちらを試してみました。
[AWS]IAMロールの作成
今回は、アクセスキーではありません。IAMロールを利用してGCPからS3にアクセスしますので、こちらを作成します。
データソースとデータシンクへのアクセスの構成 | Cloud Storage Transfer Service のドキュメント | Google Cloud
IAMロールとポリシーを作成するテンプレートは下記の通りです。
AWSTemplateFormatVersion: "2010-09-09" Description: "GCP to S3 Access role" Parameters: GCPServiceAccountSubjectID: Type: String Description: "https://cloud.google.com/storage-transfer/docs/reference/rest/v1/googleServiceAccounts/get" SourceS3BucketARN: Type: String Default: arn:aws:s3:::[BucketName] Resources: GCPServiceAccountIAMRole: Type: "AWS::IAM::Role" Properties: Path: "/" RoleName: "GCPServiceAccountIAMRole" AssumeRolePolicyDocument: !Sub | { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "accounts.google.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "accounts.google.com:sub": "${GCPServiceAccountSubjectID}" } } } ] } MaxSessionDuration: 3600 ManagedPolicyArns: - !Ref GCPtoS3AccessIAMManagedPolicy Description: "Allow GCP" GCPtoS3AccessIAMManagedPolicy: Type: "AWS::IAM::ManagedPolicy" Properties: ManagedPolicyName: "GCPtoS3AccessIAMManagedPolicy" Path: "/" PolicyDocument: !Sub | { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*", "s3:Delete*" ], "Resource": [ "${SourceS3BucketARN}", "${SourceS3BucketARN}/*" ] } ] } Outputs: IAMRoleARN: Description: "Allow GCP Access" Value: !GetAtt GCPServiceAccountIAMRole.Arn
テンプレートの入力パラメータは下記の通りです。
GCPServiceAccountSubjectID | こちらのページから取得可能します
https://cloud.google.com/storage-transfer/docs/reference/rest/v1/googleServiceAccounts/get |
SourceS3BucketARN | データのコピー元となるAmazon S3のバケットARNをします |
[GCP]データ転送の設定
Data Transferの設定をしていきます。
S3からGoogle Cloud Storageにコピーするので、ソースを「S3」宛先を「Google Cloud Storage」とします
AWS側の情報を入力します。IAMロールを利用してジョブを作成するので、AWS側でIAMロールのARNをメモしておき、入力します。
転送先はGoogle Cloud Storageのバケットやフォルダを指定します。
その他の細かい設定をします。
最後にスケジュールを設定します。一回きりなのか、定期的に実行するのかを設定します
実行結果
AWSに保存していたファイルを簡単にGCPにコピーすることができました。
終わりに
アクセスキーは定期的なローテーションが推奨されています。その管理をせずにGCPからS3にアクセスできるのは便利だなと感じました。
Data Transferではスケジュールの設定で定期的なデータコピーもできるので、AWSにデータレイクがあるけど、、、BigQueryとかLookerにも興味あるなというときにでも使えそうな感じです。
大量のデータを転送するときは、料金にご注意ください
現場からは以上です。