Secrets Managerで認証情報を管理する

記事タイトルとURLをコピーする

CI部の鎌田です。 Secrets Manager、もうお使いでしょうか。 Secrets Managerを利用することで、データベースへの接続情報をプログラムで保持せずとも良くなりアプリケーションの保守性が良く出来る他、認証情報の定期的な更新なども行うことが出来る便利なサービスです。

データベースへのアクセス情報を管理できるのが大きなポイントですが、アプリケーションが利用する認証情報を保持しておくことも可能です。 このブログでは、アプリケーションで利用するような認証情報を保持しておく方法をご案内します。

利用方法

まずはマネジメントコンソールで、Secrets Managerにアクセスします。 トップページに、「新しいシークレット情報を保存する」というリンクがありますのでクリックします。

f:id:swx-kamata:20210629215338p:plain

ウィザードが始まります。 今回はデータベース以外の認証情報を保存するので、「その他シークレット」を選択します。(1) その他シークレットを選択すると、シークレットのキーと値を保存するテキストボックスが表示されるので、それぞれに値を入れます。(2)

その次に保存される際に暗号化されるのですが、暗号化する時のキーを選択します。 デフォルトの"DefaultEncryptionKey"でも問題ありません。 (3)

選択・入力が終わったら、「次」をクリックします。(4)

f:id:swx-kamata:20210629220059p:plain

シークレットに名前を付けます。後ほど、認証情報の呼び出しで使います。 (1) 設定できたら「次」をクリックします。 (2)

f:id:swx-kamata:20210629215625p:plain

自動ローテーションの設定になります。 自動更新しない場合は「無効にする」を選択して(1)、「次」をクリックします。(2)

f:id:swx-kamata:20210629215741p:plain

確認画面になるので、一番下にある「保存」をクリックします。

f:id:swx-kamata:20210629215813p:plain

作成したシークレット情報が保存されます。

f:id:swx-kamata:20210629215832p:plain

保存した情報を呼び出す方法(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'] )

実際に下記のような形で、保存した情報が取得できます。

f:id:swx-kamata:20210629220534p:plain

まとめ

いかがでしたでしょうか。 Secrets Managerを使うことで、認証情報をプログラムに直接持たなくても良い形にすることが可能です。 追加するコードもそこまで多くないため、認証情報の保存でお悩みの際は、是非検討・実装されてみてください!

通称、認証認可おじさん・Windowsおじさん。PowerShellと認証技術が好物ですが、OSはLinuxが好きです。 AWSドキュメントでは言及されていないようなことや、理解を補助するような内容の執筆を心掛けています。