S3からGCSへのデータ転送(GCPのサービスアカウント鍵渡すパターン)
AWSのIAM情報をもらって
こちらからS3にアクセスするパターンは実験してみたが
https://note.com/ucwork/n/n5fe04382409b
次はGCPのサービスアカウント鍵を相手に渡して
こちらのGCSに連携してもらうパターンを実験
こちら(GCP側)でやること
GCSバケット作成
公式の推奨に従いアクセス制御「均一」でバケット作成
相手の会社に渡すサービスアカウントの作成
特にロールも与えずに作成
鍵をダウンロードしておく
バケットにサービスアカウント 追加
作成したGCSにサービスアカウント を追加Storageオブジェクト作成者、Storageオブジェクト閲覧者を追加する
対象バケットへのアクセス確認
作成したサービスアカウントを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
まとめ
あんまり鍵渡してやってもらうシチュエーションないかもしれないけど
「そっちのストレージにあげとくよー」って言われたときのために検証しておいた
この記事が気に入ったらサポートをしてみませんか?