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

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

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

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

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

보안 게이트웨이는 다음 환경에서 호스팅되는 비공개 웹 애플리케이션을 보호할 수 있습니다.

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

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

시작하기 전에

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

셸 환경 설정

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

  • 일반 매개변수

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=MY_PROJECT_ID
    

    다음을 바꿉니다.

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

    SECURITY_GATEWAY_ID=MY_SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="MY_SECURITY_GATEWAY_DISPLAY_NAME"
    

    다음을 바꿉니다.

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

보안 게이트웨이 만들기

Chrome Enterprise Premium 보안 게이트웨이는 애플리케이션에 대한 보안 연결을 설정하는 기본 구성요소입니다. 전용 프로젝트와 네트워크를 할당하여 격리와 보안을 제공합니다.

보안 게이트웨이를 만들려면 다음 단계를 완료하세요.

  1. 다음 예시를 사용하여 securityGateway.json라는 파일을 만듭니다.

    {
       "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME",
    }
    
  2. Create API를 호출하여 보안 게이트웨이 리소스를 만듭니다.

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @securityGateway.json \
    "https://${API}/${API_VERSION}/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 필드에 있습니다.

    {
       "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}",
       "createTime": "2024-10-28T20:46:50.949740776Z",
       "updateTime": "2024-10-29T18:41:18.520661431Z",
       "state": "RUNNING",
       "delegatingServiceAccount": "security-gateway@my-gateway-service-account.iam.gserviceaccount.com"
    }
    
  2. 서비스 계정 및 타겟 VPC 프로젝트의 환경 변수를 설정합니다.

    DELEGATING_SERVICE_ACCOUNT="security-gateway@my-gateway-service-account.iam.gserviceaccount.com" # Replace with actual value
    
  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를 비공개 웹 앱이 배포된 VPC 네트워크 또는 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 범위(34.158.8.0/21136.124.16.0/20)에서 인그레스 TCP 트래픽이 허용됩니다.

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

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

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

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

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

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

  • 정적 라우팅: 정적 경로를 사용하는 경우 라우터나 방화벽과 같은 온프레미스 네트워크 장비에 각 보안 게이트웨이 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=MY_APPLICATION_ID
    APP_DISPLAY_NAME="MY_APP_DISPLAY_NAME"
    

    다음을 바꿉니다.

    • MY_APPLICATION_ID: 애플리케이션 리소스의 고유 ID입니다.
    • MY_APP_DISPLAY_NAME: 표시할 사람이 읽을 수 있는 이름입니다.
  2. 다음 예시를 사용하여 application.json이라는 JSON 파일을 만듭니다.

    {
    "display_name": "MY_APP_DISPLAY_NAME",
    "endpoint_matchers": [
      {"hostname": "MY_HOST_NAME"}
    ],
    "upstreams": [{
     "network": {
        "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
     }
    }]
    }
    

    MY_HOST_NAME을 사용자가 액세스하는 기본 호스트 이름으로 바꿉니다. 예를 들면 private.local입니다. 호스트 이름은 최대 253자(영문 기준)까지 가능하며 다음 형식 중 하나를 준수해야 합니다.

    • 유효한 IPv4 주소
    • 유효한 IPv6 주소
    • 유효한 DNS 이름
    • 별표 (*)
    • 별표 (*)와 유효한 DNS 이름

    MY_PRIVATE_NETWORK_RESOURCE_NAME을 애플리케이션이 호스팅되거나 비Google Cloud 환경에 연결된 VPC 네트워크의 전체 리소스 이름으로 바꿉니다. 네트워크 이름은 projects/{project}/global/networks/{network} 형식이어야 합니다.

  3. 선택사항: 이그레스 리전을 지정합니다.

    일부 네트워크 구성에서는 보안 게이트웨이 트래픽이 비공개 애플리케이션으로 나가는Google Cloud 리전을 제어해야 할 수 있습니다. 예를 들어 Cloud VPN 또는 Cloud Interconnect를 통해 정적 경로를 사용하는 경우에 적용됩니다. 이러한 구성의 경우 애플리케이션의 업스트림 구성에 이그레스 정책을 추가할 수 있습니다. 이 이그레스 정책은 보안 게이트웨이가 지정된 Google Cloud지역에서 애플리케이션의 트래픽을 비공개 네트워크로 라우팅하도록 지시합니다.

    다음은 egress_policy를 포함하는 JSON 파일의 예입니다.

    {
    "display_name": "MY_APP_DISPLAY_NAME",
    "endpoint_matchers": [
     {"hostname": "MY_HOST_NAME"}
    ],
    "upstreams": [{
     "network": {
        "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
     },
     "egress_policy": {
         "regions": [
            "us-central1"
         ]
      }
    }]
    }
    

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

  4. Create API를 호출하여 애플리케이션 리소스를 만듭니다.

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

Google Chrome 프록시 모드 구성

보안 게이트웨이를 통해 애플리케이션 리소스의 트래픽을 라우팅하려면 Google 관리 콘솔의 Chrome 설정에서 PAC 파일을 적용하여 Chrome을 구성합니다.

  1. PAC 파일을 만들거나 업데이트합니다.

    • 첫 번째 애플리케이션을 만드는 경우 다음 예시 PAC 파일을 사용하여 pac_config.js 파일을 만듭니다.

    • 두 번째 또는 이후 애플리케이션을 만드는 경우 기존 pac_config.js 파일을 업데이트하고 다음 PAC 파일 예와 같이 새 애플리케이션의 도메인을 사이트 배열에 추가합니다.

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["MY_HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }
    

    보안 게이트웨이에 특화되지 않은 기존 PAC 파일을 사용하는 경우 애플리케이션의 도메인을 사이트 배열에 추가하여 PAC 파일을 병합합니다.

  2. 파일을 공개적으로 다운로드할 수 있도록 업로드합니다. 예를 들어 Cloud Storage에 파일을 업로드하고 버킷에 대한 Storage Object User 역할을 모든 사용자에게 부여하여 파일을 공개적으로 다운로드할 수 있도록 설정할 수 있습니다.

  3. 업로드된 파일이 항상 최신 버전인지 확인하려면 Cache-Control 헤더를 no-cache로 설정하여 캐싱 동작을 조정하면 됩니다. 이 설정은 브라우저와 중간 서버가 파일의 사본을 저장하지 못하도록 하여 Chrome이 항상 최신 버전을 다운로드하도록 합니다.

    Cache-Control 및 브라우저 캐싱에 미치는 영향에 대한 자세한 내용은 Cache-Control 헤더를 참고하세요.

  4. 업로드된 파일의 공개 URL을 복사합니다.

프록시 모드 설정 업데이트

  1. Google 관리 콘솔로 이동합니다.
  2. 기기 -> Chrome -> 설정을 클릭합니다.
  3. 조직 단위 또는 그룹을 선택한 다음 프록시 모드를 클릭합니다.
  4. 프록시 모드 페이지에서 항상 아래에 지정된 프록시 자동 구성 사용을 선택하고 Cloud Storage의 PAC 파일 URL을 입력합니다.

액세스 정책 구성

보안 게이트웨이 수준 또는 애플리케이션 수준에서 액세스 정책을 적용할 수 있습니다.

  • 보안 게이트웨이 리소스: 보안 게이트웨이 수준에서 정책을 적용하여 연결된 모든 애플리케이션에 대한 액세스를 제어합니다.
  • 개별 애플리케이션: 더 세부적으로 제어하려면 개별 애플리케이션에 액세스 정책을 적용하면 됩니다.
  1. setIamPolicy.json이라는 JSON 형식 파일을 만들고 다음을 추가합니다.

    {
     "policy": {
       object (POLICY)
     }
    }
    

    POLICYIAM 허용 정책으로 바꿉니다. 정책의 etag은 활성 정책의 etag과 동일해야 합니다. 활성 정책은 getIamPolicy 메서드를 호출하여 가져올 수 있습니다.

  2. 특정 그룹이 보안 게이트웨이를 사용하도록 허용하려면 그룹에 roles/beyondcorp.securityGatewayUser 역할을 부여하세요.

    {
     "policy": {
       "version": 3,
       "bindings": [
         {
           "role": "roles/beyondcorp.securityGatewayUser",
           "members": [
                   "group:"
           ]
         }
       ],
       "etag": "AA1jlb"
     }
    }
    

    정책 바인딩에 있는 serviceAccount, user, group, principal, principalSet과 같은 식별자에 관한 자세한 내용은 IAM 주 구성원을 참고하세요.

  3. setIamPolicy API를 호출하여 JSON 파일에 지정된 보안 게이트웨이에 액세스 정책을 적용합니다.

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:setIamPolicy"
    

    애플리케이션에 액세스 정책을 적용하려면 다음 명령어를 사용합니다.

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:setIamPolicy"
    

다음 예와 같이 액세스 수준을 조건으로 사용하여 액세스 정책을 설정할 수도 있습니다.

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
                "group:"
        ],
        "condition": {
                "expression": "'accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels",
                "title": "Source IP must be in US"
        }
      }
    ],
    "etag": "A1jlb"
  }
}'

Chrome Enterprise Premium 확장 프로그램 설치

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

  1. Google 관리 콘솔로 이동합니다.
  2. Chrome 브라우저 -> 앱 및 확장 프로그램을 클릭합니다.
  3. 사용자 및 브라우저 탭을 클릭합니다.
  4. Chrome 확장 프로그램을 추가하려면 + 버튼을 클릭합니다.
  5. ekajlcmdfcigmdbphhifahdfjbkciflj을 검색한 다음 조직 단위 또는 그룹의 모든 사용자에게 강제 설치합니다.
  6. 설치된 확장 프로그램을 클릭한 다음 확장 프로그램 정책 필드로 이동하여 다음 JSON 값을 제공합니다.

    {
     "securityGateway": {
       "Value": {
         "authentication": {},
         "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" }
       }
     }
    }
    

최종 사용자 환경

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

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

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

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

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

다음 단계