CloudFrontをALBの前段に持ってくる場合、セキュリティを考慮して、直接ALBにアクセスされないようにしたいと思います。その為、CloudFront経由の場合ヘッダーに任意キーと値を設定し、ALBに来た際にチェックして判定したいと思います。
CloudFront
普通に構築し、custom headerに任意キーと値を設定します。
パスによって一部S3を指定したい場合、originを追加してS3を指定します。S3は以下参考。
ALB
httpヘッダーに任意キーと値がある場合、ターゲットに転送等の先の指定をします。それ以外の場合は、403など固定レスポンスを返す設定をします。
Terraform対応
現時点(2019/9)では、ALBのhttpヘッダーがTerraformに対応していない為、WAFのstring / regex matchingを代用します。
WAFの場合、ALBに付加させる為、ALBのリージョンで構築します。
CloudFrontまとめ記事
以下にまとめました。