2019/11/01

windowsの git bash で、GCP のサービスアカウントを使って google cloud source repositories を使う

【やりたいこと】
  • windows の git bash を使う
  • git のリポジトリは google の cloud source repositories を使う
  • 認証は GCP のサービスアカウントを使う

【できたこと】
  • git bash から source repositories を使うことができた
  • GCPの認証は google cloud sdk (gcloud) を使って通した
    • よって、SDKのインストールが必要


【目論み】

日ごろから、ローカルにはデータをできるだけ置かないとか、GCP の project の中だけで分析作業を完結させたいとか言ってますが、一方でローカルアプリの便利さにはまだ敵わない部分もあって、現状ではまだ完全クラウドとは行きません。特に開発環境はローカルアプリの方がまだまだ強くて、例えばインテリセンスとか、レスポンスのレイテンシとか、全てをリモートで実施するにはもうちょっとハードルがあります。

ということで、最終的にはGCP上で動かすアプリケーションをローカルの開発環境で作っているわけですが、作る作業自体はwindowsのローカルアプリを使いたい、よって、ソースコードをローカルとリモートでやりとりするために、gitを使おうと思います。そして、最後はGCPなので、リポジトリを置く場所は cloud source repositories にすると、windowsのgitからGCPのリポジトリにアクセスすることになります。

ここで、GCPへのアクセスは、普段はアカウントにログインしたchromeから様々な操作をしているわけですが、ローカルアプリにその権限を渡してしまうのはセキュリティの都合上ちょっと避けたいので、GCPのIAMでサービスアカウントを作成し、それを経由してリポジトリにアクセスさせようと思います。

【困難】

さて、そう思って方法をいろいろググったのですが、なかなか出てきませんでした。

本当は、ローカルマシンにgoogle cloud SDK をインストールしたくなかったのですが、それをインストールせずにサービスアカウントで認証する方法が見つからず断念。(私の探し方が下手なだけかも。)google の公式ドキュメントでも、SDKを使わずに認証する方法としては、ブラウザでの認証(サービスアカウントではなく、ユーザーアカウント)で認証する方法は載っているのですが、これだとユーザーアカウントでの認証になってしまいます。結局、cloud SDKをインストールしないという点は諦めて、cloud SDK をインストールするけれど、サービスアカウントの情報しか渡さないという方法で認証を通すことにしました。

【結果】

まず、サービスアカウントのクレデンシャルを入手。GCPのIAMで作成します。 クレデンシャルはローカルに保存。

次に、ローカルにcloud SDKをインストール。windows用のモノ。また、git bash が入っていなければインストール。
 
power shell でgcloud コマンドが使えることを確認した後、git bash から

gcloud auth activate-service-account --key-file [KEY_FILE]

で、[KEY_FILE] のところに上で入手したクレデンシャルのファイル名を記入。これで、サービスアカウントでの認証が完了。

これで git bash からsource repositories にアクセスできるようになりましたので、例えば

git clone https://source.developers.google.com/p/(proj.name)/r/(repo,name)

などで source repositories と交信できます。


【ローカルアプリ】

windowsのローカルアプリでgitが使えるモノについては、ここまで通してあればあとは勝手にgitの認証を使い始めますので、gitと繋ぐだけでほぼOKではないでしょうか。


【ついでに、GCEでsource reposを使う】

GCEでsource reposを使うのはもっと簡単です。やることは、

  • インスタンス作成時のオプションに、「IDとAPIへのアクセス」があるので、その中の「Cloud Source Repositories」の項目を必要に応じて合わせる。
    • これを忘れて、認証が通らなくて困ることがよくあるようです。
  • (gitが入っていなければ、gitのインストール)
  • gitに認証方法をおしえてあげる
    • git config --global credential.helper gcloud.sh
    • projectの腹の中なので、ここはサービスアカウントでなくて十分
  • cloneする
    • gcloud source repos clone (repo name)
    • プロジェクト名は省略可。