비공개 웹 애플리케이션에 대한 보안 액세스

이 문서에서는 비공개 웹 애플리케이션에 대한 액세스를 보호하기 위해 Chrome Enterprise Premium 보안 게이트웨이를 설정하는 방법을 설명합니다.

Chrome Enterprise Premium 보안 게이트웨이는 포워드 프록시로 작동하여 제로 트러스트 액세스 프레임워크를 적용하고, 비공개 웹 애플리케이션에 액세스하는 사용자에 대한 세부적인 컨텍스트 인식 제어를 제공합니다.

비공개 웹 애플리케이션에 대한 액세스 보안 작동 방식

보안 게이트웨이는 보안 터널을 설정하고 컨텍스트 인식 액세스 정책을 적용하여 비공개 애플리케이션을 비공개로 유지하고 공개 인터넷 노출로부터 보호합니다. 클라이언트 측 브라우저 구성은 보안 게이트웨이 프록시 엔드포인트를 통해 이러한 애플리케이션의 트래픽을 전달합니다. 그러면 보안 게이트웨이가 관련 액세스 정책을 적용하고 허용된 경우 요청을 대상 애플리케이션으로 라우팅합니다.

보안 게이트웨이는 다음 환경에서 호스팅되는 비공개 웹 애플리케이션을 보호하는 데 도움이 됩니다.

  • Google Cloud 프로젝트: 보안 게이트웨이는 Google Cloud VPC 네트워크에서 실행되는 애플리케이션에 대한 직접 액세스를 제공할 수 있습니다.

  • Google Cloud 이 아닌 경우(온프레미스 데이터 센터 또는 기타 클라우드): 먼저Google Cloud 의 비공개 VPC 네트워크와Google Cloud 이 아닌 네트워크 간에 연결을 설정해야 합니다. 일반적으로 Cloud VPN 또는 Cloud Interconnect를 사용하여 이 작업을 실행합니다. 그러면 보안 게이트웨이가 연결을 사용하여 트래픽을 비공개 VPC 네트워크로 전송하고, 이 네트워크는 트래픽을 비Google Cloud 환경으로 라우팅합니다.

필요한 역할

관리자에게 다음 역할을 부여해 달라고 요청하세요.

Identity and Access Management (IAM) 역할에 대해 자세히 알아보세요.

시작하기 전에

보안 게이트웨이를 설정하기 전에 다음 사항을 확인하세요.

셸 환경 설정

설정 프로세스를 간소화하고 보안 게이트웨이 API와 상호작용하려면 작업 셸에서 다음 환경 변수를 정의하세요.

  • 일반 매개변수
    PROJECT_ID=PROJECT_ID
          

    다음을 바꿉니다.

    • PROJECT_ID: 보안 게이트웨이가 생성된 프로젝트의 ID입니다.
  • 보안 게이트웨이 매개변수
    SECURITY_GATEWAY_ID=SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="SECURITY_GATEWAY_DISPLAY_NAME"
          

    다음을 바꿉니다.

    • SECURITY_GATEWAY_ID: 만들려는 보안 게이트웨이의 ID입니다. ID는 최대 63자이며 소문자, 숫자, 하이픈을 포함할 수 있습니다. 첫 번째 글자는 문자여야 하고, 마지막 글자는 문자 또는 숫자일 수 있습니다.
    • SECURITY_GATEWAY_DISPLAY_NAME: 보안 게이트웨이의 사람이 읽을 수 있는 이름입니다. 이름의 최대 길이는 63자(영문 기준)이며 인쇄 가능한 문자를 포함할 수 있습니다.

보안 게이트웨이 만들기

Chrome Enterprise Premium 보안 게이트웨이는 애플리케이션에 대한 보안 연결을 설정하기 위한 기본 구성요소입니다.

콘솔

보안 게이트웨이를 만들려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 보안 게이트웨이 페이지로 이동합니다.
    보안 게이트웨이로 이동
  2. 보안 게이트웨이를 만들 프로젝트를 선택합니다.
  3. 보안 게이트웨이를 만들려면 새 게이트웨이 만들기를 클릭하고 게이트웨이 생성 프로세스가 완료될 때까지 기다립니다. Google Cloud 콘솔의 알림 섹션에서 진행 상황을 추적할 수 있습니다.

gcloud

gcloud를 사용하여 보안 게이트웨이를 만들려면 다음 명령어를 실행합니다.

gcloud beyondcorp security-gateways create SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --display-name="SECURITY_GATEWAY_DISPLAY_NAME" \
    --service-discovery={}
      

REST

REST API를 사용하여 보안 게이트웨이를 만들려면 다음 명령어를 실행합니다.

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{ "display_name": "SECURITY_GATEWAY_DISPLAY_NAME", "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways?security_gateway_id=SECURITY_GATEWAY_ID"
      

비공개 웹 애플리케이션 구성

보안 게이트웨이에서 특정 애플리케이션 리소스를 정의하려면 연결 및 적절한 라우팅을 사용 설정하는 데 필요한 권한과 네트워크 설정을 구성해야 합니다.

서비스 계정에 권한을 부여합니다.

VPC 네트워크로 트래픽을 전송하려면 보안 게이트웨이에 위임 서비스 계정에 부여된 특정 IAM 권한이 필요합니다. 이렇게 하면 보안 게이트웨이가 Google Cloud VPC 내에 호스팅되든 Cloud VPN 또는 Cloud Interconnect를 통해 연결된 비Google Cloud 환경에 호스팅되든 비공개 애플리케이션에 연결할 수 있습니다.

서비스 계정에 권한을 부여하려면 다음 단계를 따르세요.

  1. 위임 서비스 계정 이메일을 식별하기 위해 보안 게이트웨이의 세부정보를 가져옵니다. 이메일은 응답의 delegatingServiceAccount 필드에 있습니다.

    gcloud

    gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
        --project=PROJECT_ID \
        --location=global
                   

    REST

    curl \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
                   
  2. 서비스 계정 및 타겟 VPC 프로젝트의 환경 변수를 설정합니다. 서비스 계정 이메일을 가져오려면 다음 명령어를 사용하면 됩니다.
    DELEGATING_SERVICE_ACCOUNT=`gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID --project=PROJECT_ID --location=global --format="value(delegatingServiceAccount)"`
          
  3. 비공개 VPC 프로젝트의 위임 서비스 계정에 roles/beyondcorp.upstreamAccess IAM 역할을 부여합니다.
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
        --role=roles/beyondcorp.upstreamAccess \
        --member=serviceAccount:DELEGATING_SERVICE_ACCOUNT
        
    PRIVATE_VPC_PROJECT_ID을 비공개 웹 앱이 배포되거나 Cloud VPN/Interconnect가 구성된 VPC 네트워크의 프로젝트 ID로 바꿉니다.

역할을 부여한 후 Identity and Access Management 정책이 적용되는 데 약 2분이 걸립니다.

네트워크 라우팅 및 방화벽 규칙 구성

보안 게이트웨이의 트래픽이 비공개 웹 애플리케이션에 도달하도록 방화벽 규칙, 네트워크 라우팅, DNS 설정을 구성합니다.

Google Cloud의 애플리케이션 방화벽 규칙

비공개 웹 애플리케이션이 Compute Engine VM, 내부 IP가 있는 Google Kubernetes Engine 서비스, 내부 TCP/UDP 부하 분산기 뒤와 같은 Google Cloud VPC 네트워크 내에서 호스팅되는 경우Google Cloud VPC 방화벽 규칙을 구성합니다. 이렇게 하면 보안 게이트웨이 IP 범위(136.124.16.0/20)에서 들어오는 인그레스 TCP 트래픽이 허용됩니다.

gcloud

gcloud를 사용하여 방화벽 규칙을 만들려면 다음 명령어를 실행합니다.

gcloud compute firewall-rules create FIREWALL_RULE_NAME \
   --project=PRIVATE_VPC_PROJECT_ID \
   --network=NETWORK_NAME \
   --allow=tcp \
   --source-ranges=136.124.16.0/20
      

다음을 바꿉니다.

  • FIREWALL_RULE_NAME: 방화벽 규칙의 이름입니다.
  • PRIVATE_VPC_PROJECT_ID: VPC 네트워크가 호스팅되는 프로젝트의 ID입니다.
  • NETWORK_NAME: 애플리케이션이 호스팅되는 VPC 네트워크의 이름입니다.

Google Cloud 이외 환경의 애플리케이션 방화벽 규칙

비공개 웹 애플리케이션이 온프레미스 데이터 센터 또는 다른 클라우드 제공업체의 네트워크에 있고 Cloud VPN 또는 Cloud Interconnect를 사용하여 Google CloudVPC에 연결된 경우 온프레미스 방화벽 또는 다른 클라우드 환경의 보안 그룹 및 네트워크 ACL과 같은 동등한 네트워크 보안 컨트롤에 방화벽 규칙을 구성합니다. 이렇게 하면 보안 게이트웨이 IP 범위(136.124.16.0/20)에서 인그레스 TCP 트래픽이 허용됩니다.

비Google Cloud 환경에서 보안 게이트웨이로 라우팅 구성

온프레미스 또는 기타 클라우드와 같은 비Google Cloud 환경에서 호스팅되는 비공개 애플리케이션의 양방향 통신을 용이하게 하려면 외부 네트워크에서 다음 보안 게이트웨이 IP 범위(136.124.16.0/20)로의 반환 경로를 만들어야 합니다.

비공개 네트워크가 Cloud VPN 또는 Cloud Interconnect를 통해 보안 게이트웨이 IP 범위에 연결할 수 있는지 확인합니다.

  • 동적 라우팅: Cloud Router와 함께 경계 게이트웨이 프로토콜 (BGP)과 같은 동적 라우팅을 사용하는 경우 Google Cloud 의 Cloud Router가 온프레미스 BGP 기기에 보안 게이트웨이 IP 범위를 명시적으로 공지하는지 확인합니다. BGP는 많은 경로를 동적으로 교환하지만 보안 게이트웨이 IP 범위에는 명시적 공지가 필요합니다.

    gcloud

    소스 범위가 공지되었는지 확인하려면 다음 명령어를 실행하세요.

    gcloud compute routers list-bgp-routes ROUTER_NAME \
    --peer=PEER_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --route-direction=OUTBOUND \
    --address-family=IPV4 \
    --destination-range=136.124.16.0/20
          

    다음을 바꿉니다.

    • ROUTER_NAME: Cloud Router의 이름입니다.
    • PEER_NAME: BGP 피어의 이름입니다.
    • REGION: 라우터가 있는 리전입니다.
    • PROJECT_ID: 라우터가 포함된 프로젝트의 ID입니다.
  • 정적 라우팅: 정적 경로를 사용하는 경우 라우터나 방화벽과 같은 온프레미스 네트워크 장비에 보안 게이트웨이 IP 범위별 경로를 수동으로 추가해야 합니다. 이러한 고정 경로는 보안 게이트웨이 IP 범위로 향하는 트래픽이 Cloud VPN 또는 Cloud Interconnect 연결을 통해 전송되어야 한다고 지정해야 합니다.

    정적 라우팅을 사용하는 경우 Cloud VPN은 다음 지원되는 리전 중 하나에 있어야 합니다.

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

보안 게이트웨이 비공개 호스트 이름 확인을 위한 DNS 구성

보안 게이트웨이가 비공개 애플리케이션 호스트 이름을 확인하려면Google Cloud VPC 네트워크가 Cloud DNS를 사용하여 호스트 이름을 확인할 수 있어야 합니다. 구체적인 Cloud DNS 구성은 비공개 DNS 레코드가 권위적으로 호스팅되는 위치에 따라 달라집니다.

  • Cloud DNS 비공개 영역을 사용하는 Google Cloud 내의 애플리케이션: 비공개 애플리케이션이 Google Cloud 에서 호스팅되고 DNS 레코드가 VPC 네트워크와 연결된 Cloud DNS 비공개 영역 내에서 관리되는 경우 영역이 올바르게 구성되고 액세스할 수 있는지 확인합니다. 보안 게이트웨이는 VPC의 기존 Cloud DNS 확인 기능을 사용합니다.

  • Google Cloud 환경에 있지 않거나 외부 DNS 서버를 사용하는 애플리케이션: 비공개 애플리케이션이Google Cloud환경 (온프레미스 또는 기타 클라우드)에 있거나 DNS 레코드가 VPC의 Cloud DNS 비공개 영역 외부의 DNS 서버에 의해 관리되는 경우 이러한 비공개 도메인에 대한 쿼리를 전달하도록 Cloud DNS를 구성해야 합니다. 일반적으로 VPC 내에 Cloud DNS 전달 영역을 만들어야 합니다. 이러한 영역은 지정된 비공개 도메인에 대한 DNS 쿼리를 온프레미스 또는 기타 클라우드와 같은 권한 있는 비공개 DNS 서버로 전달합니다.

DNS 구성에 대한 자세한 내용은 전달 영역 만들기를 참고하세요.

애플리케이션 리소스 만들기

비공개 웹 애플리케이션에 대한 액세스 권한을 제공하려면 애플리케이션 리소스를 만들어 보안 게이트웨이 프레임워크 내에서 애플리케이션을 설정해야 합니다. 이 리소스는 보안 게이트웨이가 호스트 이름을 기반으로 애플리케이션의 트래픽을 식별하는 방법과 해당 트래픽을 라우팅할 위치를 정의합니다.

  1. 다음 명령어를 실행하여 필요한 환경 변수를 설정합니다.
       APPLICATION_ID=APPLICATION_ID
       APP_DISPLAY_NAME="APP_DISPLAY_NAME"
       HOST_NAME=HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=PRIVATE_NETWORK_RESOURCE_NAME
       
    다음을 바꿉니다.
    • APPLICATION_ID: 애플리케이션 리소스의 고유 ID입니다.
    • APP_DISPLAY_NAME: 표시할 사람이 읽을 수 있는 이름입니다.
    • HOST_NAME: 사용자가 액세스하는 기본 호스트 이름입니다 (예: private.local).
    • PRIVATE_NETWORK_RESOURCE_NAME: VPC 네트워크의 전체 리소스 이름 (예: projects/my-project/global/networks/my-network)
  2. 애플리케이션 리소스를 만듭니다.

    콘솔

    Google Cloud 콘솔을 사용하여 애플리케이션 리소스를 만들려면 다음을 수행합니다.

    1. Google Cloud 콘솔에서 보안 게이트웨이 페이지로 이동합니다.
      보안 게이트웨이로 이동
    2. 애플리케이션을 추가하려면 애플리케이션 추가를 클릭합니다.
    3. 애플리케이션 유형으로 비공개 애플리케이션을 선택합니다.
    4. 애플리케이션 세부정보를 입력합니다.
      • 애플리케이션 이름: 이름을 입력합니다(예: GitHub).
      • 도메인 매처: 보안 게이트웨이를 통해 라우팅할 도메인 패턴의 쉼표로 구분된 목록을 입력합니다. domain:port 형식으로 포트를 포함합니다. 와일드 카드 (*)를 사용할 수 있습니다. 예를 들면 github.com:443입니다.
    5. VPC 네트워크 구성:
      • 현재 프로젝트: VPC 네트워크가 현재 프로젝트에 있는 경우 드롭다운에서 VPC 네트워크를 선택합니다.
      • 다른 프로젝트: VPC 네트워크가 다른 Google Cloud 프로젝트에 있는 경우 VPC 네트워크의 전체 리소스 이름(예: projects/my-project/global/networks/my-network)을 지정합니다.
    6. 선택사항: 이그레스 정책 정의: 드롭다운 메뉴에서 하나 이상의 Google Cloud 리전을 선택합니다.
    7. 선택사항: 액세스 정책 정의: Access Context Manager 액세스 정책을 선택합니다. 이 가이드에서는 이 단계를 건너뛰어도 됩니다.
    8. 애플리케이션 리소스를 만들려면 만들기를 클릭합니다.

    gcloud

    gcloud를 사용하여 애플리케이션 리소스를 만들려면 다음 명령어를 실행합니다.

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME"
            

    이그레스 리전을 지정하려면 (예: 정적 경로를 사용하는 경우) --egress-regions 플래그를 추가합니다.

    gcloud beyondcorp security-gateways applications create APPLICATION_ID \
        --project=PROJECT_ID \
        --security-gateway=SECURITY_GATEWAY_ID \
        --location=global \
        --display-name="APP_DISPLAY_NAME" \
        --endpoint-matchers="hostname=HOST_NAME,ports=[443]" \
        --upstreams=network=name="PRIVATE_NETWORK_RESOURCE_NAME",egressPolicy=regions=us-central1
            

    us-central1을 리전 정적 라우팅 설정과 일치하는 Google Cloud 리전(예: europe-west1 또는 asia-northeast1)으로 바꿉니다. 특정 리전 정적 라우팅 요구사항이 없는 경우 구성에서 이그레스 정책을 생략할 수 있습니다.

    REST

    API로 애플리케이션 리소스를 만들려면 다음 단계를 완료하세요.

    1. application.json 파일을 만듭니다.

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      이그레스 리전을 지정하려면 (예: 정적 경로를 사용하는 경우) 업스트림 구성에 egress_policy을 추가합니다.

      {
      "display_name": "APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "HOST_NAME", "ports": [443]}
      ],
      "upstreams": [{
         "network": {
            "name": "PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      us-central1을 리전 정적 라우팅 설정과 일치하는 Google Cloud 리전(예: europe-west1 또는 asia-northeast1)으로 바꿉니다. 특정 리전 정적 라우팅 요구사항이 없는 경우 구성에서 이그레스 정책을 생략할 수 있습니다.

    2. Create API 메서드를 호출합니다.

      curl \
          -H "Authorization: Bearer $(gcloud auth print-access-token)" \
          -H "Content-Type: application/json" \
          -X POST \
          -d @application.json \
          "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications?application_id=APPLICATION_ID"
                

액세스 정책 구성

액세스 정책을 적용하여 애플리케이션 수준에서 액세스를 제어할 수 있습니다. 액세스 정책이 구성되지 않은 경우 애플리케이션에 대한 액세스가 기본적으로 거부됩니다.

콘솔

여러 애플리케이션의 정책 만들기

액세스 정책을 구성하려면 다음 단계를 따르세요.

  1. 보안 게이트웨이에 연결된 여러 애플리케이션에 적용되는 정책을 만들려면 정책 페이지로 이동하세요.
    정책으로 이동
  2. 애플리케이션에 액세스 정책을 추가하려면 정책 만들기를 클릭합니다.
  3. 드롭다운 목록에서 정책을 적용할 애플리케이션을 선택합니다.
  4. 정책에 주 구성원을 추가합니다.

    주 구성원은 사용자, 그룹, 도메인 또는 서비스 계정일 수 있습니다. 이러한 주 구성원에게는 할당한 액세스 수준에 따라 액세스 권한이 부여되거나 거부됩니다.

    1. 주 구성원을 추가하려면 주 구성원 추가를 클릭합니다.
    2. 주 구성원 필드에 사용자, 그룹, 서비스 계정의 이메일 주소 또는 도메인 이름을 입력합니다.
    3. 액세스 수준 드롭다운에서 사전 정의된 컨텍스트 인식 액세스 수준을 하나 이상 선택합니다. 주 구성원이 선택한 액세스 수준의 조건을 충족하는 경우에만 액세스가 허용됩니다.

    주 구성원을 더 추가하려면 주 구성원 추가를 다시 클릭하고 하위 단계를 반복합니다.

    Access Context Manager에서 액세스 수준을 만들고 관리할 수 있습니다.

  5. 애플리케이션에 정책을 적용하려면 정책 만들기를 클릭합니다.

애플리케이션 수준 액세스 정책 수정

  1. 단일 애플리케이션의 정책을 수정하려면 애플리케이션 페이지로 이동하세요.
    애플리케이션으로 이동
  2. 수정하려는 애플리케이션을 찾으려면 다음 단계를 따르세요.
    1. 애플리케이션 목록에서 수정할 애플리케이션을 검색합니다.
    2. 애플리케이션 세부정보를 보려면 추가 작업 메뉴 ()를 클릭하고 세부정보 보기를 선택합니다.
  3. 애플리케이션을 수정하려면 수정을 클릭합니다.
  4. 정책에 주 구성원을 추가합니다.

    주 구성원은 사용자, 그룹, 도메인 또는 서비스 계정일 수 있습니다. 이러한 주 구성원에게는 할당한 액세스 수준에 따라 액세스 권한이 부여되거나 거부됩니다.

    1. 주 구성원을 추가하려면 주 구성원 추가를 클릭합니다.
    2. 주 구성원 필드에 사용자, 그룹, 서비스 계정의 이메일 주소 또는 도메인 이름을 입력합니다.
    3. 액세스 수준 드롭다운 목록에서 사전 정의된 컨텍스트 인식 액세스 수준을 하나 이상 선택합니다. 주 구성원이 선택한 액세스 수준의 조건을 충족하는 경우에만 액세스가 허용됩니다.

    주 구성원을 더 추가하려면 주 구성원 추가를 다시 클릭하고 하위 단계를 반복합니다.

    Access Context Manager에서 액세스 수준을 만들고 관리할 수 있습니다.

  5. 애플리케이션에 정책을 적용하려면 저장을 클릭합니다.

gcloud

서비스 검색 게이트웨이 수준 바인딩 추가

사용자에게 애플리케이션 액세스 권한을 부여하기 전에 사용자에게 보안 게이트웨이 수준의 서비스 검색 권한이 있는지 확인하세요.

gcloud beyondcorp security-gateways add-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

다음을 바꿉니다.

  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • MEMBER: 서비스 검색 역할을 할당할 사용자, 그룹 또는 서비스 계정입니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

애플리케이션 수준 바인딩 추가

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

다음을 바꿉니다.

  • APPLICATION_ID: 애플리케이션 리소스의 ID
  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • MEMBER: 서비스 검색 역할을 할당할 사용자, 그룹 또는 서비스 계정입니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

조건부 바인딩 추가

조건이 있는 바인딩을 추가할 수도 있습니다. 조건은 특정 위치에서 시작된 사용자의 IP 주소와 같은 요구사항을 지정합니다. (액세스 수준은 조직 수준 액세스 정책 또는 범위가 지정된 액세스 정책에서 정의할 수 있습니다.)

다음 예시 명령어는 소스 IP 주소가 지정된 액세스 수준 내에 있는 경우에만 액세스 권한을 부여합니다.

gcloud beyondcorp security-gateways applications add-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

서비스 검색 게이트웨이 수준 바인딩 삭제

보안 게이트웨이 수준에서 사용자의 서비스 검색 권한을 취소합니다.

gcloud beyondcorp security-gateways remove-iam-policy-binding SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.serviceDiscoveryUser" \
    --member=MEMBER
  

다음을 바꿉니다.

  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • MEMBER: 서비스 검색 역할을 삭제하려는 사용자, 그룹 또는 서비스 계정입니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

애플리케이션 수준 바인딩 삭제

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER
  

다음을 바꿉니다.

  • APPLICATION_ID: 애플리케이션 리소스의 ID
  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • MEMBER: 서비스 검색 역할을 삭제하려는 사용자, 그룹 또는 서비스 계정입니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

조건부 바인딩 삭제

조건이 있는 바인딩을 삭제할 수도 있습니다. 조건은 특정 위치에서 시작된 사용자의 IP 주소와 같은 요구사항을 지정합니다. (액세스 수준은 조직 수준 액세스 정책 또는 범위가 지정된 액세스 정책에서 정의할 수 있습니다.)

다음 예시 명령어는 지정된 액세스 수준이 있는 조건부 바인딩을 삭제합니다.

gcloud beyondcorp security-gateways applications remove-iam-policy-binding APPLICATION_ID \
    --security-gateway=SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --role="roles/beyondcorp.sgApplicationUser" \
    --member=MEMBER \
    --condition="expression='accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels,title=Source IP must be in US"
  

REST

액세스 정책을 안전하게 업데이트

setIamPolicy 명령어는 기존 정책 전체를 제공된 정책으로 바꿉니다. 기존 권한이 실수로 삭제되지 않도록 하려면 다음 '읽기-수정-쓰기' 패턴을 사용하는 것이 좋습니다. 이 패턴은 기존 권한이 실수로 삭제되는 것을 방지하는 데 도움이 됩니다.

  1. 읽기: 현재 액세스 정책을 파일에 저장합니다.
  2. 수정: 로컬에서 정책 파일을 수정하여 권한을 추가하거나 변경합니다.
  3. 쓰기: 업데이트된 정책 파일을 적용합니다.

서비스 검색 게이트웨이 수준 정책 설정

서비스 검색 권한을 부여하려면 개별 애플리케이션이 아닌 보안 게이트웨이에 액세스 정책을 설정해야 합니다. 이는 동일한 '읽기-수정-쓰기' 패턴을 따릅니다.

현재 정책을 가져와 gateway_policy.json이라는 파일에 저장합니다.

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:getIamPolicy" > gateway_policy.json
  

그런 다음 텍스트 편집기에서 gateway_policy.json 파일을 열고 애플리케이션 수준 수정과 마찬가지로 roles/beyondcorp.serviceDiscoveryUser 역할의 members 목록에 필요한 주 구성원을 추가합니다.

gateway_policy.json 파일은 다음 예와 유사합니다.

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.serviceDiscoveryUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

정책 바인딩에 serviceAccount, user, group, principal, principalSet과 같은 다른 유형의 구성원을 추가할 수도 있습니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

업데이트된 정책을 적용합니다.

jq '{policy: .}' gateway_policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID:setIamPolicy"
  

애플리케이션 수준 액세스 정책 설정

현재 정책 가져오기

현재 정책을 가져옵니다. etag 필드는 여러 관리자가 동시에 변경하는 경우 업데이트가 충돌하지 않도록 방지합니다.

다음 명령어는 정책을 검색하고 policy.json이라는 파일에 저장합니다.

curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:getIamPolicy" > policy.json
  

다음을 바꿉니다.

  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • APPLICATION_ID: 애플리케이션 리소스의 ID

이 명령어는 현재 정책이 포함된 policy.json 파일을 만듭니다.

정책 파일 수정

보안 게이트웨이를 사용할 수 있는 액세스 권한을 그룹에 부여하려면 다음 단계를 따르세요.

  1. 텍스트 편집기에서 policy.json 파일을 엽니다.
  2. roles/beyondcorp.securityGatewayUser 역할의 members 목록에 그룹을 추가합니다.

policy.json 파일은 다음 예와 유사합니다.

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
      

그룹을 추가하려면 members 배열에 새 항목을 추가합니다. 앞의 항목 뒤에 쉼표를 포함합니다. 다음 예에서는 new-group@example.com를 추가합니다.

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:existing-group@example.com",
        "group:new-group@example.com"
      ]
    }
  ],
  "etag": "BwXN8_d-bOM="
}
    

정책 바인딩에 serviceAccount, user, group, principal, principalSet과 같은 다른 유형의 구성원을 추가할 수도 있습니다. 자세한 내용은 IAM 주 구성원을 참고하세요.

업데이트된 정책 적용

policy.json 파일을 수정하고 저장한 후 setIamPolicy 명령어를 사용하여 리소스에 적용합니다. 이 명령어는 파일의 etag를 사용하여 올바른 버전을 업데이트하도록 합니다.

jq '{policy: .}' policy.json | curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @- \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID/applications/APPLICATION_ID:setIamPolicy"
  

다음을 바꿉니다.

  • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
  • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID
  • APPLICATION_ID: 애플리케이션 리소스의 ID

조건부 액세스 정책 추가

조건이 있는 액세스 정책을 설정할 수도 있습니다. 조건은 특정 위치에서 시작된 사용자의 IP 주소와 같은 요구사항을 지정합니다. (액세스 수준은 조직 수준 액세스 정책 또는 범위가 지정된 액세스 정책에서 정의할 수 있습니다.)

다음 예시 정책은 소스 IP 주소가 지정된 액세스 수준 내에 있는 경우에만 액세스 권한을 부여합니다.

{
  "version": 3,
  "bindings": [
    {
      "role": "roles/beyondcorp.sgApplicationUser",
      "members": [
        "group:group@example.com"
      ],
      "condition": {
        "expression": "request.auth.access_levels.contains('accessPolicies/1234567890/accessLevels/in_us')",
        "title": "Source IP must be in US"
      }
    }
  ],
  "etag": "BwXN8_d-bOM="
}
  

이 정책을 적용하려면 앞에서 설명한 단계를 따르세요.

컨텍스트 인식 액세스로 보안 강화

보안을 더욱 강화하고 관리 Chrome 인스턴스만 보안 게이트웨이를 통해 웹 애플리케이션에 액세스할 수 있도록 하려면 컨텍스트 인식 액세스 (CAA) 규칙을 추가하는 것이 좋습니다. 이 규칙은 사용자의 Chrome 프로필이 관리 대상인지 확인하여 관리되지 않거나 악성 브라우저의 잠재적인 오용을 방지합니다.

참고: 이 기능을 사용하려면 엔드포인트 확인 확장 프로그램을 설치하고 설정해야 합니다.

Access Context Manager 맞춤 액세스 수준에 조건을 추가하여 이를 구현할 수 있습니다. 다음은 조정할 수 있는 조건의 예입니다.

  device.chrome.management_state == ChromeManagementState.CHROME_MANAGEMENT_STATE_PROFILE_MANAGED
  

이 상태를 구성, 확인, 관리하는 방법에 관한 자세한 내용은 Chrome 브라우저 속성을 참고하세요.

Chrome Enterprise Premium 확장 프로그램 설치

Chrome Enterprise Premium 확장 프로그램은 보안 게이트웨이의 필수적인 부분이며 인증에 도움이 됩니다. 보안 게이트웨이의 모든 사용자에 대해 확장 프로그램을 설치합니다. 확장 프로그램 배포에 관한 자세한 내용은 앱 및 확장 프로그램 보기 및 구성하기를 참고하세요. Chrome Enterprise Premium 확장 프로그램을 설치하려면 다음 단계를 따르세요.

  1. Google 관리 콘솔로 이동합니다.
  2. Chrome 브라우저 > 앱 및 확장 프로그램을 클릭합니다.
  3. 사용자 및 브라우저 탭을 클릭합니다.
  4. Chrome 확장 프로그램을 추가하려면 + 버튼을 클릭한 다음 ID로 Chrome 앱 또는 확장 프로그램 추가를 선택합니다.
  5. 다음 ID를 사용하여 보안 엔터프라이즈 브라우저 확장 프로그램을 검색한 다음 조직 단위 또는 그룹의 모든 사용자에 대해 설치 정책을 강제 설치로 설정합니다.

    ekajlcmdfcigmdbphhifahdfjbkciflj
  6. 설치된 확장 프로그램을 클릭하고 확장 프로그램 정책 필드에 다음 JSON 값을 입력합니다.

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": { "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" },
          "serviceDiscovery": { "routes": {} }
        }
      }
    }

    다음을 바꿉니다.

    • PROJECT_ID: 보안 게이트웨이가 구성된 프로젝트의 ID
    • SECURITY_GATEWAY_ID: 보안 게이트웨이의 ID

  7. 구성을 저장하려면 저장을 클릭합니다.

기존 PAC 파일 설정

사용 설정하면 서비스 검색을 통해 Chrome 브라우저 클라이언트가 보안 게이트웨이를 통해 구성된 애플리케이션을 자동으로 감지하고 트래픽을 라우팅하므로 PAC 파일을 사용하여 라우팅 구성을 수동으로 설정할 필요가 없습니다.

보안 게이트웨이에서 서비스 검색이 사용 설정되어 있지 않으면 기존 설정이 있는 것입니다. Chrome 브라우저 클라이언트에서 라우팅을 제어하려면 PAC 파일을 구성해야 합니다.

레거시 설정이 있는지 확인하려면 다음 명령어를 사용하여 서비스 검색이 사용 설정되어 있는지 확인하세요.

gcloud

gcloud beyondcorp security-gateways describe SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global | grep -i "serviceDiscovery"
      

REST

curl --silent \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID" | grep -i "serviceDiscovery"
      

명령어가 출력을 반환하지 않으면 게이트웨이에서 기존 설정을 사용합니다. 기존 설정을 사용하는 게이트웨이의 경우 호스팅된 PAC 파일을 사용하여 라우팅이 처리됩니다.

1단계: PAC 파일 만들기 및 호스팅

  1. 다음 JavaScript를 사용하여 pac_config.js라는 파일을 만들고 HOST_NAME을 애플리케이션의 도메인 (예: myapp.example.com)으로 바꿉니다.

    function FindProxyForURL(url, host) {
      const PROXY = "HTTPS via.prod.securegateway.goog:443";
      const sites = ["HOST_NAME"];
    
      for (const site of sites) {
        if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
          return PROXY;
        }
      }
      return 'DIRECT';
    }
  2. PAC 파일을 Cloud Storage 버킷과 같은 호스팅 서비스에 업로드합니다.

    • 파일이 공개적으로 다운로드 가능한지 확인합니다.
    • 브라우저가 항상 최신 라우팅 규칙을 가져오도록 HTTP 헤더 Cache-Controlno-cache로 설정합니다.
  3. 업로드된 PAC 파일의 공개 URL을 복사합니다.

2단계: Google 관리 콘솔에서 PAC 파일 적용하기

  1. Google 관리 콘솔로 이동합니다.
  2. 기기 > Chrome > 설정으로 이동합니다.
  3. 조직 단위 또는 그룹을 선택한 다음 프록시 모드를 클릭합니다.
  4. 프록시 모드에서 항상 아래에 지정된 프록시 자동 구성 사용을 선택합니다.
  5. 호스팅된 PAC 파일의 공개 URL을 제공된 필드에 입력합니다.
  6. 저장을 클릭합니다.

3단계: Chrome Enterprise Premium 확장 프로그램 구성

확장 프로그램이 인증을 처리해야 합니다. 이 확장 프로그램 정책은 serviceDiscovery 블록을 제외하므로 표준 구성과 다릅니다.

  1. Google 관리 콘솔에서 Chrome 브라우저> 앱 및 확장 프로그램으로 이동합니다.
  2. 사용자 및 브라우저 탭으로 이동하여 보안 엔터프라이즈 브라우저 확장 프로그램 (ekajlcmdfcigmdbphhifahdfjbkciflj)이 추가되고 적용되었는지 확인합니다.
  3. 확장 프로그램을 클릭하고 확장 프로그램 정책 필드에 다음 JSON 값을 입력합니다.

    {
      "securityGateway": {
        "Value": {
          "authentication": {},
          "context": {
            "resource": "projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID"
          }
        }
      }
    }
  4. 저장을 클릭합니다.

서비스 검색 설정으로 전환

기존 보안 게이트웨이를 PAC 파일 설정에서 최신 서비스 검색 설정으로 전환하려면 기능을 수동으로 사용 설정하고 구성을 업데이트해야 합니다.

  1. 보안 게이트웨이에서 서비스 검색 사용 설정: 기존 게이트웨이를 업데이트하여 서비스 검색을 사용 설정합니다.

    gcloud

    gcloud beyondcorp security-gateways update SECURITY_GATEWAY_ID \
    --project=PROJECT_ID \
    --location=global \
    --service-discovery={}
          

    REST

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d '{ "service_discovery": {} }' \
    "https://beyondcorp.googleapis.com/v1/projects/PROJECT_ID/locations/global/securityGateways/SECURITY_GATEWAY_ID?updateMask=service_discovery"
          
  2. 게이트웨이 수준 액세스 정책 설정: 사용자가 서비스 검색을 사용할 수 있도록 게이트웨이 수준에서 roles/beyondcorp.serviceDiscoveryUser 역할을 부여합니다. 서비스 검색 게이트웨이 수준 바인딩 추가 섹션의 안내를 따릅니다.

  3. Chrome Enterprise Premium 확장 프로그램 구성 업데이트: Chrome Enterprise Premium 확장 프로그램 설치 섹션의 안내에 따라 확장 프로그램 정책을 업데이트합니다. 새 JSON 구성에는 "serviceDiscovery": { "routes": {} } 블록이 포함되어야 합니다.

  4. 기존 PAC 파일 삭제: 서비스 검색이 활성화되면 기존 PAC 파일이 더 이상 필요하지 않습니다.

    1. Google 관리 콘솔에서 기기 > Chrome > 설정 > 사용자 및 브라우저 설정 > 네트워크로 이동합니다.
    2. 프록시 모드 설정을 찾습니다.
    3. 프록시 자동 구성 (PAC) URL을 삭제하거나 설정을 항상 아래에 지정된 프록시 자동 구성 사용에서 사용자가 구성하도록 허용과 같은 네트워크에 적합한 모드로 전환합니다.
    4. 저장을 클릭합니다.

최종 사용자 환경

설정이 완료되면 보호된 SaaS 애플리케이션에 액세스하는 최종 사용자에게 애플리케이션에 적용된 액세스 정책에 따라 액세스 권한이 부여되거나 거부됩니다.

Chrome에서 애플리케이션에 액세스

Chrome Enterprise Premium 확장 프로그램은 보안 게이트웨이를 통해 트래픽을 라우팅하는 데 필요합니다. 확장 프로그램은 사용자와 보안 게이트웨이 간의 인증을 처리합니다. 확장 프로그램이 도메인 정책을 통해 자동으로 설치됩니다.

사용자가 구성한 SaaS 애플리케이션에 액세스하면 트래픽이 보안 게이트웨이를 통과하며, 보안 게이트웨이는 사용자가 액세스 정책을 충족하는지 확인합니다. 사용자가 액세스 정책 검사를 통과하면 애플리케이션에 대한 액세스 권한이 부여됩니다.

승인 정책에 따라 애플리케이션에 대한 브라우저 액세스가 거부되면 사용자에게 Access denied 메시지가 표시됩니다.

다음 단계