AWS Secrets Managerを活用してローカルシークレットをうまく管理する方法

AWS Secrets Managerを活用してローカルシークレットをうまく管理する方法

2023年9月23日

image

会社でローカルにシークレットを共有するうちに、Slackやカカオトークのようなメッセンジャーを通じてシークレットをやり取りすることがしばしばある。

理由はしばしば次のようになる

  1. 変更事項に対処するために既存のローカルシークレットを更新しなければならない場合
  2. 新規入社時に初期シークレットを設定しなければならない場合

このような方法は、メッセンジャーという共有チャンネルにシークレットに関する機密情報が残ったり、さまざまなセキュリティ面で良くないと感じた。

AWS Secret Generator

そこで作った。Golangで制作した簡単なCLIツールで、AWS Secrets Managerに保管されているシークレットを簡単なCLIを通じて取り出し、ローカルにファイルの形で取り込むことができる。

使い方

準備

  • AWS Access Key ID、AWS Secret Access Keyは事前に共有されていることを仮定する。

  • AWS Secrets Managerセットアップ

    • まず、Secrets Managerに入り、設定をセットアップする。該当欄で「新しいシークレットを保存」を選択。
    • シークレットタイプを選択する。筆者は複数の設定が含まれる複合的な形のconfigをセットアップするシナリオを考慮して他のタイプのシークレットを設定した。(AWSに関連するサービスの特定のシークレットを設定したい場合は、他のタイプのシークレットを選択しても良い。)
    • プレーンテキスト形式をタップし、現在使用しているローカルシークレットのファイルをコピーアンドペーストして生成する。
      • キー・バリュー・ペアを使用してJSON形式で強制する方法ももちろん可能だ。
      • 筆者はyaml形式で「hello: world」のような単純なシークレットを使うと仮定した。
        • 実際にconfigをセットアップする際にはローカルで動作可能なconfigをセットアップする必要がある。
    • シークレット名、説明を入力する。シークレット名はその後のプロセスでcliプログラムで選択するキー・バリューになるため、よく記憶しておく。
    • 設定したシークレットを定期的に他のシークレットに置き換えるかどうかに関する部分。筆者は別途この機能を使用しないと仮定したため、設定しなかった。
    • 次のステップで保存ボタンを押すとシークレットが生成される。
  • 全体的なCLIインストールは次のリポジトリの説明に従う。

  • aws-secret-genを使用する

    • コマンドラインに次のように入力する。
    $ aws-secret-gen -o test-config.yaml{保存するファイルパス}
    • すると次にAWS Access Key IDとSecret Access Key、Regionを設定する画面が表示される。
      • 事前に準備したキーとリージョンを入力する。
      >  Enter AWS Access Key ID: {準備したAWS Access Key ID}
      >  Secret AWS Secret Access Key: {準備したAWS Secret Access Key}
      >  Enter AWS Region: {AWS Regionキー: ソウルの場合ap-northeast-2}
    • 以降、シークレットリストが表示される。自身が生成したシークレットを取り込む。
    Use the arrow keys to navigate: ↓ ↑ → ←
    ? Select Secret:
    	...
      ▸ test-config
    • エンターを押すと自身が設定したパスにシークレットがうまく生成されたことを確認できる。
    $ cat ./test-config.yaml
    > hello: world