✅ 概要
TerraformでAWSリソースを構築する際に、コード内に秘匿情報(APIキーやDBパスワードなど)を残さないようにすることは非常に重要です。
AWS環境では、こうした秘匿情報を SSM Parameter Store の SecureString や Secrets Manager に保存することで安全に管理できます。
この記事では、Terraformを使ってSSM Parameter Storeに秘匿情報を保存する方法を解説します。特に、コード上に秘匿情報を含めない設計方法に注目し、SEOを意識したキーワードで分かりやすく紹介します。
✅ SSM Parameter Storeを使った秘匿情報管理のポイント
- コード上に秘匿情報を記載しない。
- SSM Parameter Storeに設定後、AWSコンソールやCLIで値を変更する設計。
lifecycleブロックを活用してTerraform管理から除外する。
✅ TerraformでのSSM Parameter Store定義方法
📌 コード例
locals {
env = "dev"
# Parameter Storeのデフォルト値
default_value = "uninitialized"
}
# DatadogのAPI KEY
resource "aws_ssm_parameter" "datadog_api_key" {
name = upper("/${local.env}/datadog-api-key")
description = "Terraform used Datadog API Key"
type = "SecureString"
value = local.default_value
lifecycle {
ignore_changes = [value]
}
}
🔍 コードの解説
localsブロックでデフォルト値を定義:
- 秘匿情報をコード内に含めないために、
uninitializedというダミー値を設定。
aws_ssm_parameterリソースでSSM Parameter Storeを定義:
nameは環境変数 (local.env) を使い階層化。typeはSecureStringで暗号化を指定。valueはlocal.default_valueを参照。
lifecycleブロックでvalueを無視設定:
- この設定により、Terraform適用 (
apply) 後にvalueを変更してもエラーが発生しない。
※個人的には、`__dummy__value__`みたいに直接valueに指定した方が見やすいケースがあります。
✅ TerraformでApplyを実行
以下のコマンドを実行してSSM Parameter Storeに値を適用します。
terraform apply -auto-approve
- デフォルト値 (
uninitialized) がAWS上に保存される。 - 暗号化 (
SecureString) が適用されていることを確認。
✅ 設定後の確認方法
🔍 マネージドコンソールで確認する場合
- AWS Management Console にアクセス。
- Systems Manager > Parameter Store を選択。
- 対象のパラメータを選択し「編集」から値を変更。
🔍 CLIで値を変更する場合
aws ssm put-parameter --name '/dev/datadog-api-key' \
--type SecureString \
--value '新しい値' \
--overwrite
✅ この方法を使う理由
- コード内に秘匿情報を保持しない: セキュリティリスクを大幅に軽減できる。
- Terraformによる管理がシンプル:
lifecycleブロックで管理対象外にすることで、適用後に値を変更してもエラーを回避できる。 - AWS SSM Parameter Storeの活用: AWS標準の暗号化機能を利用することで、安全に情報を保護できる。
✅ まとめ
TerraformでSSM Parameter Storeを使って秘匿情報を管理する方法について解説しました。この方法を利用することで、コード内にパスワードやAPIキーを直接記載せずに安全に管理することができます。
組織やプロジェクトに合わせてこの方法を取り入れ、安全なインフラ管理を実現しましょう。

