CI部の鎌田です。 Secrets Manager、もうお使いでしょうか。 Secrets Managerを利用することで、データベースへの接続情報をプログラムで保持せずとも良くなりアプリケーションの保守性が良く出来る他、認証情報の定期的な更新なども行うことが出来る便利なサービスです。
データベースへのアクセス情報を管理できるのが大きなポイントですが、アプリケーションが利用する認証情報を保持しておくことも可能です。 このブログでは、アプリケーションで利用するような認証情報を保持しておく方法をご案内します。
利用方法
まずはマネジメントコンソールで、Secrets Managerにアクセスします。 トップページに、「新しいシークレット情報を保存する」というリンクがありますのでクリックします。
ウィザードが始まります。 今回はデータベース以外の認証情報を保存するので、「その他シークレット」を選択します。(1) その他シークレットを選択すると、シークレットのキーと値を保存するテキストボックスが表示されるので、それぞれに値を入れます。(2)
その次に保存される際に暗号化されるのですが、暗号化する時のキーを選択します。 デフォルトの"DefaultEncryptionKey"でも問題ありません。 (3)
選択・入力が終わったら、「次」をクリックします。(4)
シークレットに名前を付けます。後ほど、認証情報の呼び出しで使います。 (1) 設定できたら「次」をクリックします。 (2)
自動ローテーションの設定になります。 自動更新しない場合は「無効にする」を選択して(1)、「次」をクリックします。(2)
確認画面になるので、一番下にある「保存」をクリックします。
作成したシークレット情報が保存されます。
保存した情報を呼び出す方法(Python3)
マネジメントコンソールにもPythonのサンプルコードもありますが、サンプルコードのままだとStringでの情報取得になってしまうため、下記のコードの通りdict型に変換して取り出すことをお勧めします。 こちらで、secretの変数にdict型で設定したシークレット情報が取り出すことができます。
import boto3 import base64 import ast from botocore.exceptions import ClientError secret_name = "先程名前を付けたシークレット名" region_name = "ap-northeast-1" session = boto3.session.Session() client = session.client( service_name='secretsmanager', region_name=region_name ) get_secret_value_response = client.get_secret_value( SecretId=secret_name ) secret = ast.literal_eval( get_secret_value_response['SecretString'] )
実際に下記のような形で、保存した情報が取得できます。
まとめ
いかがでしたでしょうか。 Secrets Managerを使うことで、認証情報をプログラムに直接持たなくても良い形にすることが可能です。 追加するコードもそこまで多くないため、認証情報の保存でお悩みの際は、是非検討・実装されてみてください!