Dev Study
AWSサービスの内部原理 コース

133. SSMパラメータストアは設定と秘密の両方が住める階層的な名前空間である — String/SecureStringと標準/詳細の使い分け

アプリの設定値やDBの接続文字列を、コードに埋め込まず一箇所で管理したい——そのための「名前付きの値の保管庫」であるSSMパラメータストアが、プレーンな設定とKMSで暗号化した秘密をどう同居させ、Secrets Managerとどこで役割を分けるのかを、図で追っていきます。

① 名前付きの値をしまう箱

アプリのコード
1つの「名前」に1つの「値」を対応づける
Parameter Storecentralized configuration data store for named values
実行時に取得コードは名前で問い合わせ、値そのものは持たない
値を更新しても without code changes or redeployments
  • 公式定義「Parameter Store is a centralized configuration data store for named values called parameters.」パラメータとは「a block of text, a list of names, an AMI ID, a license key」のような任意のデータ。
  • 値の更新はコード変更・再デプロイなしで反映できる(Centralized configuration updates)。

パラメータストアの本質は「値をコードから引き剥がし、名前で参照させる」こと。DynamoDB編でキー(名前)と値を分離したのと同じ発想を、アプリの設定に適用した道具です。

② 3つの型

Stringプレーンな単一の値
環境名/エンドポイント/リソースID
StringListカンマ区切りの複数の値
subnet-123abc,subnet-456def,subnet-789ghi
SecureString暗号化オプトイン
サービスエンドポイント/アカウント識別子等
AWS KMS値を暗号化して保存
  • String:「plain text values, such as environment names, endpoint URLs, or resource identifiers」。
  • StringList:「a comma-separated list of plain-text values」。公式の例がそのまま subnet-123abc,subnet-456def,subnet-789ghi。
  • SecureString:「Parameter Store encrypts the values using AWS Key Management Service.」——暗号化はこの型を選んだ場合のみ(オプトイン)。
  • 注記(現行ドキュメント): DBの認証情報・APIキー・トークンのような secrets についてはパラメータストアではなくSecrets Managerが推奨(自動ローテーションやクロスリージョンレプリケーションを持つため)。SecureStringは設定寄りの機密値(エンドポイント・アカウント識別子など)の暗号化に位置づけられている。

3つの型のうち暗号化されるのはSecureStringだけ——「暗号化するかどうかを型の選択として明示する」という、オプトイン方式の設計です。

③ スラッシュで切る名前空間

命名規約/env/computer-type/app/data
環境・OSで枝分かれ
/dev/webserver/linux/approved-ami
/dev/webserver/windows/approved-ami
GetParametersByPath("/dev/webserver")配下のweb serverパラメータを全部
GetParametersByPath("/dev/webserver/linux")Linuxのイメージパラメータだけ
  • 公式の命名規約例 /env/computer-type/app/data と、具体パラメータ /dev/webserver/linux/approved-ami・/dev/webserver/windows/approved-ami はドキュメントの記載そのまま。
  • パス /dev/webserver を指定すると配下の全パラメータ、/dev/webserver/linux ならLinuxのイメージパラメータだけを取得できる(Hierarchical parameter management)。
  • IAMもパス単位で効く: 例「/myapp/prod/* は読めるが /myapp/dev/* は読めない」ロールが書ける。

スラッシュ区切りで名前空間を作り、パス指定で配下をまとめて取得する——これはS3のプレフィックス(疑似フォルダ)やDynamoDBのパーティション設計と同じ「区切り文字で名前空間を組み立てる」発想の繰り返しです。1つの環境(dev/prod)や1つのアプリを単位に、設定を束ねて扱えます。

④ 標準 vs 詳細パラメータ

最大パラメータ数アカウント×リージョンあたり
標準: 10,000
詳細: 100,000
値の最大サイズ
標準: 4 KB
詳細: 8 KB
ポリシー・アカウント間共有・料金
標準: 非対応/非対応/無料
詳細: 対応/対応/課金あり
標準→詳細は昇格可詳細→標準は降格不可(not downgradeable)
  • 表の6項目はすべて現行ドキュメント記載どおり: 最大数10,000/100,000、値サイズ4KB/8KB、パラメータポリシー非対応/対応、アカウント間共有非対応/対応、料金追加料金なし/課金あり。標準と詳細は同一アカウント・リージョンに混在可(例: 詳細100,000 + 標準10,000)。
  • パラメータポリシー = 有効期限や、一定期間ローテーションされていないときの通知を設定できる仕組み(Events and notifications)。
  • 標準→詳細への昇格は可能、詳細→標準への降格は不可。理由は公式に3つ: ①値が8KB→4KBに切り詰められデータ損失が起きる ②パラメータに付いたポリシーが失われる ③「Advanced and standard parameters use a different form of encryption.」(詳細と標準は暗号化の形式が異なる)。降格したいときは削除して標準として作り直す。

迷ったら標準(デフォルト)。より大きな値・ポリシー・アカウント間共有・高い上限が要るときだけ詳細へ昇格する——そして詳細から標準へは戻せない、という一方通行を覚えておきます。

⑤ Secrets Managerとの3点比較

Parameter StoreSecureString選択時のみKMS(オプトイン)
Secrets Manager常にKMSで暗号化
軸2: 自動ローテーション
Parameter Store組み込み機能なし(None)
Secrets Managerネイティブ対応+DB統合
create→set→test→finishの4ステップ
Parameter Store標準=無料/詳細=課金
Secrets Managerシークレット単位(月額)+API呼び出し数
  • 暗号化: Parameter Storeは「Optional with SecureString and AWS KMS」、Secrets Managerは「AWS KMS encryption at rest with an AWS managed or customer managed key」(常時)。
  • ローテーション: Parameter Storeは「Credential rotation: None」、Secrets Managerは「Automatic, with native database integrations」。ローテーションの内部の4ステップ(createSecret→setSecret→testSecret→finishSecret)は前のメッセージング/Secrets Managerレッスン参照。
  • 料金: Parameter Storeは「Standard tier free; advanced tier and higher throughput billed」、Secrets Managerは「Billed per secret per month and per API call」。

3つの軸すべてでSecrets Managerは「常に暗号・自動更新あり・その分有料」、Parameter Store(標準)は「暗号は任意・自動更新なし・無料」。この差がそのまま次の判断軸になります。

⑥ 締めの原則

変更頻度が低い設定値接続文字列・エンドポイント
Parameter Store標準/無料/自動更新なしでよい
対して
定期的に変える認証情報DBパスワード等
Secrets Manager課金/自動ローテーションが要る
  • 原則:「変更頻度が低く自動更新が要らない設定値・接続文字列はParameter Store、定期的に値を変えるべき認証情報(DBパスワード等)はSecrets Manager」。
  • これは公式の位置づけ(パラメータストアのSecureString説明が「secrets such as database credentials, API keys, or tokens は Secrets Manager を推奨」と明記)と一致する。
  • 料金の非対称性: Parameter Store標準は無料なので「まず設定はここ」から始め、ローテーションが要るものだけSecrets Managerに払う、という切り分けが自然。

選択は暗記でなく2本の軸で導ける——「変える頻度」と「自動更新の要否」。この2軸は、S3編で見た『暗号化をオプトインにするかデフォルトにするか』という設計思想の分岐(SecureStringは任意/Secrets Managerは常時)と同じ構造で、この編を貫くテーマです。

公式ドキュメントで詳しく ↗