이 페이지에서는 애플리케이션 부하 분산기의 승인 정책을 설정하는 방법을 보여줍니다.
시작하기 전에
- 승인 정책 개요를 숙지하세요.
-
- Network Security API
- Network Services API
부하 분산기 설정
부하 분산기를 만들지 않았으면 다음 페이지를 참조하여 원하는 애플리케이션 부하 분산기를 설정합니다.
- 전역 외부 애플리케이션 부하 분산기를 만들려면 VM 인스턴스 그룹 백엔드로 전역 외부 애플리케이션 부하 분산기 설정을 참조하세요.
리전 외부 애플리케이션 부하 분산기를 만들려면 VM 인스턴스 그룹 백엔드가 있는 리전 외부 애플리케이션 부하 분산기 설정을 참조하세요.
리전 내부 애플리케이션 부하 분산기를 만들려면 VM 인스턴스 그룹 백엔드가 있는 리전 내부 애플리케이션 부하 분산기 설정을 참조하세요.
- 교차 리전 내부 애플리케이션 부하 분산기를 만들려면 VM 인스턴스 그룹 백엔드로 교차 리전 내부 애플리케이션 부하 분산기 설정을 참조하세요.
승인 정책 만들기
승인 정책을 만들려면 대상과 규칙을 정의하는 YAML 파일을 만든 후 gcloud network-security authz-policies 명령어를 사용하여 파일을 가져옵니다.
이 섹션에서는 부하 분산기의 전달 규칙에 연결된 여러 유형의 승인 정책을 만드는 방법을 안내합니다.
요청을 거부하는 승인 정책
이 섹션에서는 특정 요청 속성에 따라 요청을 거부하는 승인 정책의 예시를 제공합니다.
전역
전역 외부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 IP 주소 범위를 기반으로 요청을 거부하는 승인 정책을 만들고 가져옵니다.
특정 요청을 거부하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는
global위치에 전달 규칙LB_FORWARDING_RULE에 대한authz-policy-deny.yaml파일을 만듭니다. 이 정책은10.0.0.0/24범위의 IP 주소가 있는 클라이언트가/api/paymentsURL 경로에 액세스하는 것을 거부합니다.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" - to: operations: - paths: - prefix: "/api/payments" action: DENY EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
리전 간
교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 클라이언트 인증서 주 구성원을 기반으로 요청을 거부하는 승인 정책을 만들고 가져옵니다.
특정 요청을 거부하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는
global위치에 전달 규칙LB_FORWARDING_RULE에 대한authz-policy-deny.yaml파일을 만듭니다. 이 정책은 클라이언트 인증서 DNS 이름 SAN에www.example.com이 있는 클라이언트의/api/paymentsURL 경로에 대한 액세스를 거부합니다.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - principals: - principalSelector: CLIENT_CERT_DNS_NAME_SAN principal: exact: "www.example.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 교차 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.
gcloud network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=global
리전
리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 클라이언트 인증서 주 구성원을 기반으로 요청을 거부하는 승인 정책을 만들고 가져옵니다.
특정 요청을 거부하는 승인 정책 YAML 파일을 만듭니다.
다음 예시는Google Cloud 리전에 전달 규칙
LB_FORWARDING_RULE의authz-policy-deny.yaml파일을 만듭니다. 이 정책은 클라이언트 인증서 DNS 이름 SAN에www.example.com이 있는 클라이언트의/api/paymentsURL 경로에 대한 액세스를 거부합니다.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - principals: - principalSelector: CLIENT_CERT_DNS_NAME_SAN principal: exact: "www.example.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와
LOCATION리전에 승인 정책을 만듭니다.gcloud beta network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATION
요청을 허용하는 승인 정책
이 섹션에서는 특정 IP 주소 범위에서 시작된 요청을 허용하는 승인 정책 예시를 제공합니다.
전역 및 교차 리전
전역 외부 애플리케이션 부하 분산기나 교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계를 수행하여 승인 정책을 만들고 가져옵니다.
특정 요청을 허용하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는
global위치에 전달 규칙LB_FORWARDING_RULE에 대한authz-policy-allow.yaml파일을 만듭니다. 이 정책은10.0.0.0/24범위의 IP 주소가 있는 클라이언트가/api/paymentsURL 경로에 액세스하도록 허용합니다.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 교차 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와 승인 정책을 만듭니다.
gcloud network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=global
리전
리전 외부 애플리케이션 부하 분산기나 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계를 수행하여 승인 정책을 만들고 가져옵니다.
특정 요청을 허용하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는 특정 Google Cloud 리전에서 전달 규칙
LB_FORWARDING_RULE의authz-policy-allow.yaml파일을 만듭니다. 이 정책은10.0.0.0/24범위의 IP 주소가 있는 클라이언트가/api/paymentsURL 경로에 액세스하도록 허용합니다.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - ipBlocks: - prefix: "10.0.0.0" length: "24" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기를 사용하는 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와
LOCATION리전에 승인 정책을 만듭니다.gcloud beta network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION
서비스 계정 또는 태그 기반의 승인 정책
다양한 Google Cloud 리소스에 연결된 서비스 계정 또는 보안 태그 기반의 승인 정책을 적용할 수 있습니다.
이 예에서는 다음 작업을 완료했다고 가정합니다.
보안 태그를 만들고 Google Cloud 리소스에 키-값 쌍으로 연결했습니다. 태그를 만들 때
--purpose플래그를GCE_FIREWALL로 설정합니다. 승인 정책은GCE_FIREWALL용도로 설정되어 있어야만 태그를 적용할 수 있습니다.
서비스 계정
특정 요청을 거부하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는 리전 내부 애플리케이션 부하 분산기의 전달 규칙
LB_FORWARDING_RULE에 대해authz-policy-deny.yaml파일을 만듭니다. 이 정책은/api/payments경로에 도달하기 위해 서비스 계정으로my-sa-123@PROJECT_ID.iam.gserviceaccount.com를 사용하는 Compute Engine VM과 같은 Google Cloud 리소스의 요청을 거부하도록 구성되어 있습니다.cat >authz-policy-deny.yaml <<EOF name: my-authz-policy-deny target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: - resources: - iamServiceAccount: exact: "my-sa-123@PROJECT_ID.iam.gserviceaccount.com" to: operations: - paths: - prefix: "/api/payments" action: DENY EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와 지정된 Google Cloud 리전에 승인 정책을 만듭니다.
gcloud beta network-security authz-policies import my-authz-policy-deny \ --source=authz-policy-deny.yaml \ --location=LOCATIONLOCATION을 현재 Google Cloud 리전으로 바꿉니다.
태그
특정 요청을 허용하는 승인 정책 YAML 파일을 만듭니다.
다음 예시에서는 리전 내부 애플리케이션 부하 분산기의 전달 규칙
LB_FORWARDING_RULE에 대해authz-policy-allow.yaml파일을 만듭니다. 이 정책은 보안 태그 값TAG_VALUE_PERMANENT_ID이 있는 Compute Engine VM과 같은 Google Cloud 리소스에서 시작되는 요청만/api/paymentsURL 경로에 액세스하도록 허용합니다.cat >authz-policy-allow.yaml <<EOF name: my-authz-policy-allow target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - from: sources: resources: - tagValueIdSet: - ids: "TAG_VALUE_PERMANENT_ID" to: operations: - paths: - exact: "/api/payments" action: ALLOW EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.TAG_VALUE_PERMANENT_ID: 태그 값의 영구 ID입니다.
승인 정책을 만들고 YAML 파일을 가져옵니다.
다음 명령어 예시는 이전에 만든 정책 파일을 가져와 지정된Google Cloud 리전에 승인 정책을 만듭니다.
gcloud beta network-security authz-policies import my-authz-policy-allow \ --source=authz-policy-allow.yaml \ --location=LOCATION다음을 바꿉니다.
LOCATION: Google Cloud 리전입니다.
승인 결정을 위임하는 승인 정책
이 섹션의 예에서는 Service Extensions를 통해 승인 결정을 다음 서비스에 위임하는 승인 정책을 만듭니다.
- 사용자 관리 서비스
- Google 관리형 서비스
사용자 관리 서비스에 승인 결정 위임
승인 확장 프로그램인 Service Extensions를 통해 승인 결정을 사용자 관리 서비스에 위임하도록 승인 정책을 구성할 수 있습니다.
전역 및 교차 리전 부하 분산기의 경우 승인 확장 프로그램은 사용자 관리 Google Cloud 백엔드 서비스에서 실행할 수 있습니다.
리전 부하 분산기의 경우 승인 확장 프로그램은 사용자 관리 Google Cloud 백엔드 서비스와 FQDN 기반 서비스 모두에서 실행할 수 있습니다.
이 예시 설정에서는 authz-service이라는 사용자 관리형 Google Cloud 백엔드 서비스(콜아웃 백엔드 서비스라고도 함)를 만들었다고 가정합니다.
만드는 방법을 자세히 알아보려면 사용자 관리 호출 백엔드 서비스 구성을 참고하세요.
FQDN 기반 서비스의 경우 이 예시 설정에서는 커스텀 서비스가 자체 VPC에 배포되고, ext_authz 프로토콜을 지원하며, 정규화된 도메인 이름 mycustomauthz.internal.net으로 액세스할 수 있다고 가정합니다.
전역 및 교차 리전
전역 외부 애플리케이션 부하 분산기 또는 교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 결정을 사용자 관리 서비스에 위임합니다.
YAML 파일에서 승인 확장 프로그램을 정의합니다. 승인 확장 프로그램은 백엔드 서비스 (
authz-service)에서 실행되며ext_authz프로토콜을 지원합니다.cat >authz-extension.yaml <<EOF name: my-authz-ext authority: ext11.com loadBalancingScheme: LB_SCHEME service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/authz-service forwardHeaders: - Authorization failOpen: false timeout: "0.1s" wireFormat: EXT_AUTHZ_GRPC EOFgcloud service-extensions authz-extensions import명령어를 사용하여 승인 확장 프로그램 YAML 파일을 가져와 승인 확장 프로그램을 만듭니다.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=global다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 교차 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.
YAML 파일에서 승인 정책을 정의합니다. 승인 정책은
customProvider필드의 승인 확장 프로그램에 승인을 위임합니다.이 정책은 요청에 비어 있지 않은
Authorization헤더가 포함된 경우example.com/api/paymentsURL 경로를 향하는 모든 트래픽에 대해my-authz-ext승인 확장 프로그램을 호출합니다.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - to: operations: - hosts: - exact: "example.com" - paths: - exact: "/api/payments" when: 'request.headers["Authorization"] != ""' action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/global/authzExtensions/my-authz-ext" EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 교차 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
gcloud network-security authz-policies import명령어를 사용하여 승인 정책 YAML 파일을 가져와 승인 정책을 만듭니다.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=global
리전
리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 결정을 사용자 관리 서비스에 위임합니다.
YAML 파일에서 승인 확장 프로그램을 정의합니다. 승인 확장 프로그램은 백엔드 서비스 또는 FQDN 기반 서비스에서 실행할 수 있습니다.
cat >authz-extension.yaml <<EOF name: my-authz-ext authority: ext11.com loadBalancingScheme: LB_SCHEME service: BACKEND_SERVICE_URI_OR_FQDN forwardHeaders: - Authorization failOpen: false timeout: "0.1s" wireFormat: EXT_AUTHZ_GRPC EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.BACKEND_SERVICE_URI_OR_FQDN: 서비스는 다음 중 하나일 수 있습니다.https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/backendServices/authz-service형식의 리전 백엔드 서비스 리소스 URI- Cloud DNS로 확인할 수 있는 정규화된 도메인 이름(예:
mycustomauthz.extension.net)
gcloud service-extensions authz-extensions import명령어를 사용하여 승인 확장 프로그램 YAML 파일을 가져와 승인 확장 프로그램을 만듭니다.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATIONLOCATION을 Google Cloud콜아웃 백엔드 서비스가 구성된 리전으로 바꿉니다.
YAML 파일에서 승인 정책을 정의합니다. 승인 정책은
customProvider필드의 승인 확장 프로그램에 승인을 위임합니다.이 정책은 요청에 비어 있지 않은
Authorization헤더가 포함된 경우example.com/api/paymentsURL 경로를 향하는 모든 트래픽에 대해my-authz-ext승인 확장 프로그램을 호출합니다.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - paths: - exact: "/api/payments" when: 'request.headers["Authorization"] != ""' action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
gcloud network-security authz-policies import명령어를 사용하여 승인 정책 YAML 파일을 가져와 승인 정책을 만듭니다.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONLOCATION을 부하 분산기가 구성된 Google Cloud리전으로 바꿉니다.
승인 확장 프로그램에 대한 자세한 내용은 승인 확장 프로그램 구성을 참고하세요.
승인 결정을 Model Armor에 위임
승인 결정을 Model Armor에 위임하도록 승인 정책을 구성할 수 있습니다.
시작하기 전에 Model Armor 템플릿을 만드세요. 이 예시 설정에서 승인 정책은 승인 확장 프로그램을 가리키고, 승인 확장 프로그램은 Model Armor를 가리킵니다.
리전 외부 애플리케이션 부하 분산기 또는 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 결정을 Model Armor에 위임합니다.
리전
YAML 파일에서 승인 확장 프로그램을 정의합니다. 승인 확장 프로그램은 Model Armor 요청 및 응답 템플릿을 가리킵니다.
cat >authz-extension.yaml <<EOF name: my-authz-extension loadBalancingScheme: INTERNAL_MANAGED service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID", "request_template_id": "projects/PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID" } ]' failOpen: true EOF다음을 바꿉니다.
- LOCATION: 템플릿의 위치
- PROJECT_ID: 템플릿이 속한 프로젝트의 ID
- RESPONSE_TEMPLATE_ID: 응답 템플릿의 ID
- REQUEST_TEMPLATE_ID: 요청 템플릿의 ID
gcloud beta service-extensions authz-extensions import명령어를 사용하여 승인 확장 프로그램 YAML 파일을 가져와 승인 확장 프로그램을 만듭니다.gcloud beta service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATION
LOCATION을 부하 분산기가 있는 Google Cloud리전으로 바꿉니다.
YAML 파일에서 승인 정책을 정의합니다. 승인 정책은
customProvider필드의 승인 확장 프로그램에 승인을 위임합니다.policyProfile의 값은CONTENT_AUTHZ입니다.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: INTERNAL_MANAGED resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOF다음을 바꿉니다.
PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
gcloud beta network-security authz-policies import명령어를 사용하여 승인 정책 YAML 파일을 가져와 승인 정책을 만듭니다.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATION
LOCATION을 부하 분산기가 구성된 Google Cloud리전으로 바꿉니다.
승인 결정을 IAP(Identity-Aware Proxy)에 위임
전역 외부 애플리케이션 부하 분산기 및 리전 간 내부 애플리케이션 부하 분산기의 경우 승인 확장 프로그램을 통해 승인 결정을 IAP에 위임할 수 없습니다. 이러한 부하 분산기의 경우 승인 정책 리소스의 customProvider 필드를 통해 승인 결정을 IAP에 위임할 수 있습니다.
리전 외부 애플리케이션 부하 분산기 및 리전 내부 애플리케이션 부하 분산기의 경우 승인 확장 프로그램을 통해 승인 결정을 IAP에 위임하도록 승인 정책을 구성할 수 있습니다.
전역 및 교차 리전
다음 예시에서는 10.0.0.0/24 IP 주소 블록에서 시작된 모든 요청에 대해 모든 승인 결정이 IAP에 위임됩니다. 요청이 10.0.0.0/24 외부의 IP 주소에서 시작되면 이 정책과 일치하지 않으며 이 특정 규칙에 따라 IAP에서 평가되지 않습니다.
YAML 파일에서 승인 정책을 정의합니다. 승인 정책은
customProvider필드를 통해 IAP에 승인을 위임합니다.cat >authz-policy-iap.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules/LB_FORWARDING_RULE" httpRules: - from: sources: - ipBlock: - prefix: "10.0.0.0" length: 24 action: CUSTOM customProvider: cloudIap: {} EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 전역 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 교차 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
gcloud network-security authz-policies import명령어를 사용하여 승인 정책 YAML 파일을 가져와 승인 정책을 만듭니다.gcloud network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-iap.yaml \ --location=global
리전
리전 외부 애플리케이션 부하 분산기나 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 다음 단계에 따라 승인 확장 프로그램을 사용하여 승인 결정을 IAP에 위임합니다.
YAML 파일에서 승인 확장 프로그램을 정의합니다. 승인 확장 프로그램이 IAP를 가리킵니다.
cat >authz-extension.yaml <<EOF name: my-authz-ext loadBalancingScheme: LB_SCHEME service: iap.googleapis.com failOpen: false EOF테스트 실행 모드에서 실행되도록 IAP를 구성하여 승인 정책을 적용하지 않고 실제 프로덕션 트래픽으로 승인 정책을 테스트할 수도 있습니다. 이렇게 하면 정책을 확인하고 구성 오류로 인한 트래픽 중단 위험을 최소화할 수 있습니다.
cat >authz-extension.yaml <<EOF name: my-authz-ext loadBalancingScheme: LB_SCHEME service: iap.googleapis.com failOpen: false metadata:' iamEnforcementMode: DRY_RUN ' EOF다음을 바꿉니다.
- LB_SCHEME: 부하 분산 스키마입니다.
리전 외부 애플리케이션 부하 분산기의 경우 스키마를
EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.
- LB_SCHEME: 부하 분산 스키마입니다.
리전 외부 애플리케이션 부하 분산기의 경우 스키마를
gcloud service-extensions authz-extensions import명령어를 사용하여 승인 확장 프로그램 YAML 파일을 가져와 승인 확장 프로그램을 만듭니다.gcloud service-extensions authz-extensions import my-authz-ext \ --source=authz-extension.yaml \ --location=LOCATIONLOCATION을 승인 확장 프로그램이 구성된 Google Cloud리전으로 바꿉니다.
YAML 파일에서 승인 정책을 정의합니다. 승인 정책은
customProvider필드의 승인 확장 프로그램에 승인을 위임합니다.cat >authz-policy-custom.yaml <<EOF name: my-authz-policy-custom target: loadBalancingScheme: LB_SCHEME resources: - "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/LOCATION/forwardingRules/LB_FORWARDING_RULE" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-authz-ext" EOF다음을 바꿉니다.
LB_SCHEME: 부하 분산 스키마입니다. 리전 외부 애플리케이션 부하 분산기의 경우 스키마를EXTERNAL_MANAGED로 설정합니다. 리전 내부 애플리케이션 부하 분산기의 경우 스키마를INTERNAL_MANAGED로 설정합니다.PROJECT_ID: Google Cloud 프로젝트의 ID입니다.LOCATION: Google Cloud 리전입니다.LB_FORWARDING_RULE: 부하 분산기의 전달 규칙 이름입니다.
gcloud network-security authz-policies import명령어를 사용하여 승인 정책 YAML 파일을 가져와 승인 정책을 만듭니다.gcloud beta network-security authz-policies import my-authz-policy-custom \ --source=authz-policy-custom.yaml \ --location=LOCATIONLOCATION을 부하 분산기가 구성된 Google Cloud리전으로 바꿉니다.
Cloud Logging의 승인 정책 로그 이해
요청이 허용되거나 거부될 때 승인 정책이 로깅되는 방식을 보려면 다음 섹션을 참조하세요.
요청이 ALLOW 또는 DENY 정책과 일치하지 않음
요청이 ALLOW 또는 DENY 정책과 일치하지 않으면 DENY 정책에 따라 요청이 허용되고 allowed_as_no_deny_policies_matched_request로 로깅됩니다. 반대로 ALLOW 정책은 이 요청을 거부하고 denied_as_no_allow_policies_matched_request로 로깅합니다. 정책 중 하나가 요청을 거부하기 때문에 요청이 거부됩니다.
전역 외부 애플리케이션 부하 분산기를 사용하는 경우
statusDetails가 로그에서denied_by_authz_policy로 설정됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "denied_as_no_allow_policies_matched_request" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" statusDetails: "denied_by_authz_policy" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기, 교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우
proxyStatus가 로그에서error=\"http_request_error\"; details=\"denied_by_authz_policy\"로 설정됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "denied_as_no_allow_policies_matched_request" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\"" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }
요청이 DENY 정책과 일치함
요청이 DENY 정책과 일치하면 요청이 거부되고 요청을 거부한 정책이 로깅됩니다.
전역 외부 애플리케이션 부하 분산기를 사용하는 경우 로그에서
statusDetails가denied_by_authz_policy로 설정되고 요청을 거부한 정책의 이름이policies에 로깅됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "name: "projects/12345567/locations/global/authzPolicies/deny-authz-policy-test"" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" statusDetails: "denied_by_authz_policy" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기, 교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우
proxyStatus가error=\"http_request_error\"; details=\"denied_by_authz_policy\"로 설정되고 정책 이름이policies에 로깅됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "name: "projects/12345567/locations/$REGION/authzPolicies/deny-authz-policy-test"" result: "DENIED" } ] result: "DENIED" } backendTargetProjectNumber: "projects/12345567" remoteIp: "00.100.11.104" proxyStatus: "error=\"http_request_error\"; details=\"denied_by_authz_policy\"" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }
요청이 DENY 정책과 일치하지 않지만 ALLOW 정책과 일치
요청이 DENY 정책과 일치하지 않지만 ALLOW 정책과 일치하면 요청이 허용됩니다. 로그에서 이 작업은 DENY 정책에 대해 allowed_as_no_deny_policies_matched_request로 로깅됩니다. 요청을 허용한 정책도 로깅됩니다.
전역 외부 애플리케이션 부하 분산기를 사용하는 경우 로그에
statusDetails가 없습니다. 요청을 허용한 정책도policies에 로깅됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "name: "projects/12345567/locations/global/authzPolicies/allow-authz-policy-test"" result: "ALLOWED" } ] result: "ALLOWED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }리전 내부 애플리케이션 부하 분산기, 리전 외부 애플리케이션 부하 분산기, 교차 리전 내부 애플리케이션 부하 분산기를 사용하는 경우 로그에
proxyStatus필드가 없습니다. 요청을 허용한 정책도policies에 로깅됩니다. 아래 예시를 참조하세요.{ httpRequest: {8} insertId: "example-id" jsonPayload: { @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry" authzPolicyInfo: { policies: [ 0: { details: "allowed_as_no_deny_policies_matched_request" result: "ALLOWED" } 1: { details: "name: "projects/12345567/locations/$REGION/authzPolicies/allow-authz-policy-test"" result: "ALLOWED" } ] result: "ALLOWED" } backendTargetProjectNumber: "projects/12345567" cacheDecision: [2] remoteIp: "00.100.11.104" } logName: "projects/example-project/logs/requests" receiveTimestamp: "2024-08-28T15:33:56.046651035Z" resource: {2} severity: "WARNING" spanId: "3e1a09a8e5e3e14d" timestamp: "2024-08-28T15:33:55.355042Z" trace: "projects/example-project/traces/8c8b3dbf9a19c85954d0fa2d958ca509" }