GCPのSecret Managerを試した


背景

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 のシークレット アクセサー」を無条件で付与しているため
プロジェクト内で定義されているすべてのシークレットにアクセスできてしまいます。

権限付与時に条件を絞ることもできますが、うまく設定することができず…。

まとめ

簡単に使うことはできましたが
このままではセキュリティ上本番では使い難いので、もう少し検証が必要です。