LoginSignup
17
10

More than 5 years have passed since last update.

GCPの新しいシークレット管理ツール、Berglasを使ってみる

Posted at

BerglasはGoogleが先日公開した、GCP向けの新しいシークレット管理ツールです。

内部的にはCloud KMSとCloud Storageが使われているみたいですね。

GKE、Cloud Functions、Cloud Build、Cloud Run等から比較的簡単に、登録した秘匿情報を取得することができそうです。

セットアップ

gloudコマンドの導入や、アカウントの認証などは完了している前提で進めます。

BerglasはGoのパッケージとして動作するので、まずはこちらをインストールします(Goの環境構築に関しての説明は省きます)。

go get github.com/GoogleCloudPlatform/berglas/...
go install github.com/GoogleCloudPlatform/berglas

また、公式のDockerImageも公開されているようなので、普段Goを使わない場合はこちらを利用した方が良いかもしれません。

docker pull gcr.io/berglas/berglas:latest

Berglasを使いたいプロジェクトで、必要なAPIを有効化します。

gcloud services enable --project プロジェクトID \
  cloudkms.googleapis.com \
  storage-api.googleapis.com \
  storage-component.googleapis.com

Berglasの初期化処理を行います。シークレット情報はGCSに保管されるので、新しく作成されるGCSのbucket名を指定します。

berglas bootstrap --project プロジェクトID --bucket bucket名

最低限のセットアップはこれだけですね。

Cloud Buildのサンプル

Cloud buildを使ったサンプルを試してみます。作るのは、Berglasで登録したシークレットをCloud build内で標準出力するだけのものです。

secretの登録

シークレット情報を登録します。何らかのAPIキーを想定した、api-keyと言うkeyで登録してみます(bucket-nameproject-idの部分は適宜置き換えて下さい)。

berglas create bucket-name/api-key 登録したいシークレット --key projects/project-id/locations/global/keyRings/berglas/cryptoKeys/berglas-key

Successfully created secret: api-keyと表示されれば、登録完了です。

サービスアカウントへの権限付与

登録したシークレットを読み込むためには、各サービスアカウントやユーザーに紐付ける必要があります。今回はCloud Buildで使いたいので、Cloud Buildのサービスアカウントに紐付けました。

berglas grant bucket-name/api-key --member serviceAccount:CloudBuildのサービスアカウントアドレス

cloudbuild.yamlの作成

cloudbuild.yamlを書いていきます。

steps:
- id: berglas
  name: gcr.io/berglas/berglas
  env:
  - API_KEY=berglas://bucket-name/api-key?destination=/secrets/api-key
  args: ["exec", "--local", "--", "/bin/sh"]
  volumes:
  - name: secrets
    path: /secrets
- name: 'ubuntu'
  args: ['cat', '/secrets/api-key']
  volumes:
  - name: secrets
    path: /secrets

berglasステップとubuntuのステップでボリュームを共有し、共有ボリューム以下にシークレット情報を書き出したファイルを出力すると言う構成です。ちょっと回りくどいのでもっと簡単な方法で実現したいですね。

cloudbuildにあげてみて、登録したシークレット情報が出力されれば成功です。

gcloud builds submit --project project-id

実行結果

~中略~
Finished Step #1
PUSH
DONE
Step #1: 登録したシークレット

他の環境での実行に関して

GKEとの統合

GKEに立てたPod内から利用することもできるようですが、準備が若干大変そうです。GKEに関しては今の所k8sのsecretで間に合ってるので、今回は検証しませんでした。

Cloud Functions

Functionsに関しては、今の所Goしかサポートしていないようです。

Cloud Run

最近追加されたCloud Runに関しても、早速対応しています。Go、Node、Python、Rubyのサンプルがありました。

最後に

イメージ的にはCloud KMSのラッパーと言った感じなのでしょうか(KMSについてそれほど詳しくない・・・)。
個人的にGKEだとsecretリソースで割りと間に合ってる感じですが、Cloud BuildやCloud Runで比較的簡単に秘匿情報が扱えれば便利かも?

17
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10