高木のブログ

【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

参考


Written by ytkg, Twitter, GitHub

Pixela