はじめに
こんにちは、やくもです!
今回はSecrets Managerについて色々まとめてみました。
Secrets Managerとは
Secrets Managerとは、簡単にいうと
パスワードなどの機密情報(シークレット)を管理してくれるAWSのサービスです。
ちなみにコンソールだと、以下のような感じになります。
ここからシークレットの登録をできます。
ここまででお気づきの方もいると思いますが、AgentCore Identityで使用する認証情報もこのSecrets Managerに保存されます。
使うと何が嬉しいか
Secrets Manager を使うことで、アプリケーションにおける 機密情報の扱い を安全かつシンプルにできます。主なメリットをいくつか紹介します。
1. 認証情報をハードコートしなくてよい
API キーやパスワードをソースコードに直接書いてしまうと、
- GitHub などに誤って公開してしまう
- 環境ごと(dev / prod)に切り替えづらい
といったリスクがあります。
Secrets Manager を使えば、
コードには「どのシークレットを取得するか」だけを書き、値そのものは AWS 側で安全に管理できます。
2. 暗号化された状態で安全に保存される
Secrets Manager に保存された値は、自動的に暗号化されます。
暗号化・復号の処理はサービス側で管理されるため、利用者が意識する必要はありません。
「自分で暗号化処理を書く」「鍵の管理をする」といった手間なく、
セキュアな状態をデフォルトで実現できるのが大きなメリットです。
3. シークレットのローテーションを自動化できる
Secrets Manager には シークレットの自動ローテーション機能があります。
- DB パスワードを定期的に変更したい
- 手動更新の運用がつらい
といったケースでも、Lambda と連携して 安全に自動更新できます。
4. AWS サービスと簡単に連携できる
Secrets Manager は Amazon Web Services の各種サービスと相性が良く、
- Lambda
- ECS / Fargate
- EC2
などから SDK や設定だけで簡単に値を取得できます。
やってみる
ここでは、Lambda から Secrets Manager の値を取得する シンプルな例を紹介します。
シークレットの作成
まず、Secrets Managerの画面から、以下のようにシークレットを設定します。
そうすると、以下のように新しいシークレットが作成できたのを確認します。
Lambda関数の作成、シークレットの取得
上でダミーのシークレットをセットできました。
それではLambda関数で実際に取得できるか試してみます。
下のように関数を作成できればすぐにできます。
また、関数の実行ロールに、Secrets Managerに対するポリシーをつけておく必要があります!
import json
import boto3
def lambda_handler(event, context):
client = boto3.client("secretsmanager")
response = client.get_secret_value(
SecretId="sample/secret"
)
secret_string = response["SecretString"]
secret = json.loads(secret_string)
username = secret["username"]
password = secret["password"]
apiKey = secret["apiKey"]
print(f"username: {username}")
print(f"password: {password}")
print(f"apiKey: {apiKey}")
return {
"statusCode": 200,
"body": "success"
}
実行後のログを見ると、以下のようになります。
設定した情報が取得できていることがわかるかと思います。
Parameter Storeとの違い
似たようなサービスにパラメーターストアがあります。
どちらも「値を安全に保存して、アプリケーションから取得する」点は共通していますが、用途と設計思想が少し異なります。
用途を比較してみました。
Secrets Manager が向いているケース
- アプリケーションの設定値
- 環境ごとの定数(URL、フラグなど)
- 秘密ではない or 更新頻度の低い値
Parameter Store が向いているケース
- アプリケーションの設定値
- 環境ごとの定数(URL、フラグなど)
- 秘密ではない or 更新頻度の低い値
漏れたらクリティカルに困るもの、定期的にローテーションすべきものは、Secrets Managerでいいと思います。
逆に、単純な設定値程度だったらParameter Storeで問題ないかと。
さいごに
本記事では、AWS Secrets Manager について簡単に整理しみました。
Secrets Manager を使うことで、
- 機密情報をソースコードから切り離せる
- 暗号化やアクセス制御を意識せず安全に扱える
- 実務でそのまま使える形にしやすい
といったメリットがあることが分かったと思います。
この記事が、
「Secrets Manager を使ってみるきっかけ」
「機密情報管理を見直すヒント」
になれば幸いです。
最後まで読んでいただき、ありがとうございました。





