7.3. 샘플 애플리케이션 배포
샘플 애플리케이션을 위한 새 프로젝트를 생성합니다.
$ oc new-project hello-world
hello world 애플리케이션을 배포합니다.
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
사전 생성된 서비스 리소스를 NodePort 서비스 유형으로 변환합니다.
$ oc -n hello-world patch service hello-openshift -p '{"spec":{"type":"NodePort"}}'
AWS Load Balancer Operator를 사용하여 AWS ALB를 배포합니다.
$ cat << EOF | oc apply -f - apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: hello-openshift-alb namespace: hello-world annotations: alb.ingress.kubernetes.io/scheme: internet-facing spec: ingressClassName: alb rules: - http: paths: - path: / pathType: Exact backend: service: name: hello-openshift port: number: 8080 EOF
AWS ALB Ingress 끝점을 curl하여 hello world 애플리케이션에 액세스할 수 있는지 확인합니다.
참고AWS ALB 프로비저닝에는 몇 분이 걸립니다.
curl: (6) 호스트를 해결할 수 없는
오류가 발생하면 기다렸다가 다시 시도하십시오.$ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${INGRESS}"
출력 예
Hello OpenShift!
7.3.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_ARN=$(aws wafv2 create-web-acl \ --name ${CLUSTER}-waf \ --region ${REGION} \ --default-action Allow={} \ --scope REGIONAL \ --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=${CLUSTER}-waf-metrics \ --rules file://${SCRATCH}/waf-rules.json \ --query 'Summary.ARN' \ --output text)
AWS WAF Web ACL ARN으로 Ingress 리소스에 주석을 답니다.
$ oc annotate -n hello-world ingress.networking.k8s.io/hello-openshift-alb \ alb.ingress.kubernetes.io/wafv2-acl-arn=${WAF_ARN}
규칙이 전파되고 앱이 여전히 작동하는지 테스트할 때까지 10초 동안 기다립니다.
$ curl "http://${INGRESS}"
출력 예
Hello OpenShift!
WAF가 잘못된 요청을 거부했는지 테스트합니다.
$ curl -X POST "http://${INGRESS}" \ -F "user='<script><alert>Hello></alert></script>'"
출력 예
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> </body> </html
참고AWS WAF 통합 활성화에는 몇 분이 걸릴 수 있습니다.
403 Forbidden
오류가 표시되지 않으면 몇 초 기다렸다가 다시 시도하십시오.예상되는 결과는
403 Forbidden
오류이며 이는 AWS WAF가 애플리케이션을 보호하고 있음을 의미합니다.