Web Application Firewall을 사용할 환경을 준비합니다.

Oracle Cloud Infrastructure 의 WAF(Web Application Firewall) 서비스를 사용하여 응용 프로그램을 보호할 수 있도록 환경을 준비합니다.

시작하기 전에

WAF 정책을 생성하기 전에 employee-helidon-lb 로드 밸런서의 공용 IP 주소가 이미 배치되었는지 알아야 합니다. 마이크로 서비스 기반 RESTful Java 응용 프로그램을 Oracle Cloud에 배치 를 참조하십시오.

샘플 직원 애플리케이션의 로드 밸런서에 대한 EXTERNAL-IP 주소를 가져오고 메모합니다. 나중에 WAF 정책을 생성하려면 이 작업이 필요합니다.

kubectl get service employee-helidon-lb

앞의 명령은 다음과 유사한 출력을 반환해야 합니다.

NAME                  TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
employee-helidon-lb   LoadBalancer   10.X.X.X       132.X.X.X        80:31437/TCP   5m

Kubernetes에서 표시되는 EXTERNAL-IP는 공용 IP 주소와 동일합니다. 이 주소는 Oracle Cloud Infrastructure 콘솔의 Core > Networking > Load Balancer로 이동할 때 표시됩니다.

WAF 정책 생성

WAF를 사용하여 응용 프로그램을 보안하려면 먼저 WAF 정책을 생성해야 합니다.

  1. Oracle Cloud Infrastructure 콘솔에 사인인합니다.
  2. 탐색 메뉴를 엽니다. Governance and Administration 에서 Security 로 이동하고 WAF Policies 를 누릅니다.
    메시지가 표시되면 WAF 정책이 생성되어야 하는 구획을 선택합니다.
  3. WAF 정책 생성 을 누릅니다.
  4. [WAF 정책 생성 ] 대화상자에서 다음과 같이 필드를 입력합니다.
    필드
    정책 이름 사원 데모 정책
    기본 도메인 직원 example.com
    추가 도메인 비워 두기
    출발지 이름 사원 OKE 로드 밸런서
    URI 로드 밸런서 EXTERNAL-IP
  5. [WAF 정책 생성 ] 을 눌러 대화상자를 닫습니다.
  6. 생성 후 정책 목록에서 사원 데모 정책의 세부정보를 로드합니다.

WAF를 사용하여 애플리케이션 트래픽 경로 지정

WAF를 통해 트래픽 경로를 지정하려면 지정된 기본 도메인 및 추가 도메인이 WAF 정책 정보에 나열된 CNAME Target로 분석되어야 합니다. 이 내용은 정책이 처음 생성될 때 통지로 표시됩니다.

애플리케이션이 DNS 영역에 실제로 구성된 경우 일반적으로 WAF_Target을 값으로 사용하여 employee.example.com에 대한 CNAME 또는 ALIAS 레코드를 생성합니다.

그러나 이 솔루션은 샘플 직원 애플리케이션에 대해 example.com 호스트 이름을 사용하므로 호스트를 해결하려면 애플리케이션에 액세스할 시스템을 구성해야 합니다.
  1. 다른 명령에 사용할 WAF_TARGET 환경 변수를 설정하여 WAF 정책 세부정보에 나열된 CNAME Target을 변수 값으로 지정해야 합니다.
    # Mac or Linux
    export WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
    # Windows
    set WAF_TARGET=employee-example-com.b.waas.oci.oraclecloud.net
  2. 트래픽이 WAF를 통해 전달되는지 확인합니다. HTTP 응답 헤더를 검사하고 다음을 확인하십시오.
    • Server: ZENEDGE
    • X-Cdn: Served-By-Zenedge
    curl -I-X GET http://${WAF_TARGET}/public/ -H'host: employee.example.com'
    앞의 코드는 다음과 유사한 출력을 반환해야 합니다.
    HTTP/1.1 200 OK
    Content-Type: text/html
    Connection: keep-alive
    Server: ZENEDGE
    ETag: "1565120174000"
    X-Cache-Status: NOTCACHED
    Content-Length: 14258
    Date: Wed, 07 Aug 2019 20:22:35 GMT
    Last-Modified: Tue, 07 Aug 2019 19:36:14 GMT
    X-Zen-Fury: 1053bc526e3d722eadb457f2
  3. 브라우저에 로드될 때 샘플 직원 애플리케이션 URL을 분석하도록 시스템을 구성합니다. 이 작업은 hosts 파일에 항목을 생성하여 DNS를 무시하고 시스템의 요청을 employee.example.com의 WAF IP 주소로 경로 지정합니다.
    1. $WAF_TARGET에 대한(여러 개 있을 수 있음) 네트워크 IP 주소를 식별합니다.
      nslookup $WAF_TARGET
      앞의 코드는 다음과 유사한 출력을 반환해야 합니다.
      Server:         192.168.X.X
      Address:        192.168.X.X#YY
      Non-authoritative answer:
      employee-example-com.b.waas.oci.oraclecloud.net canonical name = oci.tm.u.waas.oci.oraclecloud.net.
      oci.tm.u.waas.oci.oraclecloud.net  canonical name = us-seattle.u.waas.oci.oraclecloud.net.
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.X
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Y
      Name:   us-seattle.u.waas.oci.oraclecloud.net
      Address: 152.X.X.Z
    2. 신뢰할 수 없는 답변 섹션에서 단일 주소를 선택하고 /etc/hosts 파일에서 example 기본 도메인에 대해 다음과 같이 hosts 항목을 생성합니다.
      # hosts file entry
      # <WAF IP Address>    <domain>  
         152.X.X.Z          employee.example.com

      여러 항목이 존재합니다. 예상치 않은 동작을 피하려면 이러한 동작을 변경하지 않은 상태로 두십시오.

  4. 브라우저에서 http://<employee.example.com>/public/를 엽니다.

이제 WAF를 통해 애플리케이션이 실행됩니다.