이 페이지에서는 Chrome Enterprise Premium 보안 게이트웨이를 통해 SaaS 애플리케이션을 보호하는 과정을 안내합니다.
Chrome Enterprise Premium 보안 게이트웨이는 포워드 프록시로 작동하여 제로 트러스트 액세스 프레임워크를 적용하고 SaaS 애플리케이션에 액세스하는 사용자에 대한 세부적인 컨텍스트 인식 제어를 제공합니다.
SaaS 애플리케이션에 대한 액세스 보안 작동 방식
다음은 보안 게이트웨이가 SaaS 애플리케이션을 보호하는 방식에 대한 간략한 개요입니다.
- 클라이언트 측 브라우저 설정은 보안 게이트웨이 프록시를 통해 애플리케이션 트래픽을 라우팅합니다.
- 보안 게이트웨이는 컨텍스트 인식 액세스 정책을 확인하여 클라이언트(사용자 및 기기) 액세스를 승인합니다.
- 클라이언트 액세스가 허용되면 게이트웨이는 해당 게이트웨이와 Google Cloud 리전에 할당된 고유한 소스 IP 주소를 사용하여 애플리케이션으로 트래픽을 전달합니다. 할당된 이러한 IP 주소는 생성한 게이트웨이 전용으로 예약되며 다른 사용자나 게이트웨이에서 사용할 수 없습니다. 액세스를 제어하려면 이러한 전용 소스 IP 주소를 SaaS 애플리케이션의 허용 목록에 추가하면 됩니다.
시작하기 전에
보안 게이트웨이를 설정하기 전에 다음 사항을 확인하세요.
- Chrome Enterprise Premium 라이선스
- 관리자 계정으로 Google 관리 콘솔에 액세스
- 할당된 결제 계정이 있고 다음 API가 사용 설정된 Google Cloud 프로젝트: BeyondCorp API
설정을 구성하는 관리자에게 부여되는 다음 Identity and Access Management (IAM) 역할: 프로젝트 수준: Cloud BeyondCorp 관리자 (
beyondcorp.admin
)보호하려는 SaaS 애플리케이션입니다. 애플리케이션은 보안 게이트웨이에서 보안 검사를 적용할 수 있도록
IP allowlisting
를 지원해야 합니다.
제한사항
Chrome Enterprise Premium 보안 게이트웨이에는 다음과 같은 제한사항이 있습니다. 보안 게이트웨이는 IPv6 연결만 허용하는 SaaS 애플리케이션을 지원하지 않습니다.
셸 환경 설정
설정 프로세스를 간소화하고 보안 게이트웨이 API와 상호작용하려면 작업 셸에서 다음 환경 변수를 정의하세요.
일반 매개변수
API="beyondcorp.googleapis.com" API_VERSION=v1 PROJECT_ID=
MY_PROJECT_ID
APPLICATION_ID=MY_APPLICATION_ID
APPLICATION_DISPLAY_NAME="MY_APPLICATION_DISPLAY_NAME
" HOST_NAME=MY_HOST_NAME
다음을 바꿉니다.
MY_PROJECT_ID
: 보안 게이트웨이가 생성되는 프로젝트의 ID입니다.MY_APPLICATION_ID
: 애플리케이션의 ID입니다(예:github
). 이름은 최대 63자(영문 기준)까지 입력할 수 있으며 소문자, 숫자, 하이픈을 포함할 수 있습니다. 첫 번째 글자는 문자여야 하고 마지막 글자는 문자 또는 숫자일 수 있습니다.MY_APPLICATION_DISPLAY_NAME
: 표시할 사람이 읽을 수 있는 이름입니다.MY_HOST_NAME
: 애플리케이션의 호스트 이름입니다. 예를 들면github.com
입니다. 호스트 이름의 최대 길이는 253자(영문 기준)이며 다음 형식 중 하나를 따라야 합니다.- 유효한 IPv4 주소
- 유효한 IPv6 주소
- 유효한 DNS 이름
- 별표 (*)
- 별표 (*)와 유효한 DNS 이름
보안 게이트웨이 매개변수
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 보안 게이트웨이는 애플리케이션에 대한 보안 연결을 설정하기 위한 기본 구성요소입니다. 격리와 보안을 제공하는 전용 프로젝트와 네트워크를 할당합니다.
보안 게이트웨이 리소스를 만들려면 다음 방법 중 하나를 사용하세요.
gcloud
다음 명령어를 실행합니다. --hubs
플래그의 경우 다음 목록에서 하나 이상의 리전을 지정합니다.
gcloud beta beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
--project=${PROJECT_ID} \
--location=global \
--display-name="MY_SECURITY_GATEWAY_DISPLAY_NAME
" \
--hubs=us-central1
REST
요청 본문에 게이트웨이 세부정보를 사용하여 Create API 메서드를 호출합니다. hubs
객체의 경우 다음 목록에서 하나 이상의 리전을 지정합니다.
curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d '{ "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME
", "hubs": { "us-central1": {} } }' \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
hubs
는 대상 애플리케이션에 대한 이그레스 연결을 사용 설정하는 데 필요한 리전 리소스를 나타냅니다. 리전별로 허브를 하나씩 사용할 수 있으며 각 허브는 두 개의 IP 주소를 제공합니다. 다음 리전을 지정할 수 있습니다.
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
SaaS 애플리케이션 구성
보안 게이트웨이를 만든 후 보안 액세스를 위해 보안 게이트웨이를 사용하도록 SaaS 애플리케이션을 구성할 수 있습니다.
각 허브에 대해 보안 게이트웨이에서 할당한 IP 주소를 가져옵니다. 리전에 IP 주소 2개가 할당됩니다.
gcloud
gcloud beta 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://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
다음은
hubs
이 있는 보안 게이트웨이의 샘플GET
응답입니다. 이 예시에서는hubs
가us-central1
및us-east1
리전에서 생성되며, 응답에 반환된 모든 IP 주소가 SaaS 애플리케이션에서 허용되어야 합니다.gcloud
createTime: 'CREATE_TIME' displayName: My security gateway hubs: us-central1: internetGateway: assignedIps: - IP_ADDRESS_1 - IP_ADDRESS_2 us-east1: internetGateway: assignedIps: - IP_ADDRESS_1 - IP_ADDRESS_2 name: projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID} state: RUNNING updateTime: 'UPDATE_TIME'
REST
{ "securityGateways": [ { "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}", "createTime": "CREATE_TIME", "updateTime": "UPDATE_TIME", "displayName": "My security gateway", "state": "RUNNING", "hubs": { "us-central1": { "internetGateway": { "assignedIps": [ "IP_ADDRESS_1", "IP_ADDRESS_2", ] } }, "us-east1": { "internetGateway": { "assignedIps": [ "IP_ADDRESS_1", "IP_ADDRESS_2", ] } } } } ] }
SaaS 애플리케이션의 IP 허용 목록에 IP 주소를 추가합니다. 예를 들어 GitHub 애플리케이션의 경우 조직의 허용된 IP 주소 관리 가이드를 따를 수 있습니다.
애플리케이션 리소스 만들기
다음 정보는 보안 게이트웨이 애플리케이션 리소스를 설정하고 구성하는 과정을 안내합니다.
Google Cloud에서 보안 게이트웨이 애플리케이션 리소스 만들기
Google Cloud 애플리케이션 리소스는 보안 게이트웨이 리소스의 하위 리소스입니다. Create
API를 호출하여 애플리케이션 리소스를 만듭니다.
gcloud
gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \ --project=${PROJECT_ID} \ --security-gateway=${SECURITY_GATEWAY_ID} \ --location=global \ --display-name="${APPLICATION_DISPLAY_NAME}" \ --endpoint-matchers="hostname=${HOST_NAME},ports=[443]"
REST
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -X POST \ -d "{ \"display_name\": \"${APPLICATION_DISPLAY_NAME}\", \"endpoint_matchers\": [{hostname: \"${HOST_NAME}\", ports: [443]}] }" \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
Google Chrome 프록시 모드 구성
보안 게이트웨이를 통해 애플리케이션 리소스의 트래픽을 라우팅하려면 Google 관리 콘솔의 Chrome 설정에서 PAC 파일을 적용하여 Chrome을 구성합니다.
PAC 파일을 만들거나 업데이트합니다.
첫 번째 애플리케이션을 만드는 경우 다음 예시 PAC 파일을 사용하여
pac_config.js
파일을 만듭니다.두 번째 또는 이후 애플리케이션을 만드는 경우 기존
pac_config.js
파일을 업데이트하고 다음 예시 PAC 파일과 같이 새 애플리케이션의 도메인을 sites 배열에 추가합니다.
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 파일을 병합합니다.
파일을 공개적으로 다운로드할 수 있도록 업로드합니다. 예를 들어 Cloud Storage에 파일을 업로드하고 버킷에 대한 Storage Object User 역할을 모든 사용자에게 부여하여 파일을 공개적으로 다운로드할 수 있도록 설정할 수 있습니다.
업로드된 파일이 항상 최신 버전인지 확인하려면
Cache-Control
헤더를no-cache
로 설정하여 캐싱 동작을 조정하면 됩니다. 이 설정은 브라우저와 중간 서버가 파일의 사본을 저장하지 못하도록 하여 Chrome이 항상 최신 버전을 다운로드하도록 합니다.Cache-Control
및 브라우저 캐싱에 미치는 영향에 대한 자세한 내용은 Cache-Control 헤더를 참고하세요.업로드된 파일의 공개 URL을 복사합니다.
프록시 모드 설정 업데이트
- Google 관리 콘솔로 이동합니다.
- 기기 -> Chrome -> 설정을 클릭합니다.
- 조직 단위 또는 그룹을 선택한 다음 프록시 모드를 클릭합니다.
- 프록시 모드 페이지에서 항상 아래에 지정된 프록시 자동 구성 사용을 선택하고 Cloud Storage의 PAC 파일 URL을 입력합니다.
액세스 정책 구성
액세스 정책을 적용하여 연결된 모든 애플리케이션에 영향을 미치는 보안 게이트웨이 수준에서 액세스를 제어하거나, 더 세부적인 제어를 위해 개별 애플리케이션 수준에서 액세스를 제어할 수 있습니다.
액세스 정책을 안전하게 업데이트
setIamPolicy
명령어는 기존 정책 전체를 제공된 정책으로 바꿉니다. 기존 권한이 실수로 삭제되지 않도록 하려면 '읽기-수정-쓰기' 패턴을 따르는 것이 좋습니다. 이렇게 하면 기존 정책을 덮어쓰지 않고 추가만 할 수 있습니다.
읽기: 먼저 현재 액세스 정책을 가져옵니다.
수정: 로컬에서 정책 파일을 수정하여 권한을 추가하거나 변경합니다.
쓰기: 업데이트된 정책 파일을 적용합니다.
현재 정책 가져오기
변경하기 전에 현재 정책을 가져옵니다.
정책의 etag
필드는 버전 식별자 역할을 합니다. 여러 관리자가 동시에 변경하는 경우 업데이트가 충돌하는 것을 방지합니다.
다음 명령어는 정책을 검색하고 policy.json
이라는 파일에 저장합니다.
gcloud
gcloud beta beyondcorp security-gateways applications get-iam-policy ${APPLICATION_ID} \ --security_gateway=${SECURITY_GATEWAY_ID} \ --project=${PROJECT_ID} \ --location=global > policy.json
REST
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:getIamPolicy" > policy.json
명령어를 실행하면 현재 정책이 포함된 policy.json
파일이 생성됩니다.
정책 파일 수정
텍스트 편집기에서 policy.json
파일을 엽니다. 보안 게이트웨이를 사용할 수 있는 액세스 권한을 그룹에 부여하려면 roles/beyondcorp.securityGatewayUser
역할의 members
목록에 그룹을 추가하세요.
policy.json
은 다음 예와 비슷해야 합니다.
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"members": [
"group:existing-group@example.com"
]
}
],
"etag": "BwXN8_d-bOM="
}
}
새 그룹을 추가하려면 members
배열에 새 항목을 추가합니다. 앞의 항목 뒤에 쉼표를 포함합니다.
다음 예에서는 new-group@example.com
를 추가합니다.
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"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
를 사용하여 올바른 버전을 업데이트하도록 합니다.
gcloud
gcloud beta beyondcorp security-gateways applications set-iam-policy ${APPLICATION_ID} policy.json \ --security_gateway=${SECURITY_GATEWAY_ID} \ --project=${PROJECT_ID} \ --location=global
REST
jq '{policy: .}' policy.json | curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d @- \ "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:setIamPolicy"
조건부 액세스 정책 추가
조건이 있는 액세스 정책을 설정할 수도 있습니다. 조건은 특정 위치에서 시작되는 사용자의 IP 주소와 같은 요구사항을 지정합니다.
다음 예시는 소스 IP 주소가 지정된 액세스 수준 내에 있는 경우에만 액세스 권한을 부여하는 정책을 보여줍니다.
{
"policy": {
"version": 3,
"bindings": [
{
"role": "roles/beyondcorp.securityGatewayUser",
"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 Enterprise Premium 확장 프로그램 설치
Chrome Enterprise Premium 확장 프로그램은 보안 게이트웨이의 필수적인 부분이며 인증을 지원합니다. 보안 게이트웨이의 모든 사용자에 대해 확장 프로그램을 설치합니다. 확장 프로그램 배포에 관한 자세한 내용은 앱 및 확장 프로그램 보기 및 구성하기를 참고하세요.
- Google 관리 콘솔로 이동합니다.
- Chrome 브라우저 -> 앱 및 확장 프로그램을 클릭합니다.
- 사용자 및 브라우저 탭을 클릭합니다.
- Chrome 확장 프로그램을 추가하려면 + 버튼을 클릭합니다.
ekajlcmdfcigmdbphhifahdfjbkciflj
을 검색한 다음 조직 단위 또는 그룹의 모든 사용자에게 강제 설치합니다.설치된 확장 프로그램을 클릭한 다음 확장 프로그램 정책 필드로 이동하여 다음 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
메시지가 표시됩니다.