背景
Google Cloud Secret Manager のご紹介 で新機能※ベータの公開を知りました。
従来は都度KMSで復号したりするのが辛かったので
簡単に扱えるようになったら嬉しいと思って試用してみました。
やったこと
下準備
基本的にはサービスからアクセスさせる想定なので、今回はサービスアカウントを作成しました。
「Secret Manager のシークレット アクセサー」の権限をつけておきます。
参考: シークレット マネージャーの役割
サービスアカウントの発行時にjsonでキーを発行し、読み込んでおきます。
環境変数でクレデンシャルを設定
export GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_account_key.json"
シークレットの作成
シークレットの取得
サンプルコードを参考に、node.jsのスクリプトから取得します。
ライブラリを読み込む実行ファイルの準備
$ mkdir secret-manager-test
$ cd secret-manager-test
$ npm init -y
$ npm install @google-cloud/secret-manager
$ touch index.js
index.js
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
const client = new SecretManagerServiceClient();
async function accessSecretVersion() {
const [version] = await client.accessSecretVersion({
// バージョンは'latest'で最新バージョンを参照することも可能
name: 'projects/{my-project}/secrets/TEST_API_KEY/versions/1',
});
const payload = version.payload.data.toString('utf8');
console.info(`Payload: ${payload}`);
}
accessSecretVersion();
実行するとシークレット作成時に定義した値が表示されます。
実行
$ node index.js
Payload: this is secret key
解決できず
現状は「Secret Manager のシークレット アクセサー」を無条件で付与しているため
プロジェクト内で定義されているすべてのシークレットにアクセスできてしまいます。
権限付与時に条件を絞ることもできますが、うまく設定することができず…。
まとめ
簡単に使うことはできましたが
このままではセキュリティ上本番では使い難いので、もう少し検証が必要です。