클라이언트-서버 애플리케이션 보호

클라이언트 커넥터를 사용하여 클라이언트-서버 애플리케이션 보호

개요

BeyondCorp Enterprise는 통합 위협 및 데이터 보호 기능을 통해 비공개 애플리케이션에 대한 안전한 액세스를 제공하는 Google의 제로 트러스트 솔루션입니다. BeyondCorp Enterprise는 Chrome을 사용하여 모든 웹 기반(HTTPS) 애플리케이션에 대한 안전한 액세스를 제공합니다.

BeyondCorp Enterprise 클라이언트 커넥터는 전체 컨텍스트 및 ID 인식 액세스를 통해 Google Cloud 환경 및 Google Cloud 이외의 환경 모두에서 실행되는 애플리케이션에 대한 안전한 연결을 만들어 웹 기반이 아닌 애플리케이션도 지원합니다.

작동 방식

다음 다이어그램은 클라이언트 커넥터 아키텍처를 개괄적으로 보여줍니다.

BeyondCorp Enterprise 클라이언트 커넥터 구성요소

다음은 클라이언트 커넥터를 구성하는 주요 구성요소입니다.

엔드포인트 확인 및 클라이언트 에이전트: 클라이언트 커넥터는 사용자 노트북 또는 데스크톱에서 실행되는 기본적인 간단한 에이전트를 사용하는 Chrome 확장 프로그램인 엔드포인트 확인과 통합되어 기기 정보를 보고합니다. 엔드포인트 확인은 최종 사용자가 클라이언트 게이트웨이에 대한 연결을 시작하고 중지할 수 있는 제어 영역의 역할도 합니다.

클라이언트 게이트웨이: 클라이언트가 연결할 수 있는 리전별 서버 측 구성요소입니다. 클라이언트 게이트웨이는 관리자가 배포합니다. 게이트웨이가 BeyondCorp Enterprise 시행 시스템과 통신하여 컨텍스트 인식 검사를 시행합니다. BeyondCorp Enterprise 시행 시스템은 유연한 BeyondCorp Enterprise 제로 트러스트 정책 엔진인 IAP(Identity-Aware Proxy) 및 Access Context Manager를 사용합니다.

클라이언트 커넥터는 보안 채널인 게이트웨이를 통해 최종 사용자, 클라이언트, 기기에서 보호되는 애플리케이션으로 트래픽을 전송합니다. Google Cloud 또는 Google Cloud 외부에서 실행되는 웹 및 웹이 아닌 애플리케이션에 연결할 수 있습니다. Cloud VPN 또는 Cloud Interconnect를 사용하여 Google Cloud에 없는 애플리케이션에 연결할 수 있습니다.

시작하기 전에

BeyondCorp Enterprise 클라이언트 커넥터를 사용 설정하기 전에 다음 항목이 있는지 확인합니다.

  • BeyondCorp Enterprise 라이선스.

  • Google Cloud 조직 도메인.

  • 결제가 할당된 Google Cloud 프로젝트.

  • Google Workspace Cloud ID 사용자 계정. Cloud ID 계정을 만들어야 하는 경우 Cloud ID 사용자 계정 만들기를 참조하세요.

  • 보호하려는 웹이 아닌 리소스 리소스는 Google Cloud, 온프레미스 또는 다른 퍼블릭 클라우드에 기본으로 제공될 수 있습니다. 커스텀 VPC를 만들거나 기존 네트워크를 Google Cloud 애플리케이션에 사용할 수 있습니다. Cloud VPN 또는 Cloud Interconnect를 사용하여 Google Cloud 이외의 애플리케이션을 연결할 수도 있습니다.

  • 다음 API가 사용 설정됩니다.

  • 다음 IAM 역할:

  • 클라이언트에 권장되는 하드웨어 구성 중 하나:

    • 코어 최소 2개 및 메모리 2GB를 사용하는 Apple® Mac® OS 10.11 이상
    • 코어 최소 4개 및 메모리 2GB를 사용하는 Microsoft® Windows® 10 이상

BeyondCorp Enterprise 클라이언트 커넥터 사용 설정

비공개 서비스 액세스 설정

클라이언트 커넥터는 비공개 서비스 액세스를 사용하여 Google 관리형 VPC 네트워크와 소비자 VPC 네트워크 간의 연결을 사용 설정합니다. 이를 통해 사용자의 트래픽이 소비자 VPC 네트워크로 라우팅됩니다.

콘솔

  1. 비공개 서비스 액세스를 사용하려면 VPC 네트워크와 Google 관리형 VPC 네트워크 간에 IP 주소가 충돌하지 않도록 IP 주소 범위를 예약해야 합니다. 다음 단계를 완료하여 IP 범위를 할당합니다.

    1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
      VPC 네트워크로 이동

    2. 애플리케이션에 연결된 VPC 네트워크를 선택합니다.

    3. 비공개 서비스 연결 탭을 선택합니다.

    4. 비공개 서비스 연결 탭에서 서비스에 할당된 IP 범위 탭을 선택합니다.

    5. IP 범위 할당을 클릭합니다.

    6. 할당할 IP 범위의 이름설명을 입력합니다.

    7. 할당의 IP 범위를 지정합니다.

      • IP 주소 범위를 지정하려면 커스텀을 선택한 다음 CIDR 블록(예: 192.168.0.0/16)을 입력합니다.
      • 프리픽스 길이를 지정하고 Google에서 사용 가능한 범위를 자동으로 선택하도록 하려면 자동을 선택한 다음 프리픽스 길이(예: 16)를 입력합니다.

      /24 이상의 네트워크를 지정합니다.

    8. 할당을 클릭하여 할당된 범위를 만듭니다.

  2. 다음 단계를 완료하여 VPC 네트워크 피어링 연결을 만듭니다.

    1. Google Cloud 콘솔에서 VPC 네트워크 페이지로 이동합니다.
      VPC 네트워크로 이동
    2. 애플리케이션에 연결된 VPC 네트워크를 선택합니다.
    3. 비공개 서비스 연결 탭을 선택합니다.
    4. 비공개 서비스 연결 탭에서 서비스에 대한 비공개 연결 탭을 선택합니다.
    5. 연결 만들기를 클릭하여 네트워크와 클라이언트 커넥터 서비스 간에 비공개 연결을 만듭니다.
    6. 창이 열리면 연결된 서비스 제작자의 기본값을 그대로 둡니다. 지정된 할당에는 이전 단계에서 만든 할당 범위를 선택합니다.
    7. 연결을 클릭하여 연결을 만듭니다.
  3. 방화벽 규칙을 만듭니다.

    1. Google Cloud 콘솔에서 방화벽 페이지로 이동합니다.
      방화벽 페이지로 이동
    2. 방화벽 규칙 만들기를 클릭합니다.
    3. 방화벽 규칙의 이름을 입력합니다.
      이 이름은 프로젝트에 고유해야 합니다.
    4. 선택사항: 방화벽 규칙 로깅을 사용 설정할 수 있습니다.
      • 로그 > 사용을 클릭합니다.
      • 메타데이터를 생략하려면 로그 세부정보를 펼치고 메타데이터 포함을 선택 해제합니다.
    5. 애플리케이션에 연결된 네트워크를 지정합니다.
    6. 규칙의 우선순위를 지정합니다. 숫자가 작을수록 우선순위가 높아집니다.
    7. 트래픽 방향으로 인그레스를 선택합니다.
    8. 일치 시 작업으로 허용을 선택합니다.
    9. 대상으로 네트워크의 모든 인스턴스를 선택합니다.
    10. 소스 필터IPv4 범위를 선택한 후 1단계addressprefixLength 값을 입력하여 할당된 IP 범위를 CIDR 형식으로 표시합니다. 모든 IPv4 소스에 0.0.0.0/0 형식을 사용합니다.
    11. 프로토콜 및 포트모두 허용을 선택하여 규칙을 모든 프로토콜 및 대상 포트에 적용합니다.
    12. 만들기를 클릭합니다.

gcloud

  1. 비공개 서비스 액세스를 사용하려면 VPC 네트워크와 Google 관리형 VPC 네트워크 간에 IP 주소가 충돌하지 않도록 IP 주소 범위를 예약해야 합니다. 다음 명령어를 실행하여 IP 범위를 할당합니다.

    gcloud compute addresses create RESERVED_RANGE \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --prefix-length=16 \
      --purpose=VPC_PEERING \
      --global
    

    다음을 바꿉니다.

    • RESERVED_RANGE: VPC 피어링에 예약할 IP 주소 범위의 이름입니다. 이름은 소문자, 숫자, 하이픈만 포함할 수 있습니다.
    • CONSUMER_NETWORK: 애플리케이션에 연결된 VPC 네트워크의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  2. VPC 피어링 연결을 만듭니다.

    gcloud services vpc-peerings connect \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --ranges=RESERVED_RANGE \
      --service="servicenetworking.googleapis.com"
    

    다음을 바꿉니다.

    • CONSUMER_NETWORK: 애플리케이션에 연결된 VPC 네트워크의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • RESERVED_RANGE: VPC 피어링에 예약된 범위의 이름입니다.
  3. 할당된 IP 범위의 세부정보를 가져옵니다.

    gcloud compute addresses describe RESERVED_RANGE \
      --global \
      --project=CONSUMER_PROJECT
    

    다음을 바꿉니다.

    • RESERVED_RANGE: VPC 피어링에 예약된 범위의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  4. 이전 단계의 출력에서 addressprefixLength 값을 사용하여 CIDR 형식으로 할당된 IP 범위를 표시한 후 방화벽 규칙을 만듭니다.

    gcloud compute firewall-rules create "allow-peered-ingress" \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --direction ingress \
      --action allow \
      --source-ranges={Allocated IP range in CIDR format i.e. address/prefixLength} \
      --rules=all
    

    다음을 바꿉니다.

    • CONSUMER_NETWORK: 애플리케이션에 연결된 VPC 네트워크의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.

방화벽 규칙 구성에 대한 자세한 내용은 VPC 방화벽 규칙 사용을 참조하세요.

클라이언트 커넥터 리소스 설정

설정해야 하는 리소스 유형에는 두 가지가 있습니다.

  • 클라이언트 커넥터 서비스: 클라이언트 게이트웨이 그룹의 일반 구성을 정의합니다.
  • 클라이언트 게이트웨이: 클라이언트 커넥터 서비스를 참조하고 사용자 트래픽을 관리할 리전을 제어합니다.

도메인당 하나의 클라이언트 커넥터 서비스와 리전별로 클라이언트 커넥터 서비스당 하나의 클라이언트 게이트웨이만 허용됩니다. 또한 asia-east1, europe-west1, us-east1, us-central1 리전만 사용하여 클라이언트 커넥터 서비스 및 게이트웨이 리소스를 호스팅할 수 있습니다.

클라이언트 커넥터 서비스 만들기

콘솔

  1. IAP 관리자 페이지로 이동하세요.

    IAP로 이동

  2. 커넥터 > 클라이언트 커넥터 사용 설정을 클릭합니다.

  3. 관리형 클라이언트의 트래픽을 수신할 VPC 네트워크를 입력합니다.

  4. 클라이언트가 연결할 수 있는 리전을 선택합니다. 클라이언트 게이트웨이는 이 단계에서 생성되므로 클라이언트 게이트웨이 만들기, 확인, 삭제 절차에서 게이트웨이를 만들 필요가 없습니다.

  5. 클라이언트 커넥터가 연결할 애플리케이션의 IP 주소 범위를 입력합니다.

  6. 클라이언트 커넥터 사용 설정을 클릭합니다. 커넥터를 만드는 데 몇 분 정도 걸릴 수 있습니다.

gcloud

다음 명령어를 실행합니다.

gcloud beta beyondcorp client-connector services create CLIENT_CONNECTOR_SERVICE_NAME \
  --project=CONSUMER_PROJECT \
  --location=SERVICE_LOCATION \
  --config-from-file=/path/to/file/config.json

여기서 config.json은 다음과 같습니다.

   {
     "ingress": {
       "config": {
         "transportProtocol": "TCP",
         "destinationRoutes": [{
           "address": "DESTINATION_ADDRESS",
           "netmask": "DESTINATION_MASK"
         }]
       }
     },
     "egress": {
       "peeredVpc": {
         "networkVpc": "projects/CONSUMER_PROJECT/global/networks/CONSUMER_NETWORK"
       }
     }
   }

다음을 바꿉니다.

  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스를 만들 리전입니다. asia-east1, europe-west1, us-east1, us-central1 리전 중 하나를 지정할 수 있습니다.
  • DESTINATION_ADDRESS: 애플리케이션을 호스팅하는 대상 서브넷의 호스트 주소입니다. 예를 들어 애플리케이션에 10.0.0.0/28이 사용되는 경우 주소가 10.0.0.0입니다.
  • DESTINATION_MASK: 애플리케이션을 호스팅하는 대상 서브넷의 네트워크 마스크입니다. 예를 들어 애플리케이션에 10.0.0.0/28이 사용되는 마스크가 255.255.255.240입니다.
  • CONSUMER_NETWORK: 애플리케이션에 연결된 VPC 네트워크의 이름입니다.

API

다음 명령어를 실행합니다.

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @config.json \
https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices?client_connector_service_id=CLIENT_CONNECTOR_SERVICE_NAME

여기서 config.json은 다음과 같습니다.

   {
     "ingress": {
       "config": {
         "transportProtocol": "TCP",
         "destinationRoutes": [{
           "address": "DESTINATION_ADDRESS",
           "netmask": "DESTINATION_MASK"
         }]
       }
     },
     "egress": {
       "peeredVpc": {
         "networkVpc": "projects/CONSUMER_PROJECT/global/networks/CONSUMER_NETWORK"
       }
     }
   }

다음을 바꿉니다.

  • DESTINATION_ADDRESS: 애플리케이션을 호스팅하는 대상 서브넷의 호스트 주소입니다. 예를 들어 애플리케이션에 10.0.0.0/28이 사용되는 경우 주소가 10.0.0.0입니다.
  • DESTINATION_MASK: 애플리케이션을 호스팅하는 대상 서브넷의 네트워크 마스크입니다. 예를 들어 애플리케이션에 10.0.0.0/28이 사용되는 마스크가 255.255.255.240입니다.
  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • CONSUMER_NETWORK: 애플리케이션에 연결된 VPC 네트워크의 이름입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스를 만들 리전입니다.
  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.

서비스를 나열하여 클라이언트 커넥터 서비스가 생성되었는지 확인합니다.

콘솔

  1. IAP 관리자 페이지로 이동하세요.

    IAP로 이동

  2. 커넥터를 클릭합니다. 커넥터가 클라이언트 커넥터 섹션에 나열되고 상태가 녹색 체크표시로 표시됩니다.

gcloud

다음 명령어를 실행합니다.

gcloud beta beyondcorp client-connector services list \
  --project=CONSUMER_PROJECT \
  --location=SERVICE_LOCATION

다음을 바꿉니다.

  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스를 만들 리전입니다.

API

다음 명령어를 실행합니다.

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices

다음을 바꿉니다.

  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.

선택사항: 클라이언트 커넥터 서비스 업데이트

콘솔

다음 단계를 완료하여 대상 경로를 업데이트합니다.

  1. IAP 관리자 페이지로 이동하세요.

    IAP로 이동

  2. 커넥터를 클릭합니다.

  3. 클라이언트 커넥터 섹션에서 업데이트할 클라이언트 커넥터 옆에 있는 연필 아이콘을 클릭합니다.

  4. 애플리케이션을 호스팅하는 대상 서브넷의 새 호스트 주소 및 네트워크 마스크를 입력한 후 클라이언트 커넥터 업데이트를 클릭합니다.

gcloud

다음 명령어를 실행하여 대상 경로를 업데이트합니다.

gcloud beta beyondcorp client-connector services update CLIENT_CONNECTOR_SERVICE_NAME \
  --project=CONSUMER_PROJECT \
  --location=SERVICE_LOCATION \
  --config-from-file=/path/to/file/config.json

여기서 config.json은 다음과 같습니다.

{
  "ingress":{
    "config":{
      "destinationRoutes":[
        {
          "address":"NEW_DESTINATION_ADDRESS1",
          "netmask":"NEW_DESTINATION_MASK1"
        },
        {
          "address":"NEW_DESTINATION_ADDRESS2",
          "netmask":"NEW_DESTINATION_MASK2"
        }
      ]
    }
  }
}

다음을 바꿉니다.

  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
  • NEW_DESTINATION_ADDRESS1, NEW_DESTINATION_ADDRESS2: 애플리케이션을 호스팅하는 대상 서브넷의 새 호스트 주소입니다.
  • NEW_DESTINATION_MASK1, NEW_DESTINATION_MASK2: 대상 서브넷의 새 네트워크 마스크입니다.

API

대상 경로를 업데이트하려면 다음 명령어를 실행합니다.

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @update.json \
https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME?update_mask=ingress.config.destinationRoutes

여기서 update.json은 다음과 같습니다.

{
  "ingress":{
    "config":{
      "destinationRoutes":[
        {
          "address":"NEW_DESTINATION_ADDRESS1",
          "netmask":"NEW_DESTINATION_MASK1"
        },
        {
          "address":"NEW_DESTINATION_ADDRESS2",
          "netmask":"NEW_DESTINATION_MASK2"
        }
      ]
    }
  }
}

다음을 바꿉니다.

  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  • NEW_DESTINATION_ADDRESS1, NEW_DESTINATION_ADDRESS2: 애플리케이션을 호스팅하는 대상 서브넷의 새 호스트 주소입니다.
  • NEW_DESTINATION_MASK1, NEW_DESTINATION_MASK2: 대상 서브넷의 새 네트워크 마스크입니다.

선택사항: 클라이언트 커넥터 서비스 삭제

콘솔

  1. IAP 관리자 페이지로 이동하세요.

    IAP로 이동

  2. 커넥터를 클릭합니다.

  3. 클라이언트 커넥터 섹션에서 휴지통 아이콘을 클릭하여 클라이언트 커넥터 서비스 및 게이트웨이를 삭제합니다. 몇 분 정도 걸릴 수 있습니다.

gcloud

다음 명령어를 실행합니다.

gcloud beta beyondcorp client-connector services delete CLIENT_CONNECTOR_SERVICE_NAME \
  --project CONSUMER_PROJECT \
  --location SERVICE_LOCATION

다음을 바꿉니다.

  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.

API

다음 명령어를 실행합니다.

curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME

다음을 바꿉니다.

  • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
  • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
  • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.

클라이언트 게이트웨이 만들기, 확인, 삭제

콘솔

  1. 콘솔을 사용하여 클라이언트 커넥터를 설정할 경우 클라이언트 게이트웨이는 이전 단계에서 클라이언트 커넥터 서비스를 만들었을 때 생성됩니다.

  2. 클라이언트 게이트웨이가 작동되어 실행 중인지 확인하려면 다음 안내를 따르세요.

    1. IAP 관리자 페이지로 이동하세요.

      IAP로 이동

    2. 커넥터를 클릭합니다. 연결된 게이트웨이와 함께 커넥터가 클라이언트 커넥터 섹션에 나열되고 상태가 녹색 체크표시로 나타납니다.
  3. 선택사항: 클라이언트 게이트웨이를 삭제하려면 다음 단계를 수행합니다.

    1. IAP 관리자 페이지로 이동하세요.

      IAP로 이동

    2. 커넥터를 클릭합니다.

    3. 클라이언트 커넥터 섹션에서 게이트웨이를 삭제할 클라이언트 커넥터 옆에 있는 연필 아이콘을 클릭합니다.

    4. 게이트웨이 리전 드롭다운 목록에서 리전 체크박스를 선택 해제한 후 커넥터 서비스에서 리전을 삭제하고 클라이언트 커넥터 업데이트를 클릭합니다.

gcloud

  1. 클라이언트 게이트웨이를 만듭니다.

    gcloud beta beyondcorp client-connector gateways create CLIENT_GATEWAY_NAME \
      --project CONSUMER_PROJECT \
      --location GATEWAY_LOCATION \
      --client-connector-service \
      projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME
    

    다음을 바꿉니다.

    • CLIENT_GATEWAY_NAME: 클라이언트 게이트웨이의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • GATEWAY_LOCATION: 클라이언트 게이트웨이를 만들 리전입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  2. 클라이언트 게이트웨이가 작동되어 실행 중인지 확인합니다.

    gcloud beta beyondcorp client-connector gateways list \
      --project CONSUMER_PROJECT \
      --location GATEWAY_LOCATION
    

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • GATEWAY_LOCATION: 클라이언트 게이트웨이가 위치한 리전입니다.
  3. 선택사항: 클라이언트 게이트웨이를 삭제합니다.

    gcloud beta beyondcorp client-connector gateways delete CLIENT_GATEWAY_NAME \
      --project CONSUMER_PROJECT \
      --location GATEWAY_LOCATION
    

    다음을 바꿉니다.

    • CLIENT_GATEWAY_NAME: 클라이언트 게이트웨이의 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • GATEWAY_LOCATION: 클라이언트 게이트웨이가 위치한 리전입니다.

API

  1. 다음 명령어를 실행합니다.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d "{client_connector_service: \"projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME\"}" \
    https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways?client_gateway_id=CLIENT_GATEWAY_NAME
    

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
    • GATEWAY_LOCATION: 클라이언트 게이트웨이를 만들 리전입니다.
    • CLIENT_GATEWAY_NAME: 클라이언트 게이트웨이의 이름입니다.

    이 단계를 완료하는 데 몇 분이 걸릴 수 있습니다.

  2. 클라이언트 게이트웨이가 작동되어 실행 중인지 확인합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways
    

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • GATEWAY_LOCATION: 클라이언트 게이트웨이가 위치한 리전입니다.
  3. 선택사항: 클라이언트 게이트웨이를 삭제합니다.

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways/CLIENT_GATEWAY_NAME
    

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • GATEWAY_LOCATION: 클라이언트 커넥터 게이트웨이가 위치한 리전입니다.
    • CLIENT_GATEWAY_NAME: 클라이언트 게이트웨이의 이름입니다.

컨텍스트 인식 액세스 정책 설정

  1. 주 구성원을 확인하거나 사용자 그룹을 만듭니다. 보호되는 웹이 아닌 애플리케이션에 액세스가 필요한 사용자를 파악합니다. 또는 사용자 그룹을 만들어 구성 및 관리를 간소화할 수 있습니다.

  2. 선택사항: Access Context Manager에서 액세스 수준을 만들어 애플리케이션 액세스를 제한하는 데 사용할 수 있는 컨텍스트 인식 규칙을 정의합니다.

  3. 클라이언트 커넥터 서비스 리소스에 대해 IAM 정책을 구성하고, 웹이 아닌 앱에 액세스하는 데 필요한 Cloud BeyondCorp 클라이언트 커넥터 서비스 사용자 역할(roles/beyondcorp.clientConnectorServiceUser)을 주 구성원 또는 사용자 그룹에 부여합니다. 선택적으로 액세스 수준이 충족되었을 때만 역할을 프로비저닝하도록 IAM 조건을 지정할 수 있습니다. 리소스에 대해 IAM 정책을 업데이트하려면 콘솔 또는 API를 사용하면 됩니다.

    콘솔에서 다음 단계를 완료합니다.

    1. IAP 관리자 페이지로 이동하세요.

      IAP로 이동

    2. 애플리케이션을 클릭합니다.
    3. 이전에 OAuth 동의 화면을 구성하지 않았으면 이 단계를 완료하기 위해 지금 구성해야 합니다. 새 애플리케이션 연결 섹션의 웹이 아닌 애플리케이션에서 커넥터를 선택합니다.
    4. 창이 열리면 주 구성원 추가를 클릭합니다.
    5. 주 구성원 또는 사용자 그룹에 웹이 아닌 앱에 액세스하는 데 필요한 Cloud BeyondCorp Client Connector Service User 역할(roles/beyondcorp.clientConnectorServiceUser)을 부여합니다. 선택적으로 액세스 수준이 충족되었을 때만 역할을 프로비저닝하도록 액세스 수준을 지정할 수 있습니다. 액세스 수준을 지정하려면 조직 관리자이거나 조직 액세스 수준에 대해 viewedit 권한이 있어야 합니다.
    6. 저장을 클릭합니다.

IAM 정책 업데이트

콘솔

  1. IAP 관리자 페이지로 이동하세요.

    IAP로 이동

  2. 애플리케이션 탭을 클릭하고 리소스 목록에서 웹이 아닌 애플리케이션을 확장합니다.
  3. 클라이언트 커넥터를 선택합니다. 커넥터와 연결된 IAM 권한이 있는 섹션이 열립니다.
  4. 열린 섹션에서 클라이언트 커넥터와 연결된 IAM 정책을 업데이트할 수 있습니다.

gcloud

  1. 기존 정책을 읽습니다. getIamPolicy() 메서드는 클라이언트 커넥터 서비스 리소스의 기존 IAM 정책을 policy.json으로 읽습니다.

    gcloud beta beyondcorp client-connector services get-iam-policy CLIENT_CONNECTOR_SERVICE_NAME \
      --project=CONSUMER_PROJECT \
      --location=SERVICE_LOCATION > policy.json
    

    다음을 바꿉니다.

    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
  2. 반환된 정책을 수정합니다. 새 IAM 역할 할당을 포함하도록 policy.json에서 바인딩을 업데이트합니다. 이 작업은 텍스트 편집기에서 또는 프로그래매틱 방식으로 수행할 수 있습니다. 예를 들면 다음과 같습니다.

    {
                "bindings": [
                  {
                    "role": "roles/beyondcorp.clientConnectorServiceUser",
                    "members": [
                      "user:EXAMPLE_USER@EXAMPLE.COM",
                      "group:EXAMPLE_GROUP@EXAMPLE.COM",
                    ],
                    "condition":
                     {
                       "expression":
            "'accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME' in
            request.auth.access_levels",
                      "title": "CONDITION_NAME"
                    }
                  }
                ]
    }
    

    다음을 바꿉니다.

    • POLICY_NAME: Access Context Manager 액세스 정책의 숫자 이름입니다.
    • LEVEL_NAME: Access Context Manager 액세스 수준의 이름입니다.
    • CONDITION_NAME: IAM 조건의 제목 텍스트입니다.
  3. 업데이트된 정책을 작성합니다. setIamPolicy() 메서드를 사용하여 업데이트된 IAM 정책을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

    gcloud beta beyondcorp client-connector services set-iam-policy CLIENT_CONNECTOR_SERVICE_NAME policy.json \
      --project=CONSUMER_PROJECT \
      --location=SERVICE_LOCATION

    다음을 바꿉니다.

    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.

API

  1. 기존 정책을 읽습니다. getIamPolicy() 메서드는 클라이언트 커넥터 서비스 리소스의 기존 IAM 정책을 policy.json으로 읽습니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:getIamPolicy > policy.json
    

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.
  2. 반환된 정책을 수정합니다. 새 IAM 역할 할당을 포함하도록 policy.json에서 바인딩을 업데이트합니다. 이 작업은 텍스트 편집기에서 또는 프로그래매틱 방식으로 수행할 수 있습니다. 예를 들면 다음과 같습니다.

     {
       "policy": {
          "bindings": [
            {
              "role": "roles/beyondcorp.clientConnectorServiceUser",
              "members": [
                "user:EXAMPLE_USER@EXAMPLE.COM",
                "group:EXAMPLE_GROUP@EXAMPLE.COM",
             ],
             "condition":
              {
                "expression":
     "'accessPolicies/POLICY_NAME/accessLevels/LEVEL_NAME' in
     request.auth.access_levels",
                "title": "CONDITION_NAME"
              }
           }
         ]
       }
     }
     

    다음을 바꿉니다.

    • POLICY_NAME: Access Context Manager 액세스 정책의 숫자 이름입니다.
    • LEVEL_NAME: Access Context Manager 액세스 수준의 이름입니다.
    • CONDITION_NAME: IAM 조건의 제목 텍스트입니다.
  3. 업데이트된 정책을 작성합니다. setIamPolicy() 메서드를 사용하여 업데이트된 IAM 정책을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @policy.json \
    https://beyondcorp.googleapis.com/v1/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:setIamPolicy
     

    다음을 바꿉니다.

    • CONSUMER_PROJECT: CONSUMER_NETWORK를 호스팅하는 프로젝트의 ID입니다.
    • SERVICE_LOCATION: 클라이언트 커넥터 서비스가 위치한 리전입니다.
    • CLIENT_CONNECTOR_SERVICE_NAME: 클라이언트 커넥터 서비스 이름입니다.

엔드포인트 기기(Windows 또는 macOS)에 클라이언트 커넥터 에이전트 설치

  1. 장치에서 엔드포인트 확인 설정의 단계에 따라 엔드포인트 확인 확장 프로그램을 사용 설정합니다.

  2. 엔드포인트 확인이 작동되어 실행 중이면 업데이트된 사용자에 대한 엔드포인트 확인 확장 프로그램에 연결 시작 버튼이 표시됩니다. 보호되는 웹이 아닌 애플리케이션에 액세스하려면 연결 시작 버튼을 클릭하면 됩니다.

사용자가 처음 연결을 시작하면 엔드포인트 확인에 클라이언트 커넥터 바이너리를 다운로드하고 설치하라는 메시지가 표시됩니다. 또는 다음 URL에서 클라이언트 커넥터 바이너리를 다운로드할 수 있습니다.

연결이 설정된 후 사용자가 보호되는 리소스에 액세스할 수 있습니다. 사용자가 연결 종료 버튼을 클릭하여 연결을 종료할 수 있습니다.

문제 해결

클라이언트 커넥터 사용에 문제가 발생하면 다음 정보 안내에 따라 문제를 해결할 수 있습니다.

애플리케이션에 액세스할 수 없음

클라이언트 커넥터 게이트웨이가 실행되고 있고 연결이 성공적으로 설정되었지만 애플리케이션에 연결할 수 없습니다.

이 문제에 대해 가장 일반적인 원인과 가능한 해결 방법은 다음과 같습니다.

  • Cloud VPN에서 할당된 IP 범위가 공지되지 않았습니다. Cloud VPN을 사용하여 Google Cloud 이외의 애플리케이션에 연결할 때는 Border Gateway Protocol(BGP)를 통해 비공개 서비스 액세스를 위해 할당된 IP 범위를 피어 라우터에 공지해야 합니다. 이 작업의 수행 방법에 대한 자세한 내용은 Cloud Router에서 공지 지정을 참조하세요.

  • 대상 경로에 지정된 주소 및 마스크가 잘못되었습니다. 주소를 제공할 때는 마스킹된 비트가 0인지 확인해야 합니다. 예를 들어 10.0.10.1255.255.255.0 (/24) 네트워크 마스크에 제공하기에 부적합한 주소입니다. 올바른 주소는 10.0.10.0입니다.

  • 비공개 서비스 액세스에 대해 할당된 IP 범위와 애플리케이션을 호스팅하는 네트워크에 사용되는 IP 서브넷 간에 IP 충돌 가능성이 있습니다. 이러한 범위가 상호 배타적인지 확인합니다. 이 문제는 Google Cloud가 아닌 네트워크에서 애플리케이션을 호스팅할 때 자주 발견됩니다.

Unable to connect to the network 메시지가 표시됨

Unable to connect to the network. Check your network connection and try again. 메시지가 표시되면 기기의 인터넷 연결이 활성 상태가 아닌 것입니다.

해결 방법: 인터넷 연결이 활성 상태인지 확인하고 다시 연결을 시도합니다.

감사 로그

관리자의 경우 Google Cloud 콘솔의 로깅 페이지에서 클라이언트 커넥터 감사 로그를 포함한 BeyondCorp Enterprise 감사 로그를 볼 수 있습니다. 자세한 내용은 BeyondCorp Enterprise 서비스 감사 로깅을 참조하세요.

최종 사용자의 경우 다음 단계를 완료하여 연결 로그에 액세스할 수 있습니다.

  1. 브라우저에서 엔드포인트 확인 확장 프로그램을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 옵션을 클릭합니다.
  3. 로그의 세부사항 수준을 선택합니다. 기본적으로 세부사항 수준은 정보로 설정됩니다.
  4. 로그 표시를 클릭합니다.

다음 단계