カスタムヘッダー方式の CloudFront + ALB 構成を VPC オリジンに移行してみた

カスタムヘッダー方式の CloudFront + ALB 構成を VPC オリジンに移行してみた

2026.01.08

はじめに

CloudFront + ALB 構成のアクセス制御について、カスタムヘッダー方式から VPC オリジンへの移行を試してみました。

カスタムヘッダー方式では、ALB をパブリックに公開した上で、CloudFront からの秘密のヘッダーをチェックしてアクセスを制限していました。VPC オリジンを使うと、ALB をプライベートサブネットに置いたまま CloudFront と接続できるので、そもそもインターネットから ALB が見えなくなります。ヘッダーの管理や検証ロジックも不要になるので、よりシンプルかつセキュアな構成が実現できます。

構成

どちらも簡易構成となっています。

移行前の構成(カスタムヘッダー方式)

リソース 用途
VPC パブリックサブネット × 2
ALB(インターネット向け) パブリックサブネットに配置
EC2 インスタンス パブリックサブネットに配置
CloudFront カスタムヘッダー付きでオリジン設定
ALB リスナールール ヘッダー検証(なければ 403)

動作

アクセス方法 結果
CloudFront 経由 ✅ 正常に表示
ALB 直接アクセス ❌ 403 Access Denied

スクリーンショット 2026-01-07 13.53.01.png

移行後の構成(VPC オリジン)

リソース 用途
VPC パブリックサブネット × 2、プライベートサブネット × 2
ALB(Internal) プライベートサブネットに配置
EC2 インスタンス プライベートサブネットに配置
CloudFront VPC オリジンをオリジンとして設定
VPC オリジン CloudFront から Internal ALB へのプライベート接続を提供

動作:

アクセス方法 結果
CloudFront 経由 ✅ 正常に表示
ALB 直接アクセス ❌ タイムアウト(到達不可)

スクリーンショット 2026-01-07 13.52.48.png

移行手順

STEP 1: プライベートサブネットの追加

VPC にプライベートサブネットを追加します。Internal ALB には 2 つの AZ が必要なため、2 つ作成します。

STEP 2: EC2 インスタンスをプライベートサブネットに移動

既存の EC2 インスタンスをプライベートサブネットに移動します。

項目
サブネット プライベートサブネット
パブリック IP の自動割り当て 無効
セキュリティグループ 既存の EC2 インスタンス用 SG

STEP 3: Internal ALB の作成

プライベートサブネットに Internal ALB を作成します。

項目
ロードバランサー名 demo-internal-alb
スキーム 内部(Internal)
VPC 既存の VPC
サブネット private-subnet-1a, private-subnet-1c
セキュリティグループ 既存の ALB 用 SG

スクリーンショット 2026-01-05 14.56.42

リスナーとルーティング:

項目
プロトコル HTTP
ポート 80
デフォルトアクション 新規ターゲットグループを作成

スクリーンショット 2026-01-05 14.59.28

STEP 4: VPC オリジンの作成

CloudFront に VPC オリジンを作成します。
CloudFront コンソール → VPC オリジン → VPC オリジンを作成

項目
名前 demo-vpc-origin
オリジン ARN demo-internal-alb の ARN を選択
プロトコル HTTP のみ

VPCオリジン作成.png

「VPC オリジンを作成」をクリック後、ステータスが「デプロイ済み」になるまで待ちます(5〜15 分)。

STEP 5: CloudFront のオリジン切り替え

CloudFront のオリジンを VPC オリジンに変更します。
CloudFront コンソール → ディストリビューション → 対象を選択 → オリジンタブ
既存のオリジンを選択し「編集」

以下を変更

項目 変更内容
オリジンドメイン VPC origins から demo-vpc-origin を選択
カスタムヘッダー 削除(VPC オリジンでは不要)

「変更を保存」をクリック

デプロイが完了するまで待ちます(3〜5 分)。

編集前
編集前.png

編集後
編集後.png

STEP 6: 動作確認

確認項目 期待する結果
CloudFront 経由 ✅ 正常に表示
Internal ALB 直接 ❌ タイムアウト(到達不可)

Internal ALB はプライベートサブネットにあるため、インターネットから DNS 名でアクセスしてもタイムアウトになります。

Cloudfront 経由の結果
cf 結果.png

ALBに直接アクセスした際の結果
internal 結果.png

STEP 7: 旧リソースの削除

移行完了後、不要になったリソースを削除します。
削除対象:

  • 旧パブリック ALB
  • 旧ターゲットグループ

補足:本番環境での推奨設定

今回は検証のため簡易的な設定で行いましたが、本番環境では以下を推奨します。

HTTPS の設定

項目 推奨設定
VPC オリジンのプロトコル HTTPS のみ
ALB HTTPS リスナー + ACM 証明書を設定

セキュリティグループの設定

Internal ALB のセキュリティグループに、CloudFront マネージドプレフィックスリストを設定することで、より厳密にアクセスを制限できます。

おわりに

カスタムヘッダー方式から VPC オリジンに移行しました。
VPC オリジンを使うことで、ALB と EC2 インスタンスをプライベートサブネットに配置し、よりセキュアな構成を実現できました。参考になれば幸いです。

参考資料

クラスメソッドオペレーションズ株式会社について

クラスメソッドグループのオペレーション企業です。

運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。

当社は様々な職種でメンバーを募集しています。

「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイト をぜひご覧ください。※2026年1月 アノテーション㈱から社名変更しました

この記事をシェアする

FacebookHatena blogX

関連記事