Amazon S3からGoogle Cloud Storageにアクセスキーを使わずデータコピーする

こんにちは。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にも興味あるなというときにでも使えそうな感じです。

大量のデータを転送するときは、料金にご注意ください

現場からは以上です。

タイトルとURLをコピーしました