ユーザーアイコン

mizuko

3日前

0
0

Strict-Transport-Security (HSTS) ヘッダーの設定と運用

AWS
セキュリティ

HSTSヘッダーはHTTPS接続を強制し、プロトコルダウングレード攻撃を防ぐセキュリティ機構。

ヘッダーの構成要素:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
  1. max-age - HTTPS強制期間(秒単位)

    • 31536000 = 1年間
    • この期間中、ブラウザは自動的にHTTPをHTTPSに変換
    • 段階的導入推奨: 300秒→86400秒→604800秒→31536000秒
  2. includeSubDomains - サブドメインへの適用

    • すべてのサブドメインもHTTPS強制
    • 開発環境のサブドメインに注意が必要
    • すべてのサブドメインがHTTPS対応であることを確認してから追加
  3. preload - ブラウザプリロードリストへの登録

    • 初回アクセス時からHTTPS強制(TOFU攻撃防止)
    • hstspreload.orgで申請が必要
    • 一度登録すると削除が困難(数ヶ月かかる)
    • 本番環境で十分テスト後に検討

AWS環境での実装例(Gin):

func SecurityHeaders() gin.HandlerFunc { return func(c *gin.Context) { // ALB/CloudFrontからの転送を考慮 proto := c.GetHeader("X-Forwarded-Proto") if proto == "" { proto = c.GetHeader("CloudFront-Forwarded-Proto") } if proto == "https" { // 初期は控えめな設定 c.Header("Strict-Transport-Security", "max-age=2592000") // 安定後に延長とサブドメイン追加を検討 } c.Next() } }

AWSロードバランサー使用時の注意点:

  • HSTSはクライアント-ロードバランサー間にのみ影響
  • ロードバランサー-バックエンド間のHTTP通信には影響なし
  • SSL終端をALBで行う構成と互換性あり

推奨される導入手順:

  1. 短期間・preloadなしで開始
  2. 問題なければ期間を延長
  3. サブドメイン構成確定後にincludeSubDomains追加
  4. 長期安定後、必要に応じてpreload検討(必須ではない)

preloadなしでも十分なセキュリティは確保できるため、運用状況に応じて段階的に強化することが重要。