AWS Secrets Managerを活用してローカルシークレットをうまく管理する方法
2023年9月23日
会社でローカルにシークレットを共有するうちに、Slackやカカオトークのようなメッセンジャーを通じてシークレットをやり取りすることがしばしばある。
理由はしばしば次のようになる
- 変更事項に対処するために既存のローカルシークレットを更新しなければならない場合
- 新規入社時に初期シークレットを設定しなければならない場合
このような方法は、メッセンジャーという共有チャンネルにシークレットに関する機密情報が残ったり、さまざまなセキュリティ面で良くないと感じた。
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をセットアップする必要がある。
- 実際にconfigをセットアップする際にはローカルで動作可能なconfigをセットアップする必要がある。
- シークレット名、説明を入力する。シークレット名はその後のプロセスでcliプログラムで選択するキー・バリューになるため、よく記憶しておく。
- 設定したシークレットを定期的に他のシークレットに置き換えるかどうかに関する部分。筆者は別途この機能を使用しないと仮定したため、設定しなかった。
- 次のステップで保存ボタンを押すとシークレットが生成される。
- まず、Secrets Managerに入り、設定をセットアップする。該当欄で「新しいシークレットを保存」を選択。
全体的な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