133. SSMパラメータストアは設定と秘密の両方が住める階層的な名前空間である — String/SecureStringと標準/詳細の使い分け
アプリの設定値やDBの接続文字列を、コードに埋め込まず一箇所で管理したい——そのための「名前付きの値の保管庫」であるSSMパラメータストアが、プレーンな設定とKMSで暗号化した秘密をどう同居させ、Secrets Managerとどこで役割を分けるのかを、図で追っていきます。
① 名前付きの値をしまう箱
- 公式定義「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:「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 と、具体パラメータ /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 詳細パラメータ
- 表の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 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」。
- これは公式の位置づけ(パラメータストアのSecureString説明が「secrets such as database credentials, API keys, or tokens は Secrets Manager を推奨」と明記)と一致する。
- 料金の非対称性: Parameter Store標準は無料なので「まず設定はここ」から始め、ローテーションが要るものだけSecrets Managerに払う、という切り分けが自然。
選択は暗記でなく2本の軸で導ける——「変える頻度」と「自動更新の要否」。この2軸は、S3編で見た『暗号化をオプトインにするかデフォルトにするか』という設計思想の分岐(SecureStringは任意/Secrets Managerは常時)と同じ構造で、この編を貫くテーマです。