#AWS Secrets Managerとは
データベースの認証情報や、パスワードなどの任意のシークレット情報をAPIコールで取得できるためのAWSサービスの一つです。
各サーバからこのAPIを叩くことでシークレット情報を取得でき、認証やサーバセットアップに利用できます。
#何がメリット?
AWS Secrets Managerを利用する一番のメリットはアプリケーションにシークレット情報を保存する必要がなくなることです。
従来では、例えばデータベースにアクセスするためのパスワードの場合、パスワードをアプリケーションに保存しておき、データ処理をする場合にその情報を利用するという方法が一般的でした。
この方法の場合、認証情報を更新する場合などパスワードをアプリケーションに埋め込んでいる全ての箇所を更新する必要があり、認証情報更新のリスクもコストも高かったのです。。そうなるとパスワードが長期の間更新されず、セキュリティ観点でみるとあまり良いとは言えません。
また、アプリケーションに認証情報を書くことでgithubのようなバージョン管理ツールからパスワードを参照することが可能になってしまいます。
リポジトリにアクセス権のある開発ベンダー会社等からセンシティブな情報がある本番DBに接続できるパスワードを参照できてしまったり、不慮の事故でリポジトリが公開されてしまった場合などに情報漏洩のリスクが発生してしまいます。
AWS Secrets Managerを利用することでこれらの情報をアプリケーションに保存する必要は無いのでこれらの心配はなくなります。
#シークレット設定方法
まず、シークレット情報の登録を行います。
AWSコンソールでSecretsManagerを開きましょう。
1.シークレットの種類を選択
「その他」を選択することでただのテキスト情報等も登録可能なのでssh keyなどであっても登録可能です。
2.シークレットの名前設定
/区切りで分かりやすい名前を付けましょう。
ここで設定した名前がAPIで取得する際に必要になります。
3.自動ローテーションを設定
データベースの認証情報を自動的に更新する設定が可能です。
この設定をすることによってSecrets Managerは自動的にRDSの認証情報を更新させることができます。(便利すぎ)
RDS以外のサービスにおいてもデータベースまたはサービスと連携するようにカスタマイズできる Lambda 関数を設定してやることでシークレットの自動更新設定を導入することが可能になっています。
#シークレット取得方法
keyを取得するAPIの文法です。
結果はJSONで返ってきます。
#regionと2で設定したシークレットの名前を利用しAPIコール
aws secretsmanager get-secret-value --region ${REGION} --secret-id ${SECRETS_ID}
#下記jqコマンドと併せて利用することでキーの値のみを取得可
aws secretsmanager get-secret-value --region ${REGION} --secret-id ${SECRETS_ID} | jq -r .SecretString
ちなみにAPIの料金は下記の通りです。
とても簡単!
10,000 件の API コールあたり0.05USD。
AWS公式サイト
AWS基盤を用いているのにSecretsManagerを利用していない方はこちらの利用をご検討してみてはいかがでしょうか!