VPC Service Controls란 Google managed service(ex) Cloud Storage, BigQuery)의 리소스 주위에 경계를 정의하는 방식으로 서비스에 대한 통신을 제어하여 경계 내의 리소스와 데이터를 보호하는 기술
VPC Service Controls에선 IAM으로 가능한 액세스 제어 뿐만 아니라 IAM으로는 불가능한 컨텍스트 기반 경계 보안까지 제어 가능하다. ex) 클라이언트 유형 , 장치 , 위치 등등
여기선 Cloud Storage와 BigQuery에 경계를 만들어 리소스를 보호할 것이다.
사전 작업
Cloud Storage
BigQuery
VPC Service Controls은 조직 관리자가 권한을 부여해주어야 한다.
필요 권한은 VPC Service Controls Permissions링크에 나와있는 것처럼 아래와 같다.
보호할 리소스는 현재 내 프로젝트에 BigQuery와 Cloud Storage 서비스
다시 콘솔에서 확인한 결과 Cloud Storage와 BigQuery에 기존에 만들어놨던 파일, 테이블이 보이지 않은 것 확인.
이렇게 리소스를 보호하게 되면 콘솔은 물론이고(콘솔도 우리가 웹 브라우저를 통해 외부에서 접근하는 것이기 때문) 외부에서 API로도 접근할 수 없게 된다. 하지만 경계를 만든 프로젝트 내의 VM이라면?
접근이 가능하다. VM이 사용하는 서비스 계정이 접근하려는 서비스에 대해 적절한 권한만 있다면. (여기선 Cloud Storage와 BigQuery에 대한 권한이 될 것이다.)
VM이 사용하는 Default 서비스 계정이고 아래와 같은 Cloud Storage, BigQuery 관련 권한을 부여해줬다.
접근 가능한 것 확인.
그렇다면 이 경계를 유지하면서 다른 프로젝트의 특정 VM 혹은 외부의 특정 IP에서의 접근은 어떻게 할까?
위의 경계를 생성할 때 왼쪽의 단계를 보면 알 수 있듯이 인그레스 및 이그레스 정책을 설정할 수 있었다. 이를 통해 제어가 가능하다.
또한 IAM으로는 설정 불가한 항목들을 포함해 더 세부적으로 제어할 수 있는 Access Context Manager를 보통 같이 사용하곤 한다.
아래 설정은 다른 프로젝트('My Fist 프로젝트')에서 선택한 ID(My Fist 프로젝트의 VM Default 서비스 게정)가 내 프로젝트의 BigQuery, Cloud Storage에 접근할 수 있도록 인그레스 정책을 설정하는 것이다.
인그레스 정책에서 허용해준 서비스 계정에 이 프로젝트의 Cloud Storage, BigQuery에 접근 가능한 권한 부여
My First 프로젝트에서 VM을 생성하고 접근
주의할 점은 기본적으로 gcloud가 설정되어 있는 GCP의 VM instance라면 그냥 bq 및 gsutil 명령어를 사용할 경우 해당 프로젝트의 BigQuery, Cloud Storage 리소스를 탐색한다. 때문에 BigQuery라면 --project 옵션을, Cloud Storage라면 버킷명을 지정해서 명령어를 실행해야 결과를 확인할 수 있다.
특정 IP기반 혹은 특정 장치기반, 그리고 지리적 위치 기반(ex) 한국에서 접근하는 것만 허용 등등)과 같이 다양한 액세스 제어가 가능하다.
액세스 수준을 생성하면 경계를 생성할 때 왼쪽의 Access Levels 단계에서 생성한 ACM 정책을 넣어줄 수 있다.
[VPC Service Controls 참고]