AWS Secrets Managerとは

目次

1.Secrets Managerとは

Secrets Manager(シークレット マネージャー)は、アプリが使う認証情報をまとめて管理する保管場所です。保存する秘密情報を「シークレット」と呼びます。

例えば、EC2上のアプリがデータベースへ接続するとき、プログラムの中にパスワードを直接書く代わりに、必要なタイミングでSecrets Managerから取得します。

例えるなら:Secrets Managerは「認証情報の金庫」、IAMは「金庫を開けられる人・プログラムの権限」、KMSは「保管データを暗号化する鍵を管理する仕組み」です。

保存しただけで、既存のアプリが自動的に使うわけではありません。アプリ側の取得処理、または対応サービスとの連携設定が必要です。

2. どんな情報を保存する?

情報 例
DBの認証情報 RDS・Aurora・Redshiftなどのユーザー名とパスワード
外部サービスのAPIキー 外部APIにアクセスするための秘密のキー
アプリの認証情報 サービスアカウントのパスワード、OAuthトークンなど

保存する内容のイメージ

シークレット名:prod/app/database。1つのシークレットに、複数の項目をJSON形式でまとめられます。以下は架空の例です。

{
  "username": "app_user",
  "password": "EXAMPLE_ONLY_NOT_A_REAL_PASSWORD",
  "host": "db.example.internal",
  "port": 5432,
  "dbname": "appdb"
}

シークレット名や説明には、パスワードなどの秘密値を入れません。これらはログなどに表示される可能性があります。

3.EC2・Lambdaから使う流れ

  1. ① EC2のIAMロール/Lambdaの実行ロールで認証
  2. ② アプリがSecrets ManagerのAPIに取得要求GetSecretValue
  3. ③ 権限が許可されていれば、復号された秘密値をHTTPSで受け取る
  4. ④ 取得したユーザー名・パスワードでDBに接続

2種類の認証を区別します。

Secrets Managerに対してはIAMロールで認証し、DBに対しては取得したDBユーザー名・パスワードで認証します。EC2やLambdaに、長期のAWSアクセスキーを埋め込む必要はありません。

Secrets Managerが、通常のDB通信を中継するわけではありません。認証情報を取得したあと、アプリはDBへ直接接続します。

4.秘密情報を守る仕組み

仕組み 役割
IAM 誰が、どのシークレットを取得・更新できるかを制御する
AWS KMS 保存する秘密値を暗号化する。AWS管理キー、またはカスタマーマネージドキーを利用する
HTTPS/TLS 取得時などの通信を暗号化する
CloudTrail 取得などのAPI操作を監査する。秘密値そのものを記録するためのものではない

取得の基本権限はsecretsmanager:GetSecretValueです。カスタマーマネージドKMSキーを使う場合は、対象キーのkms:Decrypt権限とキーポリシー側の許可も確認します。

取得を許可されたアプリには、利用可能な秘密値が渡ります。アプリでその値をログに出したり、ファイルに残したりすると漏えいにつながります。暗号化保管と、取得後の取り扱いは両方必要です。

5.パスワードのローテーションとは

認証情報を定期的に新しい値へ更新することです。DBパスワードなら、Secrets Manager内の値と、DB側の実際のパスワードを整合させて更新します。

  • サービスによる管理ローテーション:対応する連携サービスが更新を管理する方式。
  • Lambdaによるローテーション:Lambda関数がシークレットと接続先の認証情報を更新する方式。

方式や対応可否は、保存する情報と連携先によって異なります。外部サービスとの連携にも、対応した管理方式があります。

「保存するだけで自動更新」ではありません。ローテーション設定と接続先の対応が必要です。また、保存値だけを手動変更しても、一般にはDB側のパスワードは変わりません。アプリのキャッシュ更新・再接続も考慮します。

通常の取得では、現在の値を表すAWSCURRENTのバージョンが返ります。直前の値にはAWSPREVIOUSなどのラベルが使われます。

6.利用開始までの基本手順

  1. AWSコンソールでSecrets Managerを開き、利用するリージョンを選ぶ。
  2. 新しいシークレットを保存する操作から、DBの認証情報やその他のシークレットを選ぶ。
  3. ユーザー名・パスワードなどを入力し、暗号化に使うKMSキーを選ぶ。
  4. prod/app/databaseのような名前を付けて保存する。
  5. EC2のIAMロールやLambdaの実行ロールに、対象シークレットの取得権限を付ける。
  6. Secrets Managerと接続先DBへの通信経路を確認する。
  7. アプリに取得処理を組み込み、接続を確認する。必要に応じてローテーションを設定する。

画面の項目名は、シークレットの種類やコンソールの表示によって異なる場合があります。

7.取得するコマンド・プログラム例

AWS CLIから取得

取得権限のあるIAMロールなどで認証済みの環境で実行します。以下はLinuxのシェル用です。

aws secretsmanager get-secret-value \
  --secret-id prod/app/database \
  --region ap-northeast-1 \
  --query SecretString \
  --output text

--secret-idは取得する名前またはARN、--query SecretStringはレスポンスから文字列の秘密値だけを取り出す指定です。

このコマンドはパスワードを含む値を画面に表示します。実行結果を共有したり、ジョブログや画面キャプチャに残したりしないようにします。

Python(EC2・Lambdaなど)から取得 AWS SDK for Python(boto3)を使用する例です。秘密値は表示しません。

import json
import boto3

client = boto3.client("secretsmanager", region_name="ap-northeast-1")
response = client.get_secret_value(SecretId="prod/app/database")
secret = json.loads(response["SecretString"])

# DB接続処理へ渡す。printやログ出力はしない。
db_user = secret["username"]
db_password = secret["password"]
# この後、DBドライバーで接続する

JSON文字列として保存したシークレットを想定した基本例です。本番では、取得失敗時の処理、キャッシュ、ローテーション後の再取得なども設計します。

Secrets ManagerはSQLファイルの保管・実行サービスではありません。EC2でpsqlを使うなら、SQLファイルはEC2やS3などに置き、DBの認証情報をSecrets Managerで管理する構成にできます。

8.VPC・インターネットとの関係

シークレットを作成しても、秘密値がインターネット上に一般公開されるわけではありません。取得には認証と権限が必要です。

利用環境 Secrets Managerへの通信
VPCに接続していないLambda AWSが提供する通信環境からAPIにアクセスできる。自分のVPCエンドポイントは必須ではない
VPC内のEC2/VPC接続Lambda APIへ到達できる経路が必要。Interface VPCエンドポイント、またはNATなどの経路を用意する
インターネット経由を避けたいVPC AWS PrivateLinkを使ったInterface VPCエンドポイントでプライベートにアクセスする

東京リージョンのエンドポイントサービス名はcom.amazonaws.ap-northeast-1.secretsmanagerです。通信はHTTPS(TCP 443)を使い、エンドポイントのセキュリティグループやDNS設定も確認します。

DBへの経路は別途必要です。シークレットを取得できても、DB側のセキュリティグループやルーティングで接続が許可されていなければDBには接続できません。

9.KMS・Parameter Storeとの違い

サービス 主な役割 使う場面
Secrets Manager 秘密情報の保管・取得・ローテーション DBパスワード、APIキーなどのライフサイクル管理
AWS KMS 暗号鍵の作成・管理、暗号化・復号の制御 Secrets ManagerやS3などのデータを暗号化する基盤
Systems Manager Parameter Store 設定値の保管・取得。SecureStringで暗号化も可能 環境名、URL、リソースIDなどの設定管理

Parameter Storeにも秘密値は保存できますが、認証情報の自動ローテーションを含む管理にはSecrets Managerが適しています。KMSは、DBパスワードの保管庫そのものではありません。

10.料金と運用のポイント

主に保存するシークレットの数・期間とAPIリクエスト数に応じて課金されます。構成によって、Lambda、カスタマーマネージドKMSキー、VPCエンドポイントなどの料金も別途発生します。
最新単価はAWS公式料金ページで確認してください。

  • IAM権限は、必要なシークレットと操作に絞る。
  • アクセス頻度が高いアプリはキャッシュを利用し、取得回数と遅延を抑える。
  • キャッシュの有効期間と、パスワード更新後の再取得方法を決める。
  • CloudTrailで取得・変更などの操作を確認する。
  • 秘密値をソースコード、Git、ログ、SQLファイルに直接残さない。

関連の記事

AWS KMSとは

△上に戻る