https://circleci.com/docs/google-authの翻訳。Testing with Google Cloud Test Labで説明されていた内容のうち、CircleCIからCloud Test Labでのテストを実行する上で必要になる認証について。
概要
gcloud
コマンドラインツール使いアプリをGoogle Cloud Platformにデプロイする前に、gcloud
コマンドラインツールに適切な権限を与えるための認証が必要になります。したがって、JSON Service Accountを作成する必要があります。このService Accountは、base64でエンコードしCircleCIの環境変数へ追加します。追加した環境変数はあなたのビルドスクリプトでJSONファイルにデコードし、それをgcloudツールの認証に使用します。認証後、gcloudツールをあなたのGCPプロジェクトの操作に利用できます。
JSON Service Accountの作成とダウンロード
Service Accountをダウンロードするには、このリンクをクリックします。もしくはhttps://console.developers.google.com/へアクセスし、左側のメニューから'API Managaer'を選択し、'認証情報'から'認証情報を作成'、そして'サービスアカウントキー'を選択します。
サービスアカウントを選択できるので、既存のものを選択するか、名前とサービスアカウントIDを入力して新規作成します。そしてキーのタイプに'JSON'を選択し'作成'をクリックするとJSONファイルがダウンロードされます。
Service Accountは認証情報であり、あなたの代わりにプロジェクトを操作できるということを心に留めておき、その扱いには十分注意してください。
CircleCIへのサービスアカウントの追加
Service Accountを作成後、その次のステップは、それをあなたのCircleCIのビルド環境の環境変数へ登録することです。まず最初にService Accountをbase64でエンコードします。LinuxやOS Xであれば以下のように入力してください。
base64 <your-service-account.json>
そして、コマンドの実行結果をコピーしてください。Windowsユーザーは恐らくcertutil
を使う必要があります。
JSON Service Accountをエンコードした値をコピーし、CircleCIのプロジェクトから右上にある'Project Settings'をクリックし、それから左側の'Environment variables'をクリックしてください。NameにCLIENT_SECRET、valueにコピーしたエンコード済みのJSON Service Accountの値をペーストし、'Save variables'をクリックします。これでCircleCIのビルドからService Accountへアクセスできるようになりました。
gcloudツールの認証へのサービスアカウントの使用
エンコードしたサービスアカウントを環境変数に追加したと思いますが、次のステップではそれをデコードし、ビルドスクリプトから使用できるようにします。そして、gcloudツールの認証に使用します。以下はその例です。
echo $CLIENT_SECRET | base64 --decode > ${HOME}/client-secret.json
このデコードされたsecretは、client-secret.jsonに保存されます。次に、gcloudのコマンドでアカウントを認証します。最初にgcloudツールをアップデートするのは良い方法ですが、あなたのプロジェクトをsetするのを忘れないでください。
gcloud --quiet components update
gcloud auth activate-service-account --key-file ${HOME}/client-secret.json
gcloud config set project $GCLOUD_PROJECT
セキュリティについての考慮
サービスアカウントをCircleCIの環境変数に追加した瞬間からそのビルド環境は認証情報を含み、もしそれが盗まれたのならあなたのプロジェクトを危険にさらす可能性があります。例として、誰かがあなたのプロジェクトのに対して認証情報のprint、もしくはgcloudツールを使った悪意のある行為を行うための変更のPRを作成するかもしれません。幸いなことにCircleCIはPull Requestsで環境変数を設定するようなUIを提供していません。このトピックについてはこちらをご覧ください。