Skip to content

必ずCloudFront経由でALBへアクセスさせる方法

ALBをプライベートサブネットに配置してCloudFrontを置く形態がベストプラクティスだと言われている。

resource "aws_cloudfront_distribution" "devhost" {
origin {
vpc_origin_config {
vpc_origin_id = xxx
}
}
}

しかしプライベートに置けない事情がある場合もあって、例えばマンガメディアチームのdevhostはMirageのダッシュボードへアクセスするためにCognitoを通しているが、この場合はプライベートサブネットに配置できないらしい。この場合はカスタムオリジンの設定で秘密のHTTPヘッダーを付けて、それが付与されていないリクエストを弾く方法が次点となる。

Terraformで書くと、まずはCloudFront側からトークンをヘッダでオリジンへ送る。

resource "aws_cloudfront_distribution" "devhost" {
origin {
custom_header {
name = "X-Auth-CanonicalToken"
value = "xxx"
}
}
}

ALB側では以下のようにしてリスナールールの条件にヘッダを含める。

resource "aws_lb_listener_rule" "ecs_task" {
action {
type = "forward"
}
condition {
http_header {
http_header_name = "X-Auth-CanonicalToken"
values = ["xxx"]
}
}
}