보안 정책 예시

이 페이지에서는 다양한 유형의 부하 분산기와 보안 정책에 대한 보안 정책 구성 예시를 설명합니다.

외부 애플리케이션 부하 분산기의 보안 정책 구성

다음은 전역 외부 애플리케이션 부하 분산기나 기본 애플리케이션 부하 분산기로의 트래픽을 허용 또는 거부하는 규칙을 사용 설정하도록 Google Cloud Armor 보안 정책을 구성하는 대략적인 단계입니다.

  1. Google Cloud Armor 보안 정책을 만듭니다.
  2. IP 주소 목록, 커스텀 표현식 또는 사전 구성된 표현식 세트를 기준으로 보안 규칙을 정책에 추가합니다.
  3. 액세스를 제어하려는 전역 외부 애플리케이션 부하 분산기 또는 기본 애플리케이션 부하 분산기의 백엔드 서비스에 보안 정책을 연결합니다.
  4. 필요에 따라 보안 정책을 업데이트합니다.

다음 예시에서는 Google Cloud Armor 보안 정책 두 개를 만들어 서로 다른 백엔드 서비스에 적용합니다.

보안 정책 두 개를 서로 다른 백엔드 서비스에 적용하는 예시
보안 정책 두 개를 서로 다른 백엔드 서비스에 적용하는 예시(확대하려면 클릭)

예시에서 이들은 Google Cloud Armor 보안 정책입니다.

  • mobile-clients-policygames 서비스의 외부 사용자에게 적용됩니다.
  • internal-users-policy는 조직의 test-network팀에 적용됩니다

백엔드 서비스가 gamesgames 서비스에 mobile-clients-policy를 적용하고 해당 백엔드 서비스가 test-network인 테스트팀의 내부 test 서비스에 internal-users-policy를 적용합니다.

백엔드 서비스의 백엔드 인스턴스가 여러 리전에 있는 경우 서비스와 연결된 Google Cloud Armor 보안 정책은 모든 리전의 인스턴스에 적용됩니다. 앞의 예시에서 보안 정책 mobile-clients-policyus-central의 인스턴스 1, 2, 3, 4와 더불어 us-east의 인스턴스 5, 6에 적용됩니다.

예시 만들기

이 안내를 사용하여 이전 섹션에서 설명한 구성 예시를 만듭니다.

콘솔

외부 사용자의 보안 정책을 구성합니다.

  1. Google Cloud 콘솔에서 Google Cloud Armor 정책 페이지로 이동합니다.

    Google Cloud Armor 정책으로 이동

  2. 정책 만들기를 클릭합니다.

  3. 이름 필드에 mobile-clients-policy를 입력합니다.

  4. 설명 필드에 Policy for external users을 입력합니다.

  5. 기본 규칙 작업에서 거부를 선택합니다.

  6. 거부 상태404(찾을 수 없음)를 선택합니다.

  7. 다음 단계를 클릭합니다.

규칙을 추가합니다.

  1. 규칙 추가를 클릭합니다.
  2. 설명 필드에 allow traffic from 192.0.2.0/24을 입력합니다.
  3. 모드기본 모드(IP 주소/범위만)를 선택합니다.
  4. 일치 필드에 192.0.2.0/24를 입력합니다.
  5. 작업허용을 선택합니다.
  6. 우선순위 필드에 1000을 입력합니다.
  7. 완료를 클릭합니다.
  8. 다음 단계를 클릭합니다.

대상에 정책을 적용합니다.

  1. 대상 추가를 클릭합니다.
  2. 대상 목록에서 대상을 선택합니다.
  3. 완료를 클릭합니다.
  4. 정책 만들기를 클릭합니다.

원하는 경우 Google Cloud Armor Adaptive Protection을 사용 설정합니다.

  1. Adaptive Protection을 사용 설정하려면 사용 설정 체크박스를 선택합니다.

내부 사용자의 보안 정책을 구성합니다.

  1. 정책 만들기를 클릭합니다.
  2. 이름 필드에 internal-users-policy를 입력합니다.
  3. 설명 필드에 Policy for internal test users을 입력합니다.
  4. 기본 규칙 작업에서 거부를 선택합니다.
  5. 거부 상태502(잘못된 게이트웨이)를 선택합니다.
  6. 다음 단계를 클릭합니다.

규칙을 추가합니다.

  1. 규칙 추가를 클릭합니다.
  2. 설명 필드에 allow traffic from 198.51.100.0/24을 입력합니다.
  3. 모드기본 모드(IP 주소/범위만)를 선택합니다.
  4. 일치 필드에 198.51.100.0/24를 입력합니다.
  5. 작업허용을 선택합니다.
  6. 미리보기 전용사용 설정 체크박스를 선택합니다.
  7. 우선순위 필드에 1000을 입력합니다.
  8. 완료를 클릭합니다.
  9. 다음 단계를 클릭합니다.

대상에 정책을 적용합니다.

  1. 대상 추가를 클릭합니다.
  2. 대상 목록에서 대상을 선택합니다.
  3. 완료를 클릭합니다.
  4. 정책 만들기를 클릭합니다.

gcloud

  1. Google Cloud Armor 보안 정책을 만듭니다.

    gcloud compute security-policies create mobile-clients-policy \
        --description "policy for external users"
    
    gcloud compute security-policies create internal-users-policy \
        --description "policy for internal test users"
    
  2. 트래픽을 거부하려면 기본 규칙을 보안 정책으로 업데이트합니다.

    gcloud compute security-policies rules update 2147483647 \
        --security-policy mobile-clients-policy \
        --action "deny-404"
    
    gcloud compute security-policies rules update 2147483647 \
        --security-policy internal-users-policy \
        --action "deny-502"
    
  3. 보안 정책에 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy mobile-clients-policy \
        --description "allow traffic from 192.0.2.0/24" \
        --src-ip-ranges "192.0.2.0/24" \
        --action "allow"
    
    gcloud compute security-policies rules create 1000 \
        --security-policy internal-users-policy \
        --description "allow traffic from 198.51.100.0/24" \
        --src-ip-ranges "198.51.100.0/24" \
        --action "allow"
    
  4. 백엔드 서비스에 보안 정책을 연결합니다.

    gcloud compute backend-services update games \
        --security-policy mobile-clients-policy
    
    gcloud compute backend-services update test-network \
        --security-policy internal-users-policy
    
  5. 선택적으로 Adaptive Protection을 사용 설정합니다.

    gcloud compute security-policies update mobile-clients-policy \
        --enable-layer7-ddos-defense
    
    gcloud compute security-policies update internal-users-policy \
        --enable-layer7-ddos-defense
    

보안 정책 만들기

Google Cloud 콘솔 또는 gcloud CLI를 사용하여 보안 정책을 만들 수 있습니다. 이 섹션의 안내에서는 기존 전역 외부 애플리케이션 부하 분산기 또는 기본 애플리케이션 부하 분산기 및 백엔드 서비스에 적용할 보안 정책을 구성한다고 가정합니다. 필드를 입력하는 방법에 대한 예시는 예시 만들기를 참조하세요.

콘솔

Google Cloud Armor 보안 정책 및 규칙을 만들고 백엔드 서비스에 보안 정책을 연결합니다.

  1. Google Cloud 콘솔에서 Google Cloud Armor 정책 페이지로 이동합니다.

    Google Cloud Armor 정책으로 이동

  2. 정책 만들기를 클릭합니다.

  3. 이름 필드에 정책 이름을 입력합니다.

  4. 원하는 경우 정책 설명을 입력합니다.

  5. 정책 유형에서 백엔드 보안 정책 또는 에지 보안 정책을 선택합니다.

  6. 기본 규칙 작업에서 액세스를 허용하는 기본 규칙에 허용을 선택하거나 IP 주소나 IP 주소 범위에 대한 액세스를 금지하는 기본 규칙에 거부를 선택합니다.

    기본 규칙은 다른 규칙이 적용되지 않는 경우에만 적용되는 우선순위가 가장 낮은 규칙입니다.

  7. 거부 규칙을 구성하는 경우 거부 상태 메시지를 선택합니다. 액세스 권한이 없는 사용자가 액세스 권한을 얻으려고 하면 Google Cloud Armor에 표시되는 오류 메시지입니다.

  8. 구성할 규칙 유형에 관계없이 다음 단계를 클릭합니다.

규칙을 추가합니다.

  1. 규칙 추가를 클릭합니다.
  2. 원하는 경우 규칙 설명을 입력합니다.
  3. 모드를 선택합니다.

    • 기본 모드: IP 주소 또는 범위를 기준으로 트래픽을 허용하거나 거부합니다.
    • 고급 모드: 규칙 표현식을 기준으로 트래픽을 허용하거나 거부합니다.
  4. 일치 필드에서 규칙이 적용되는 조건을 지정합니다.

    • 기본 모드: 규칙에서 일치시킬 IP 주소 또는 IP 범위를 입력합니다.
    • 고급 모드: 들어오는 요청을 평가할 표현식 또는 하위 표현식을 입력합니다. 표현식을 작성하는 방법에 대한 자세한 내용은 커스텀 규칙 언어 속성 구성을 참조하세요.
  5. 작업에서 규칙이 일치하는 경우 허용 또는 거부를 선택하여 트래픽을 허용하거나 거부합니다.

  6. 미리보기 모드를 사용 설정하려면 사용 설정 체크박스를 선택합니다. 미리보기 모드에서 규칙 작동 방식을 볼 수 있지만 규칙이 사용 설정되어 있지 않습니다.

  7. 규칙 우선순위를 입력합니다. 우선순위는 0~2,147,483,646의 양의 정수일 수 있습니다. 평가 순서에 대한 자세한 내용은 규칙 평가 순서를 참조하세요.

  8. 완료를 클릭합니다.

  9. 규칙을 추가하려면 규칙 추가를 클릭하고 이전 단계를 반복합니다. 그렇지 않으면 다음 단계를 클릭합니다.

대상에 정책을 적용합니다.

  1. 대상 추가를 클릭합니다.
  2. 대상 목록에서 대상을 선택합니다.
  3. 더 많은 대상을 추가하려면 대상 추가를 클릭합니다.
  4. 완료를 클릭합니다.
  5. 정책 만들기를 클릭합니다.

gcloud

  1. 새 Google Cloud Armor 보안 정책을 만들려면 gcloud compute security-policies create 명령어를 사용합니다.

    type 필드에서 CLOUD_ARMOR를 사용하여 백엔드 보안 정책을 만들거나 CLOUD_ARMOR_EDGE를 사용하여 에지 보안 정책을 만듭니다. type 플래그는 선택사항입니다. 유형이 지정되지 않으면 백엔드 보안 정책이 기본적으로 생성됩니다.

    gcloud compute security-policies create NAME \
       [--type=CLOUD_ARMOR|CLOUD_ARMOR_EDGE] \
       [--file-format=FILE_FORMAT | --description=DESCRIPTION] \
       [--file-name=FILE_NAME]
    
    

    다음을 바꿉니다.

    • NAME: 보안 정책의 이름
    • DESCRIPTION: 보안 정책에 대한 설명

    다음 명령어는 이전에 만든 정책을 업데이트하고, JSON 파싱을 사용 설정하고, 로그 수준을 VERBOSE로 변경합니다.

    gcloud compute security-policies update my-policy \
        --json-parsing=STANDARD \
        --log-level=VERBOSE
    
  2. 보안 정책에 규칙을 추가하려면 gcloud compute security-policies rules create PRIORITY 명령어를 사용합니다.

    gcloud compute security-policies rules create PRIORITY  \
        [--security-policy POLICY_NAME] \
        [--description DESCRIPTION] \
        --src-ip-ranges IP_RANGE,... | --expression EXPRESSION \
        --action=[ allow | deny-403 | deny-404 | deny-502 ] \
        [--preview]
    

    PRIORITY를 정책의 규칙에 할당된 우선순위로 바꿉니다. 규칙 우선순위의 작동 방식에 대한 자세한 내용은 규칙 평가 순서를 참조하세요.

    예를 들어 다음 명령어는 IP 주소 범위 192.0.2.0/24198.51.100.0/24에서 트래픽을 차단하는 규칙을 추가합니다. 규칙 우선순위는 1000이며 이 규칙은 my-policy라는 정책의 규칙입니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
        --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
        --action "deny-403"
    

    --preview 플래그를 추가하면 규칙이 정책에 추가되지만 시행되지 않으며 규칙을 트리거하는 트래픽은 로깅만 됩니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --description "block traffic from 192.0.2.0/24 and 198.51.100.0/24" \
        --src-ip-ranges "192.0.2.0/24","198.51.100.0/24" \
        --action "deny-403" \
        --preview
    

    커스텀 조건을 지정하려면 --expression 플래그를 사용합니다. 자세한 내용은 커스텀 규칙 언어 속성 구성을 참고하세요. 다음 명령어는 IP 주소 1.2.3.4에서 들어오는 트래픽을 허용하고 user-agent 헤더의 example 문자열을 포함하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')" \
        --action allow \
        --description "Block User-Agent 'example'"
    

    다음 명령어는 요청 쿠키에 특정 값이 포함되면 요청을 차단하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')" \
        --action "deny-403" \
        --description "Cookie Block"
    

    다음 명령어는 리전 AU의 요청을 차단하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "origin.region_code == 'AU'" \
        --action "deny-403" \
        --description "AU block"
    

    다음 명령어는 지정된 IP 범위에 없는 AU 리전의 요청을 차단하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "origin.region_code == 'AU' && !inIpRange(origin.ip, '1.2.3.0/24')" \
        --action "deny-403" \
        --description "country and IP block"
    

    다음 명령어는 정규 표현식과 일치하는 URI가 있는 요청을 차단하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "request.path.matches('/example_path/')" \
        --action "deny-403" \
        --description "regex block"
    

    다음 명령어는 user-id 헤더의 Base64 디코딩 값에 특정 값이 포함된 경우 요청을 차단하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')" \
        --action "deny-403" \
        --description "country and IP block"
    

    다음 명령어는 사전 구성된 표현식 세트를 사용하여 SQLi 공격을 완화하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sqli-stable')" \
        --action "deny-403"
    

    다음 명령어는 명명된 IP 주소 목록의 모든 IP 주소에서 액세스할 수 있도록 허용하는 사전 구성된 표현식을 사용하는 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 \
        --security-policy my-policy \
        --expression "evaluatePreconfiguredExpr('sourceiplist-fastly')" \
        --action "allow"
    

리전 외부 애플리케이션 부하 분산기에 대한 보안 정책 구성

이 섹션에는 리전 외부 애플리케이션 부하 분산기를 위한 리전 범위 Google Cloud Armor 보안 정책을 구성하는 방법에 대한 정보가 포함되어 있습니다.

리전별 부하 분산 워크로드 보호

다음 단계를 따라 리전 범위 백엔드 서비스를 보호하는 보안 정책을 구성합니다.

  1. 리전 범위 보안 정책을 만듭니다.

    gcloud compute security-policies create POLICY_NAME \
       --type=CLOUD_ARMOR \
       --region=REGION
    
  2. 리전 범위 보안 서비스에 리전 범위 백엔드 서비스를 연결합니다. BACKEND_NAME을 기존의 리전 범위 백엔드 서비스 이름으로 바꿉니다.

    gcloud compute backend-services update BACKEND_NAME \
       --security-policy=POLICY_NAME \
       --region=REGION
    

리전 범위 Google Cloud Armor 보안 정책 적용

예를 들어 모든 백엔드 워크로드 및 WAF 규칙이 특정 리전에 배포되는 상주 요구사항을 충족하려는 보안 관리자가 있다고 가정해 보겠습니다. 다음 사항은 이미 완료했다고 가정합니다.

  1. 이 리전에서 리전 범위의 부하 분산 백엔드 서비스를 만들었습니다.
  2. 배포에서 기존 전역 범위 보안 정책을 중지했습니다.
  3. 이전 섹션처럼 동일한 리전에서 리전 범위 보안 정책을 만들고 연결했습니다.

다음 예시 명령어를 사용하여 요구사항을 충족하면서 WAF 규칙 및 기타 고급 규칙을 정책에 추가할 수 있습니다.

  • 정책에 WAF 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 --action=deny-404 \
      --expression="evaluatePreconfiguredExpr('xss-v33-stable', ['owasp-crs-v030301-id941100-xss', 'owasp-crs-v030301-id941160-xss'])" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • 정책에 고급 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 --action=allow \
      --expression="has(request.headers['cookie']) && request.headers['cookie'].contains('80=EXAMPLE')" \
      --security-policy=POLICY_NAME \
      --region=REGION
    
  • 정책에 비율 제한 규칙을 추가합니다.

    gcloud compute security-policies rules create 1000 --action=throttle \
      --src-ip-ranges="1.1.1.1/32" \
      --rate-limit-threshold-count=1000 \
      --rate-limit-threshold-interval-sec=120 \
      --conform-action="allow" \
      --exceed-action="deny-429" \
      --enforce-on-key=IP \
      --ban-duration-sec=999 \
      --ban-threshold-count=5000 \
      --ban-threshold-interval-sec=60 \
      --security-policy=POLICY_NAME \
      --region=REGION
    

다음 단계