【GCP】Secret Managerを試す
2021/08/26
GCPのサービス内でパスワードやAPIキーなどの機密情報を扱うなら必須のSecret Manager
とりあえず最低限必要な機能を試してみた記録
コマンドラインからシークレットの追加と取得と更新
Secret Manager APIを有効化
$ gcloud services enable secretmanager.googleapis.com
シークレットの追加
secret-sample
という名前で、値はP@ssw0rd
を追加する
$ echo "P@ssw0rd" | gcloud secrets create secret-sample --data-file=-
Created version [1] of the secret [secret-sample].
シークレットの取得
$ gcloud secrets versions access latest --secret='secret-sample'
P@ssw0rd
シークレットの更新(バージョンの追加)
シークレットの更新は、バージョンを追加する
$ echo "p@SSw0RD" | gcloud secrets versions add secret-sample --data-file=-
Created version [2] of the secret [secret-sample].
$ gcloud secrets versions access latest --secret='secret-sample'
p@SSw0RD
過去バージョンのシークレットの取得
latest
の部分を取得したいバージョンに変更(例では1
)
$ gcloud secrets versions access 1 --secret='secret-sample'
P@ssw0rd
Rubyのコードからシークレットの取得
実際に使うのはCloud Functionsだったりのアプリケーション内なので、Rubyのコードからシークレットの取得を試す
サービスアカウントの作成
以下URLからサービスアカウント作成し、「Secret Manager のシークレット アクセサー」のロールを付与する https://console.cloud.google.com/projectselector2/iam-admin/serviceaccounts/create
サービスアカウントキーをダウンロードして、そのパスを環境変数にセットする
$ export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service-account-file.json"
Rubyのコードを作成
Gemfile
source "https://rubygems.org"
gem "google-cloud-secret_manager"
app.rb
require "google/cloud/secret_manager"
client = Google::Cloud::SecretManager.secret_manager_service
name = client.secret_version_path(project: "project-id",
secret: "secret-sample",
secret_version: "latest")
response = client.access_secret_version(name: name)
puts response.payload.data
実行して確認
$ bundle exec ruby app.rb
p@SSw0RD
最後に追加した値が取れている
過去バージョンのシークレットの取得
もちろんバージョンを指定してあげたら過去の値も取得できる
name = client.secret_version_path(project: "project-id",
secret: "secret-sample",
secret_version: "1")
$ bundle exec ruby app.rb
P@ssw0rd