S3からGCSへのデータ転送(GCPのサービスアカウント鍵渡すパターン)

AWSのIAM情報をもらって
こちらからS3にアクセスするパターンは実験してみたが
https://note.com/ucwork/n/n5fe04382409b
次はGCPのサービスアカウント鍵を相手に渡して
こちらのGCSに連携してもらうパターンを実験

こちら(GCP側)でやること

GCSバケット作成
公式の推奨に従いアクセス制御「均一」でバケット作成

画像1

相手の会社に渡すサービスアカウントの作成

スクリーンショット 2020-07-16 22.47.24

特にロールも与えずに作成

スクリーンショット 2020-07-16 22.47.56

スクリーンショット 2020-07-16 22.48.13

鍵をダウンロードしておく

スクリーンショット 2020-07-16 22.51.56

バケットにサービスアカウント 追加
作成したGCSにサービスアカウント を追加Storageオブジェクト作成者、Storageオブジェクト閲覧者を追加する

スクリーンショット 2020-07-16 23.12.08

対象バケットへのアクセス確認
作成したサービスアカウントをactivateする

$ gcloud auth activate-service-account upload-to-gcs@[project_id].iam.gserviceaccount.com --key-file ./service_account.json --project [project_id]
Activated service account credentials for: [upload-to-gcs@[project_id].iam.gserviceaccount.com]

アクセス制御確認

$ gsutil ls
AccessDeniedException: 403 upload-to-gcs@uchiyama-sandbox.iam.gserviceaccount.com does not have storage.buckets.list access to the Google Cloud project.
$ # 対象のバケット以外見れない!
$
$ gsutil ls gs://[bucket_name]
$
$ gsutil cp tmp/sample.html gs://[bucket_name]/
Copying file://tmp/sample.html [Content-Type=text/html]...
/ [1 files][  1.8 KiB/  1.8 KiB]
$
$ gsutil ls gs://[bucket_name]
gs://[bucket_name]/sample.html
$ # 対象のバケットにuploadしてgetもできた!!

必要最低限の権限付与できてそう!

相手側(AWS(S3))のやること

サービスアカウント の鍵(jsonファイル)を何かしらセキュアな方法でお客さんに渡す。
対象S3にアクセスできるIAMユーザーを用意してもらい
~/.botoファイルに対象IAMのCredential情報追加

$ vim ~/.boto
[Credentials]
aws_access_key_id = [aws_access_key_id]
aws_secret_access_key = [aws_secret_access_key]

以下の通りS3からGCSにファイルアップロードしてもらう
なんならローカルのファイルでもいいのでGCSにアップしてもらう

gsutil cp s3://[aws_bucket_name]/test.csv gs://[gcs_bucket_name]/test.csv

まとめ

あんまり鍵渡してやってもらうシチュエーションないかもしれないけど
「そっちのストレージにあげとくよー」って言われたときのために検証しておいた


この記事が気に入ったらサポートをしてみませんか?