【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@ssw0rdRubyのコードからシークレットの取得
実際に使うのは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