はじめに
AWSからGCPの操作がセキュアにできるWorkload Identity連携を、Cloud9上からPythonで試してみたので記事にしました。
まとめ
- 認証ファイルのパスを、環境変数
GOOGLE_APPLICATION_CREDENTIALS
にセットする- 対象プロジェクトを指定するために、別途環境変数
GCLOUD_PROJECT
にセット
- 対象プロジェクトを指定するために、別途環境変数
- Cloud9から行う場合は、使用しているEC2にIAMロールを付与して使う
- Pythonライブラリをインストールする際、ローカルにインストールする
pip install -t .
だとうまくいかない
参考
GCP側の手順やCloud9の設定は以下のページが詳しいです。
やったこと
GCP側
前回の記事をそのままやっています。
こちらで作られたファイルをそのまま使います。
AWS側
Cloud9設定
参考で紹介したページにやり方があります。
画面のスクショで補足しますと、Cloud9でtemporary credentialを無効にする場合は以下の順序になります。
- 右上の歯車マークをクリック
- 左ペインから"AWS Settings"を選択
- CredentialsをOFF
インスタンスにIAMロールをつける場合は、EC2のコンソールから[アクション]-[セキュリティ]-[IAMロールを変更]と操作します。
Cloud9に戻って、左メニューのAWSアイコンからAWS:Explorerのアイコンで、[Choose AWS Profile...]で設定できます。
仮想環境作成
今回は仮想環境を作り、その上で実行しました。
Cloud9に直で構築しても問題ないですが、後片付けがしやすいように仮想環境を使いました。
$ mkdir aws-to-gcp
$ cd aws-to-gcp
# virtualenv上で環境構築
$ virtualenv a2genv
$ source a2genv/bin/activate
ライブラリインストール
今回はGCSを操作するので、必要なライブラリをインストール。
ただpip install -t .
だとうまくいきませんでした。
# google-cloud-storageをインストール
# pip install -t . だと うまくインストールされないようで、protobufが使えない
(a2genv) $ pip install google-cloud-storage
環境変数設定
GCP側で作ったファイルをアップロードします。
アップロードしたファイルまでのパスを、環境変数GOOGLE_APPLICATION_CREDENTIALS
にセットします。
環境変数を使う話は公式より
操作するGCPプロジェクトのIDを、環境変数GCLOUD_PROJECT
にセットします。
# 環境変数設定
(a2genv) $ export GOOGLE_APPLICATION_CREDENTIALS=`pwd`/clientLibraryConfig-awstogcp.json
# 対象のGCP上のプロジェクトを指定
(a2genv) $ export GCLOUD_PROJECT=hogehoge-pj
# 環境変数確認
(a2genv) $ printenv GOOGLE_APPLICATION_CREDENTIALS
(a2genv) $ printenv GCLOUD_PROJECT
これで準備は完了です。
Python実行
後はPythonから操作するだけです。
以下のコマンドで、GCSのバケット一覧が取得できます。
(a2genv) $ python
>>> from google.cloud import storage
>>> storage_client = storage.Client()
>>> list(storage_client.list_buckets())
片づけ
仮想環境下で行ったので、ディレクトリごと削除すれば片付け完了です。
(a2genv) $ deactivate
$ cd ..
$ rm -rf aws-to-gcp/
おわりに
今回はWorkload Identity連携の成功事例を記事にしました。
使い方が簡単でセキュアなので、連携する際はこの方法を積極利用していきたいと思います。