📖
aws load balancer controllerでCloudFrontのカスタムヘッダ以外からのリクエストを403にするサンプル
やりたいこと
CloudFront + ALBの組み合わせの場合、とくに設定をしない場合、ALBのドメインへアクセスしてもバックエンドへ到達できてしまう。その場合、アタックをもろに受けることになってしまうので、防御策を弄したい。
こちらの記事にしたがって、CloudFrontを経由しないと付与されないカスタムヘッダがない場合は、403を返却する設定をいれることで、防御することができる。
サンプル
- 各ruleにはservice.port.nameをuse-annotationとすることで、annotationに記述したルールを参照することができる
-
condition
はどのようなリクエストが来たらということを定義する -
action
は具体的な動作を定義する- 左がcondition、右がactionのイメージ
- spec.defaultBackendはその名前の通り、どのルールにも一致しなかったら実行されるアクションを定義する
- デフォルトだと404エラーになったはず
- この部分を今回は403に変更している
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
...
annotations:
...
alb.ingress.kubernetes.io/actions.response-403: >
{"type":"fixed-response","fixedResponseConfig":{"contentType":"text/plain","statusCode":"403","messageBody":"Forbidden"}}
alb.ingress.kubernetes.io/actions.service: >
{"type":"forward","forwardConfig":{"targetGroups":[{"serviceName":"service","servicePort":80}]}}
alb.ingress.kubernetes.io/conditions.service: >
[{"field":"http-header","httpHeaderConfig":{"httpHeaderName": "from-restriction-cloudfront", "values":["aiueo"]}}]
spec:
ingressClassName: alb
defaultBackend:
service:
name: response-403
port:
name: use-annotation
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: service
port:
name: use-annotation
参考
Discussion