Google Cloud の Storage Transfer Service について
この記事では、Google Cloud の Storage Transfer Service について紹介します。
Storage Transfer Service の概要
Storage Transfer Service とは、あらゆるデータソースに対して「セキュアに」Google Cloud Storage(GCS)に転送処理を行うことができる Google Cloud のサービスです。大容量のデータであっても Google Cloud 側が対応するため、メモリなどを特に気にする必要はありません。
Storage Transfer Service は、例えば AWS の S3 のデータ転送するようなケースでは以下のような機能があります。
- データ転送における End to End のパスは TLS で暗号化
- S3 バケットに必要となる AWS IAM アカウントと Credential を GCP 側に保持
- (Optional)AWS IAM 側では上記 IAM アカウントに対して必要最小限のポリシーを付与
- (Optional)VPC Service Controls を使っている場合は、データ転送先の GCS バケットからのデータの持ち出しは定義した環境に限定可能
ハンズオン
今回は Amazon S3 から GCS への csv ファイル転送をコンソールで行なっていきます。
バケット作成
今回のハンズオンの準備として、以下のように S3 バケットと GCS バケットを作成します。
- S3
- GCS
- GCS バケットを作成(このハンズオンでは「storage-transfer-destination」という名前にしています。)

アクセス権限の設定
Storage Transfer Service の S3 バケットに対するアクセス方法は以下の 2 つの方法があります。
- AWS アクセスキーを使う
- AWS IAM Role をを使う
AWS アクセスキーを使う場合、永続的なキーを発行しないといけないため、アクセス情報の漏洩に対してセキュアではありません。そのため、後者の IAM Role を用いて S3 へのアクセスを行います。
まずはこちらからプロジェクト ID を入力して「subjectId」を取得し、メモしておきます。
次に AWS で Role を作成します。以下のように「Trusted entity type」を「Web identity」、「Identity provider」を「Google」、「Audience」にメモしておいた「subjectId」を入力します。そして「GCPStorageTransferService」などと名付けてポリシーを以下のように編集して Role を作成します。(accounts.google.com:aud
をaccounts.google.com:sub
に変更)

作成した Role に以下のようなポリシーをアタッチします。
Transfer の作成
Transferページに移動し、Transfer を作成します。設定項目を入力し、「CREATE」をクリックします。

AWS S3 の「storage-transfer-datasource」バケットにある「product.csv」を GCS の「storage-transfer-datasource」バケットに転送することができました。

Python で Transfer を作成
上記では、コンソールで Transfer の作成を行いましたが、次に Python での Transfer の作成を紹介します。まずは以下のリンクから「Storage Transfer API」を有効化します。
次に「Storage Transfer Admin」などの Role を持ったサービスアカウントを作成し、サービスアカウントキー(JSON)を発行します。
そして以下のコマンドのようにキーのパスを指定します。
Python のライブラリをインストールします。
そして以下のような Python スクリプトを記述します。(role_arn
は書き換える必要あり)
最後に以下のコマンドを実行すると Transfer が作成されます。
Terraform で Transfer を作成するには以下のようなコードを実行します。
参考