起動設定のユーザーデータ内にある Base64 形式の秘密鍵の確認

Base64 エンコードでは秘密鍵を保護できません。EC2 のユーザーデータから実際の秘密鍵を取り除いてください。

説明

user_data_base64 に秘密鍵を入れると、コード、Terraform の状態、インスタンスのユーザーデータにシークレットが残る可能性があります。Base64 は暗号化ではなくエンコードなので、値を読める人は元の内容を復元できます。

漏えいした秘密鍵が認証や署名に有効であれば、その鍵を信頼するシステムで悪用されるおそれがあります。公開証明書と秘密鍵は区別してください。すべての証明書がシークレットというわけではありません。

想定される影響

  • 実際の秘密鍵が漏えいすると、その鍵に関連する認証や署名の権限が悪用される可能性があります。
  • 複数のシステムで同じ鍵を使っている場合、影響を受けるサービスが増える可能性があります。
  • コードやデプロイ資料に複製された鍵は、交換や回収が難しくなります。

対処方法

  • ユーザーデータから秘密鍵を取り除き、Secrets Manager や Parameter Store の SecureString などで管理してください。ワークロードには必要なシークレットの取得権限だけを付与してください。
  • 漏えいした鍵の利用先を確認して交換し、古い鍵への信頼や認証権限を取り消してください。
  • 起動設定は直接変更できません。代替の設定とインスタンスの置き換えを計画し、新しい構成には起動テンプレートを優先してください。

例

以下は従来の起動設定の部分的な例です。AMI の検索設定とインスタンスの要件は別途用意してください。

変更前

hcl
resource "aws_launch_configuration" "app_launch_config" {
  image_id         = data.aws_ami.ubuntu.id
  instance_type    = "m4.large"
  user_data_base64 = "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpzb21lS2V5"
}

この値は秘密鍵の開始マーカーと someKey に復元される説明用の文字列であり、完全な有効な秘密鍵ではありません。実際の秘密鍵を同じ方法でエンコードしても、その秘密は保護されません。

変更後

hcl
resource "aws_launch_configuration" "app_launch_config" {
  image_id      = data.aws_ami.ubuntu.id
  instance_type = "m4.large"
}

user_data_base64 全体を取り除いています。初期化手順は残らないため、必要な起動時の処理はシークレットを埋め込まずに別途設定してください。

参考資料