이 페이지에서는 Google Cloud Armor 보안 정책을 관리하고 애플리케이션으로 들어오는 트래픽을 필터링하는 방법을 설명합니다. Cloud Armor 보안 정책은 DDoS 공격과 인터넷의 기타 위협으로부터 웹 애플리케이션과 서비스를 보호하는 데 도움이 됩니다. 강력한 보안 상황을 적용하려면 생성, 테스트, 통합을 통해 보안 정책을 관리해야 합니다. 보안 정책을 만들거나 보려면 Cloud Armor 보안 정책 만들기 및 보기를 참고하세요.
보안 정책 관리
다음 섹션에서는 보안 정책을 나열, 업데이트, 삭제 또는 테스트하는 방법을 설명합니다.
보안 정책 나열
이 섹션의 단계에 따라 프로젝트의 Cloud Armor 보안 정책을 나열합니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
정책을 보려면 정책 목록에서 특정 정책의 이름을 클릭합니다.
gcloud
gcloud compute security-policies list
예를 들면 다음과 같습니다.
gcloud compute security-policies list
출력:
NAME: my-policy REGION: us-central1
자세한 내용은 gcloud compute security-policies
list를 참조하세요.
보안 정책 업데이트
이 섹션의 단계에서는 Cloud Armor 보안 정책을 업데이트하는 방법을 설명합니다. 정책 설명을 수정하거나, 기본 규칙을 수정하거나, 대상 백엔드 서비스를 변경하거나, 규칙을 추가할 수 있습니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
정책 목록에서 업데이트할 정책의 이름을 찾아 해당 정책의 메뉴를 클릭합니다.
- 설명 또는 기본 규칙 작업을 업데이트하려면 수정을 선택하고 변경한 후 업데이트를 클릭합니다.
- 규칙을 추가하려면 규칙 추가를 선택한 후 보안 정책에 규칙 추가의 단계를 따릅니다.
- 대상 백엔드 서비스를 바꾸려면 대상에 정책 적용을 선택한 후 대상 추가를 클릭한 다음 대상을 선택한 후 추가를 클릭합니다.
gcloud
보안 정책을 업데이트하려면 다음 Google Cloud CLI 단계를 따르세요.
- 규칙을 업데이트하려면 보안 정책에서 단일 규칙 업데이트를 참고하세요.
- 규칙을 추가하려면 보안 정책에 규칙 추가를 참고하세요.
- 규칙을 삭제하려면 보안 정책에서 규칙 삭제를 참고하세요.
- 단일 원자 업데이트로 여러 규칙을 업데이트하려면 보안 정책의 여러 규칙을 원자적으로 업데이트를 참고하세요.
- 규칙이 아닌 필드 (예: 설명)를 업데이트하려면 보안 정책 내보내기 및 보안 정책 가져오기를 참고하세요.
보안 정책 삭제
이 섹션에서는 Cloud Armor 보안 정책을 삭제하는 방법을 설명합니다. 삭제하기 전에 정책에서 모든 백엔드 서비스를 삭제하세요.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
삭제할 정책 옆에 있는 체크박스를 선택합니다.
페이지 오른쪽 상단에서 삭제를 클릭합니다.
gcloud
gcloud compute security-policies delete NAME을 사용합니다. NAME을 보안 정책 이름으로 바꿉니다.
gcloud compute security-policies delete NAME
보안 정책 테스트
모든 새 규칙을 미리보기 모드로 배포한 후 요청 로그를 검토하여 정책과 규칙이 예상대로 작동하는지 확인하는 것이 좋습니다.
보안 정책 규칙 관리
다음 섹션에서는 보안 정책 규칙을 나열, 추가, 업데이트 또는 삭제하는 방법을 설명합니다.
보안 정책의 규칙 나열
이 섹션의 단계에 따라 Cloud Armor 보안 정책의 규칙을 나열합니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
특정 보안 정책의 이름을 클릭합니다. 정책 세부정보 페이지의 규칙 탭에 정책 규칙이 표시됩니다.
gcloud
다음 gcloud 명령어를 사용하여 보안 정책의 모든 규칙을 나열합니다.
gcloud compute security-policies describe NAME \
다음 gcloud 명령어를 사용하여 지정된 리전의 보안 정책 하나의 모든 규칙을 정책 설명과 함께 나열합니다.
gcloud compute security-policies describe NAME \ --region REGION
다음 gcloud 명령어를 사용하여 규칙을 설명합니다.
gcloud compute security-policies rules describe PRIORITY \
--security-policy POLICY_NAME
예를 들어 다음 명령어는 보안 정책 my-policy에서 우선순위가 1, 000인 규칙을 설명합니다.
gcloud compute security-policies rules describe 1000 \
--security-policy my-policy
출력:
action: deny(403) description: block traffic from 192.0.2.0/24 and 198.51.100.0/24 kind: compute#securityPolicyRule match: srcIpRanges: - '192.0.2.0/24' - '198.51.100.0/24' preview: false priority: 1000
자세한 내용은 gcloud compute security-policies
describe를 참조하세요.
보안 정책에 규칙 추가
이 섹션의 단계에 따라 Cloud Armor 보안 정책에 규칙을 추가합니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
보안 정책의 이름을 클릭하여 정책 세부정보 페이지를 엽니다.
페이지 중간에 있는 규칙 탭을 클릭합니다.
규칙 추가를 클릭합니다.
원하는 경우 규칙 설명을 입력합니다.
모드를 선택합니다.
- 기본 모드: IP 주소 또는 IP 범위를 기준으로 트래픽을 허용하거나 거부합니다.
- 고급 모드: 규칙 표현식을 기준으로 트래픽을 허용하거나 거부합니다.
일치 필드에서 규칙이 적용되는 조건을 지정합니다.
기본 모드: 규칙에서 일치하는 IP 주소 범위를 1개에서 10개까지 입력합니다. IP 주소 범위는 최대 10개까지 추가할 수 있습니다. 한도는 Cloud Armor 할당량 및 한도를 참고하세요.
고급 모드:
- 일치 조건 작성 도구 (미리보기): 시각적 빌더를 사용하여 원시 CEL 코드를 작성하지 않고도 표현식을 만들 수 있습니다. 조건을 결합하고 그룹화하며 문자열 변환을 적용합니다. 일치 조건 작성 도구 사용을 참고하세요.
- 일치 조건 편집기: 들어오는 요청을 평가할 표현식을 입력합니다. 자세한 내용은 커스텀 규칙 언어 참조를 확인하세요.
다음 표현식은
User-Agent헤더에example문자열이 포함된 IP 주소1.2.3.4의 요청과 일치합니다.inIpRange(origin.ip, '1.2.3.4/32') && has(request.headers['user-agent']) && request.headers['user-agent'].contains('example')다음 표현식은 특정 값을 가진 쿠키가 있는 요청과 일치합니다.
has(request.headers['cookie']) && request.headers['cookie'].contains('cookie_name=cookie_value')다음 표현식은
AU리전의 요청과 일치합니다.origin.region_code == 'AU'다음 표현식은 지정된 IP 범위가 아닌
AU리전의 요청과 일치합니다.origin.region_code == "AU" && !inIpRange(origin.ip, '1.2.3.0/24')URI가 정규 표현식과 일치하면 다음 표현식은 요청과 일치합니다.
request.path.matches('/example_path/')다음 표현식은
user-id헤더에 Base64로 인코딩된 값이 포함되어 있고, 이 값을 디코딩하면 특정 문자열이 포함된 경우 요청과 일치합니다.has(request.headers['user-id']) && request.headers['user-id'].base64Decode().contains('myValue')다음 표현식은 사전 구성된 표현식 세트를 사용하여 SQLi 공격과 일치시킵니다.
evaluatePreconfiguredWaf('sqli-stable')
작업 목록에서 허용 또는 거부를 선택합니다.
거부 규칙을 구성하는 경우 거부 상태 메시지를 선택합니다.
규칙에 미리보기 모드를 사용 설정하려면 사용 설정을 선택합니다.
우선순위 필드에 양의 정수를 입력합니다.
추가를 클릭합니다.
gcloud
gcloud compute security-policies rules create
PRIORITY 명령어를 사용합니다. PRIORITY를 정책에 있는 규칙의 우선순위로 바꿉니다.
gcloud compute security-policies rules create PRIORITY \
--security-policy POLICY_NAME \
--description DESCRIPTION \
--src-ip-ranges IP_RANGES | --expression EXPRESSION \
--action=[ allow | deny-403 | deny-404 | deny-502 ] \
--preview
예를 들어 다음 명령어는 우선순위가 1000인 규칙을 추가하여 IP 주소 범위 192.0.2.0/24 및 198.51.100.0/24에서 트래픽을 차단합니다.
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"
--expression 플래그를 사용하여 조건을 지정합니다. 다음 명령어는 User-Agent 헤더에 example 문자열이 포함된 IP 주소 1.2.3.4에서 들어오는 트래픽을 허용하는 규칙을 추가합니다.
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('80=BLAH')" \
--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-502 \
--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 "evaluatePreconfiguredWaf('sqli-stable')" \
--action deny-403
보안 정책의 단일 규칙 업데이트
이 섹션에서는 Cloud Armor 보안 정책에서 규칙 하나를 업데이트하는 방법을 설명합니다. 여러 규칙을 원자적으로 업데이트하려면 보안 정책의 여러 규칙을 원자적으로 업데이트를 참고하세요.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
보안 정책의 이름을 클릭하여 정책 세부정보 페이지를 엽니다.
페이지 중간에 있는 규칙 탭을 클릭합니다.
업데이트할 규칙 옆에 있는 수정을 클릭합니다. 규칙 수정 페이지가 표시됩니다.
변경한 다음 업데이트를 클릭합니다.
gcloud
다음 명령어를 사용하여 규칙을 업데이트합니다. 한 번에 하나의 보안 정책만 업데이트할 수 있습니다.
gcloud compute security-policies rules update PRIORITY [ \
--security-policy POLICY_NAME \
--description DESCRIPTION \
--src-ip-ranges IP_RANGES | --expression EXPRESSION \
--action=[ allow | deny-403 | deny-404 | deny-502 ] \
--preview
]
예를 들어 다음 명령어는 IP 주소 범위 192.0.2.0/24에서 들어오는 트래픽을 허용하도록 우선순위가 1111인 규칙을 업데이트합니다.
gcloud compute security-policies rules update 1111 \
--security-policy my-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
update을 참고하세요.
규칙의 우선순위를 업데이트하려면 REST API를 사용하세요. securityPolicies.patchRule을 참고하세요.
일치 조건 작성 도구 사용
일치 조건 작성 도구는 Cloud de Confiance 콘솔의 시각적 인터페이스로, Common Expression Language (CEL) 코드를 작성하지 않고도 복잡한 Cloud Armor 규칙 표현식을 만들 수 있습니다. 코드를 작성하는 대신 빌더의 구조화된 UI를 사용하여 조건을 결합하고 로직을 그룹화할 수 있으므로 구문 오류를 방지하고 규칙 구조를 더 잘 시각화할 수 있습니다. 빌더는 최대 5단계의 표현식으로 구성된 일반 목록과 중첩된 논리를 지원합니다. 트래픽을 라우팅하기 전에 특정 요청 속성을 검사해야 할 수 있는 멀티 클라우드 백엔드 또는 하이브리드 배포를 보호하기 위한 규칙을 구성할 때 이 도구를 사용하세요.
일치 조건 작성 도구의 기능
일치 조건 작성 도구에는 다음 기능이 포함되어 있습니다.
- 논리 및 중첩:
AND및OR연산자를 사용하여 여러 조건을 결합합니다. 빌더는 최대 5개의 표현식의 그룹화 및 중첩을 지원합니다. - 문자열 변환: 문자열 기반 속성 (예:
request.path또는request.headers)의 경우 평가 전에 변환을 적용하여 데이터를 정규화합니다. 지원되는 변환은 다음과 같습니다.- 소문자 및 대문자
- Base64 디코딩
- URL 디코딩 및 URL 디코딩 (유니코드)
- UTF-8을 유니코드로 변환
- 양방향 파싱: 시각적 일치 조건 빌더와 원시 텍스트 일치 조건 편집기 간에 전환합니다. UI는 원시 CEL 코드를 시각적 블록으로 자동 파싱합니다.
- 기능 지원: 빌더는 사전 구성된 WAF 규칙, 주소 그룹, 위협 인텔리전스와 같은 기능 기반 표현식을 위한 UI 컨트롤을 제공합니다.
제한사항
일치 조건 작성 도구는 고급 규칙 생성의 기본 인터페이스입니다. 표현식에 지원되지 않는 논리 (예: 알 수 없는 매크로)가 포함된 경우 빌더가 사용 중지됩니다. 이러한 경우 일치 조건 편집기의 원시 텍스트를 사용하여 규칙을 수정합니다.
또한 빌더에서 특정 표현식을 사용할 수 있는지 여부는 프로젝트의 Google Cloud Armor Enterprise 등급과 보안 정책 유형에 따라 다릅니다.
보안 정책의 여러 규칙을 원자적으로 업데이트
원자 업데이트 기능을 사용하여 단일 업데이트에서 여러 규칙에 변경사항을 적용할 수 있습니다. 단일 규칙 업데이트는 이전 규칙과 새 규칙이 단기간 동안 중복될 수 있으므로 오류와 같은 의도하지 않은 동작을 유발할 수 있습니다.
여러 규칙을 원자적으로 업데이트하려면 현재 보안 정책을 JSON 또는 YAML 파일로 내보낸 후 수정합니다. 수정된 파일을 사용하여 보안 정책을 만든 후 백엔드 서비스의 보안 정책을 전환합니다.
gcloud
다음 예시와 같이 업데이트할 정책을 내보냅니다.
gcloud compute security-policies export my-policy \ --file-name my-file \ --file-format yaml내보낸 정책은 다음 예시와 유사합니다.
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 2 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy텍스트 편집기를 사용하여 정책을 수정합니다. 예를 들어 기존 규칙의 우선순위를 수정하고 규칙을 추가할 수 있습니다.
description: my description fingerprint: PWfLGDWQDLY= id: '123' name: my-policy rules: - action: deny(404) description: my-rule-1 match: expr: expression: evaluatePreconfiguredWaf('xss-stable') versionedExpr: SRC_IPS_V1 preview: false priority: 1 - action: allow description: my-new-rule match: config: srcIpRanges: - '1.2.3.1' versionedExpr: SRC_IPS_V1 preview: false priority: 10 - action: allow description: my-rule-2 match: config: srcIpRanges: - '1.2.3.4' versionedExpr: SRC_IPS_V1 preview: false priority: 11 - action: deny description: default rule kind: compute#securityPolicyRule match: config: srcIpRanges: - '*' versionedExpr: SRC_IPS_V1 preview: false priority: 2147483647 selfLink: https://www.googleapis.com/compute/v1/projects/my-project/global/securityPolicies/my-policy다음 예시와 같이 새 Cloud Armor 보안 정책을 만들고 수정된 파일 이름과 형식을 지정합니다.
gcloud compute security-policies create new-policy \ --file-name modified-policy \ --file-format yaml다음 예시와 같이 관련 백엔드 서비스에서 이전 보안 정책을 삭제합니다.
gcloud compute backend-services update my-backend \ --security-policy ""다음 예시와 같이 새 보안 정책을 백엔드 서비스에 추가합니다.
gcloud compute backend-services update my-backend \ --security-policy new-policy이전 정책을 사용하지 않을 경우 삭제합니다.
gcloud compute security-policies delete my-policy
보안 정책에서 규칙 삭제
이 섹션의 단계에 따라 Cloud Armor 보안 정책에서 규칙을 삭제합니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
보안 정책의 이름을 클릭하여 정책 세부정보 페이지를 엽니다.
페이지 중간의 규칙 탭에서 삭제할 규칙 옆에 있는 체크박스를 선택합니다.
삭제를 클릭합니다.
gcloud
다음 명령어를 사용하여 규칙을 삭제합니다. 한 번에 보안 정책 하나만 수정할 수 있지만 한 번에 규칙 여러 개를 삭제할 수 있습니다.
gcloud compute security-policies rules delete PRIORITY [...] [
--security-policy POLICY_NAME \
]
예를 들면 다음과 같습니다.
gcloud compute security-policies rules delete 1000 \
--security-policy my-policy
보안 정책 연결 및 삭제
다음 섹션에서는 보안 정책을 연결하고 삭제하는 방법을 설명합니다.
백엔드 서비스에 보안 정책 연결
이 섹션의 단계를 따라 Cloud Armor 보안 정책을 백엔드 서비스에 연결합니다. 보안 정책을 여러 백엔드 서비스에 연결할 수 있지만 백엔드 서비스에는 각 유형의 보안 정책 하나만 연결될 수 있습니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
보안 정책의 이름을 클릭하여 정책 세부정보 페이지를 엽니다.
페이지 중간에 있는 대상 탭을 클릭합니다.
새 대상에 정책 적용을 클릭합니다.
대상 추가를 클릭합니다.
대상 목록에서 대상을 선택한 다음 추가를 클릭합니다.
gcloud
백엔드 보안 정책을 백엔드 서비스에 연결할 때 gcloud compute backend-services 명령어와 --security-policy 플래그를 사용합니다.
gcloud compute backend-services update my-backend \
--security-policy my-policy
백엔드 서비스에 에지 보안 정책을 연결할 때 gcloud compute backend-services 명령어와 --edge-security-policy 플래그를 사용합니다.
gcloud compute backend-services update my-backend \
--edge-security-policy my-policy
백엔드 서비스에서 보안 정책 삭제
이 섹션의 단계에 따라 백엔드 서비스에서 Cloud Armor 보안 정책을 삭제합니다.
콘솔
Cloud de Confiance 콘솔에서 Cloud Armor 정책 페이지로 이동합니다.
보안 정책의 이름을 클릭하여 정책 세부정보 페이지를 엽니다.
페이지 중간에 있는 대상 탭을 클릭합니다.
정책을 삭제할 대상 백엔드 서비스를 선택합니다.
삭제를 클릭합니다.
대상 삭제 메시지에서 삭제를 클릭합니다.
gcloud
백엔드 보안 정책을 삭제할 때 gcloud compute
backend-services 명령어와 --security-policy 플래그를 사용합니다.
gcloud compute backend-services update my-backend \
--security-policy ""
에지 보안 정책을 삭제할 때 gcloud compute
backend-services 명령어와 --edge-security-policy 플래그를 사용합니다.
gcloud compute backend-services update my-backend \
--edge-security-policy ""