はじめに
エキサイトホールディングス Advent Calendar 2021の12日目は、エキサイト株式会社の吉川が担当させていただきます! 今回は、AWSのシークレット情報管理サービスの1つである AWS Secrets Manager について触れていきます!
AWS Secrets Managerでできること
アプリケーションを構築する上で、DBにアクセスするためのユーザー名やパスワードは特に慎重に取り扱う必要があります。またアプリケーション内でAWS外部のサービスにアクセスする場合も同様で、その外部サービスにアクセスするためのパスワード等は管理に気を使う必要があります。
AWS Secrets Manager(以下AWSは省略します)はこれらのシークレット情報をセキュアに管理・共有するためのサービスです。例えば以下のような流れで利用することができます。
- Secrets Managerにパスワードを保存
- アプリケーション側はまずSecrets Managerにアクセスしてパスワードを取得
- 取得したパスワードを用いてアプリケーションからDBにアクセスする
アプリケーションのソースコード等とパスワードが切り離されるので、よりセキュアに運用することができるのです。
それパラメータストアでよくね?
はい。上記の説明でそう感じた方もいるのではないかと思います(というか自分がそうでした)。AWSには パラメータストア というサービスがあり、Secrets Managerと同じくセキュアにパスワードなどを管理できます。ということで両者の違いは何なのか、使ってみて比べてみました。
違い1: キーと値のペアで保存する
パラメータストアでは1つのパラメータにつき1つ以上の「値」が設定でき、Secrets Managerでは1つのシークレットにつき1つ以上の「キーと値のペア」が設定できます。図にすると以下のような違いになります。
# パラメータストア パラメータA └値a └値b # Secrets Manager シークレットA └キーa - 値α └キーb - 値β
例えばDBの「ユーザー名」と「パスワード」を1つのパラメータ/シークレット内で保存したい場合、パラメータストアでは、この2つをどの順番で保存するか意識する必要があります。Secrets Managerではキー名にname
やpassword
などを設定しておけば順番問わず区別できるので、ちょっと楽ができそうです。
違い2: 認証情報の自動更新ができる
公式ドキュメントに詳しく書いていますが、標準でAmazon RDS、Amazon DocumentDB、Amazon Redshiftの認証情報の更新をサポートしています。こまめにパスワードを変更することはセキュリティ上有効な手段ですが、手動で更新することは結構面倒なので(大きなアプリケーションになると実質不可能だと思います)、これを自動で行ってくれるのはありがたいですね。パラメータストアにはこの機能はなく、LambdaなどからAPIを使って更新する必要があります。
違い3: 料金
パラメータストアは基本的に無料(パラメータ数の上限あり)ですがSecrets Managerは保存とAPIコールに料金がかかります。料金表はこちら。
実際に作ってみた
マネジメントコンソールからポチポチで作ってみました。今回は簡単のため「その他のシークレットのタイプ」で作成します。AWS外部のサービスのシークレット情報はこちらの方法で保存できます。
シークレットの中身になる、キーと値のペアを作成します。プレーンテキストではJSON形式で複数のペアを一気に作成できるので、コピペで作る場合はこちらを選ぶと良いです。
シークレットの名前を設定します。どういった名前でも良いのですが、パラメータストアに倣いスラッシュ区切りでつけておくのがわかりやすいかもしれません(個人的な感想です)。
「その他のシークレットのタイプ」でもLambdaを使って自動更新の設定をすることができます。今回は単に作るだけなので、割愛させていただきます。
あとはタグなどの任意の情報を設定して完了です! 作成したシークレットは以下のように確認できます。
おわりに
いかがだったでしょうか?個人的にはRDSの認証情報の自動更新が魅力的でした。パラメータストアと状況に応じて使い分けたいところですね。
それでは明日以降のアドベントカレンダーも引き続きお楽しみください!
https://qiita.com/advent-calendar/2021/excite-hd
弊社採用情報はこちらからどうぞ!