こんにちは。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にも興味あるなというときにでも使えそうな感じです。
大量のデータを転送するときは、料金にご注意ください
現場からは以上です。







