6.2. 设置二级入口控制器
需要将二级入口控制器配置为将外部 WAF 保护的流量与标准(和默认)集群入口控制器进行分段。
前提条件
自定义域公开可信 SAN 或通配符证书,如
CN swig.apps.example.com
重要Amazon CloudFront 使用 HTTPS 与集群的辅助入口控制器通信。如 Amazon CloudFront 文档中所述,您无法将自签名证书用于 CloudFront 和您的集群之间的 HTTPS 通信。Amazon CloudFront 会验证证书是否由可信证书颁发机构发布。
流程
从私钥和公共证书创建一个新的 TLS secret,其中
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.com 1 defaultCertificate: name: waf-tls endpointPublishingStrategy: loadBalancer: dnsManagementPolicy: Unmanaged providerParameters: aws: type: NLB type: AWS scope: External type: LoadBalancerService routeSelector: 2 matchLabels: route: waf
应用
IngressController
:示例
$ oc apply -f waf-ingress-controller.yaml
验证 IngressController 是否已成功创建外部负载均衡器:
$ 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
6.2.1. 配置 AWS WAF
AWS WAF 服务是一个 web 应用程序防火墙,可让您监控、保护和控制转发到受保护的 web 应用程序资源(如 ROSA)的 HTTP 和 HTTPS 请求。
创建 AWS WAF 规则文件以应用到我们的 Web ACL:
$ 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
这将启用 Core (Common)和 SQL AWS Managed Rule Sets。
使用上面指定的规则创建 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)