이 페이지에서는 Google Cloud VM에 대해 CBA(인증서 기반 액세스)를 사용 설정하는 방법에 대해 설명합니다. CBA를 사용하여 신뢰할 수 있는 기기에서 Google Cloud VM에 대한 액세스를 보호할 수 있습니다.
개요
VM용 CBA는 Google Cloud 컨텍스트 인식 액세스 기능을 통해 상호 TLS(mTLS)를 사용하여 액세스를 보호합니다 다음은 VM용 CBA를 사용 설정 및 사용하기 위해 사용되는 기본 주요 구성요소입니다.
- Access Context Manager: 웹 애플리케이션에 대해 액세스를 확인할 때 인증서가 필요한 액세스 수준을 만들 수 있습니다.
- IAP (Identity-Aware Proxy): IAP TCP 전달을 사용하면 암호화된 터널을 설정하여 SSH, RDP 및 기타 트래픽을 VM 인스턴스로 전달할 수 있습니다. 또한 IAP 정책을 통해 특정 VM 인스턴스에 대한 터널을 설정할 수 있는 사용자와 해당 터널을 사용하기 위해 사용자가 충족해야 하는 액세스 조건을 세밀하게 제어할 수 있습니다.
- Chrome Enterprise 정책: Chrome 브라우저 사용 시 사용자와 VM 간에 상호 인증(mTLS)을 제공합니다.
- Google Cloud CLI: gcloud CLI를 사용할 때 사용자와 VM 간에 상호 인증(mTLS)을 제공합니다.
시작하기 전에
Google Cloud 프로젝트의 CBA 액세스 수준을 만들었는지 확인합니다.
IAP TCP 전달을 통해 VM에 액세스할 수 있는 역할 부여
사용자 또는 사용자 그룹이 IAP TCP 전달을 사용하여 VM에 액세스할 수 있도록 하려면 프로젝트에서 적절한 IAM(Identity and Access Management) 역할을 부여해야 합니다.
다음 표에서는 TCP 전달 및 관련 태스크에 대해 신뢰할 수 있는 관리자에게 부여해야 하는 사전 정의된 역할을 보여줍니다.
작업 | 역할 | 추가 정보 |
---|---|---|
TCP 전달 |
IAP 보안 터널 사용자(roles/iap.tunnelResourceAccessor )
|
프로젝트의 모든 VM 인스턴스에 액세스 권한 부여 또는 특정 VM에 액세스 권한 부여를 참조하세요. |
SSH 액세스 권한 |
Compute 인스턴스 관리자(v1)(roles/compute.instanceAdmin.v1 )
|
|
OS 로그인(권장) | 다양함 | 사용자 계정에 OS 로그인 역할 구성 |
서비스 계정 사용 | 서비스 계정 사용자(roles/iam.serviceAccountUser ) |
serviceAccountUser 역할 |
IAP TCP 전달에 대한 역할 부여에 대한 자세한 내용은 IAP TCP 전달을 위한 역할 부여를 참조하세요.
VM에 대한 인증서 기반 액세스 구성
IAP-TCP를 사용하면 프로젝트의 모든 VM 인스턴스에 대한 액세스 권한을 부여할 수 있지만, 각 개별 VM 인스턴스에 대해 인증서 기반 액세스를 구성해야 합니다.
VM에 사용자 또는 사용자 그룹 인증서 기반 액세스 권한을 부여하려면 VM 인스턴스에서 roles/iap.tunnelResourceAccessor
역할을 부여합니다. 다른 역할은 프로젝트에 부여되어 있어야 합니다.
콘솔
IAP 관리 페이지를 열고 SSH 및 TCP 리소스 탭을 선택합니다.
구성하려는 VM 인스턴스를 선택합니다. 정보 패널이 보이지 않으면 정보 패널 표시를 클릭합니다.
주 구성원 추가를 클릭하고 다음을 구성합니다.
- 새 주 구성원: 액세스 권한을 부여할 사용자 또는 사용자 그룹을 지정합니다.
- 역할 선택: Cloud IAP > IAP 보안 터널 사용자를 선택합니다.
IAM 조건 추가를 클릭하고 조건을 구성합니다.
- 제목: 조건 이름을 입력합니다.
- 조건 빌더: 조건 유형 드롭다운에서 액세스 수준을 선택한 다음 이전에 만든 인증서 기반 액세스 수준을 선택합니다.
저장을 클릭합니다.
API
VM에 대한 인증서 기반 액세스를 구성하려면 애플리케이션의 policy.json
파일을 사용합니다.
IAM API를 사용하여 액세스 정책을 관리하는 방법에 대한 자세한 내용은 IAP 보안 리소스 액세스 관리를 참조하세요.
다음 변수를 내보냅니다.
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
getIamPolicy
메서드를 사용하여 Compute Engine 인스턴스의 IAM 정책을 가져옵니다. 마지막에 비어 있는 데이터 비트는 curl 요청을GET
대신POST
로 전환합니다.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''
IAM 정책 JSON 파일을 수정하여
iap.tunnelResourceAccessor
역할 및 인증서 기반 액세스 권한을 주 구성원에게 부여합니다.다음은 VM 인스턴스 관리자 그룹에
iap.tunnelResourceAccessor
역할을 부여하여 IAP 보안 터널 리소스에 대한 인증서 기반 액세스 권한을 부여하는policy.json
파일의 예시입니다.주 구성원에게 소유자 역할이 있는 경우 TCP 전달에 IAP를 사용할 수 있는 권한이 있습니다.
{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/CERTIFICATE_BASED_ACCESS_LEVEL_NAME\" in request.auth.access_levels, "title": "CERTIFICATE_BASED_CONDITION_NAME" } } ] } }
정책 이름을 찾으려면
accessPolicies.list
메서드를 호출합니다.GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
setIamPolicy
메서드를 사용하여 새policy.json
파일을 설정합니다.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
클라이언트 인증서를 사용하여 VM 액세스
클라이언트 인증서를 사용하여 VM에 액세스하려면 다음 방법 중 하나를 사용합니다.
- 엔터프라이즈 인증서 사용: PKI 인프라가 있는 경우 이 방법을 사용하세요.
- 엔드포인트 인증에서 프로비저닝된 인증서 사용: PKI 인프라가 없는 경우 이 방법을 사용합니다. 엔드포인트 인증은 모든 기기에 대해 자체 서명된 인증서를 자동으로 프로비저닝하고 Google Cloud에 등록합니다.
Chrome 브라우저에서 클라이언트 인증서를 사용하여 VM에 액세스
- 다음 옵션 중 하나를 사용하여 Chrome 브라우저를 구성합니다.
- Chrome 브라우저에서 다음 도메인을 입력하여 Google Cloud 콘솔에 액세스합니다.
console-secure.cloud.google.com
- IAP 터널링을 사용하여 Google Cloud VM에 액세스합니다.
gcloud CLI에서 클라이언트 인증서를 사용하여 VM 액세스
다음 방법 중 하나를 사용하여 gcloud CLI를 구성합니다.
IAP 터널링을 사용하여 Google Cloud VM에 액세스합니다.