6.2. 보조 수신 컨트롤러 설정
외부 WAF로 보호된 트래픽을 표준(및 기본) 클러스터 인그레스 컨트롤러에서 분할하도록 보조 수신 컨트롤러를 구성해야 합니다.
사전 요구 사항
CN=*.apps.example.com
과 같이 사용자 지정 도메인에 대해 공개적으로 신뢰할 수 있는 SAN 또는 와일드카드 인증서중요Amazon CloudFront는 HTTPS를 사용하여 클러스터의 보조 수신 컨트롤러와 통신합니다. 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.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 서비스는 ROSA와 같이 보호된 웹 애플리케이션 리소스로 전달되는 HTTP 및 HTTPS 요청을 모니터링, 보호 및 제어할 수 있는 웹 애플리케이션 방화벽입니다.
웹 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
그러면 코어(Common) 및 SQL AWS 관리 규칙 세트가 활성화됩니다.
위에서 지정한 규칙을 사용하여 AWS WAF 웹 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)