5.2. セカンダリー Ingress Controller の設定
標準 (およびデフォルト) クラスター Ingress Controller からの WAF 保護対象の外部トラフィックをセグメント化するために、セカンダリー Ingress Controller を設定する必要があります。
前提条件
カスタムドメイン用の公的に信頼された SAN 証明書またはワイルドカード証明書 (例:
CN=*.apps.example.com)重要Amazon CloudFront は HTTPS を使用してクラスターのセカンダリー Ingress Controller と通信します。Amazon CloudFront のドキュメント で説明されているように、CloudFront とクラスター間の HTTPS 通信には自己署名証明書を使用できません。Amazon CloudFront は、証明書が信頼できる認証局によって発行されたことを確認します。
手順
秘密鍵と公開証明書から新しい TLS シークレットを作成します。
fullchain.pemは完全なワイルドカード証明書チェーン (中間証明書を含む)、privkey.pemはワイルドカード証明書の秘密鍵です。例
$ oc -n openshift-ingress create secret tls waf-tls --cert=fullchain.pem --key=privkey.pem新規の
IngressControllerリソースを作成します。waf-ingress-controller.yamlの例apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: cloudfront-waf namespace: openshift-ingress-operator spec: domain: apps.example.com1 defaultCertificate: name: waf-tls endpointPublishingStrategy: loadBalancer: dnsManagementPolicy: Unmanaged providerParameters: aws: type: NLB type: AWS scope: External type: LoadBalancerService routeSelector:2 matchLabels: route: wafIngressControllerを適用します。例
$ oc apply -f waf-ingress-controller.yamlIngressController が外部ロードバランサーを正常に作成したことを確認します。
$ oc -n openshift-ingress get service/router-cloudfront-waf出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-cloudfront-waf LoadBalancer 172.30.16.141 a68a838a7f26440bf8647809b61c4bc8-4225395f488830bd.elb.us-east-1.amazonaws.com 80:30606/TCP,443:31065/TCP 2m19s
5.2.1. AWS WAF の設定 リンクのコピーリンクがクリップボードにコピーされました!
AWS WAF サービスは Web アプリケーションファイアウォールです。Red Hat OpenShift Service on AWS などの保護対象の Web アプリケーションリソースに転送される HTTP および HTTPS 要求を監視、保護、制御できます。
Web ACL に適用する AWS WAF ルールファイルを作成します。
$ cat << EOF > ${SCRATCH}/waf-rules.json [ { "Name": "AWS-AWSManagedRulesCommonRuleSet", "Priority": 0, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesCommonRuleSet" } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesCommonRuleSet" } }, { "Name": "AWS-AWSManagedRulesSQLiRuleSet", "Priority": 1, "Statement": { "ManagedRuleGroupStatement": { "VendorName": "AWS", "Name": "AWSManagedRulesSQLiRuleSet" } }, "OverrideAction": { "None": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "AWS-AWSManagedRulesSQLiRuleSet" } } ] EOFこれにより、コア (共通) および SQL AWS マネージドルールセットが有効になります。
上記で指定したルールを使用して、AWS WAF の Web ACL を作成します。
$ WAF_WACL=$(aws wafv2 create-web-acl \ --name cloudfront-waf \ --region ${REGION} \ --default-action Allow={} \ --scope CLOUDFRONT \ --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=${CLUSTER}-waf-metrics \ --rules file://${SCRATCH}/waf-rules.json \ --query 'Summary.Name' \ --output text)