콘텐츠로 이동하기
보안 & 아이덴티티

[GCP 보안 운영 시리즈 ] VPC 서비스 제어로 클라우드 API 접근 통제하기

2022년 12월 26일
Jinwon Seo

Security Specialist

GCP 사용해 보기

$300의 무료 크레딧과 20개 이상의 항상 무료인 제품으로 Google Cloud 사용을 시작해보세요.

무료 체험

VPC 서비스 제어(Service Control)의 이해

VPC 서비스 제어는 Google Cloud에서 제공하는 접근통제 기법입니다. 클라우드에서 제공하는 여러 자원에서 IP 주소가 있는 자원은 VPC Firewall을 활용하면 손쉽게 접근통제를 적용할 수 있습니다. 가상머신, 웹서비스 도메인 등이 대표적인 예로 들 수 있습니다. 

하지만 목적지 IP 주소가 없는 Google Cloud의 관리형 서비스들은 VPC Firewall을 이용할 수 없습니다. BigQuery, Cloud Storage를 생각해 봅시다. 이러한 서비스들은 IP를 기반으로 접근하지 않고 자원의 이름과 Cloud API를 이용하여 자원에 접근하므로 IP를 이용해서 통제할 수 없습니다. 

왜 VPC SC가 필요한가? 

VPC 서비스 제어는 Google Cloud의 관리형 서비스들의 접근통제를 위해서 API통제하는 방화벽 기능을 제공합니다. 예를 들어 BigQuery에 마케팅 정보를 저장하고 특정 사용자 또는 특정 서비스 계정에서 어떤 API를 호출할 수 있는가, 출발지는 어디인가를 지정해서 BigQuery에 접근할 수 있게 하는 것입니다.

이 기능을 사용하려면 사용자는 다음과 같은 역할을 가지고 있어야 합니다. 

  • Access Context Manager Admin 또는 Access Context Manager Editor

VPC 서비스 제어를 설정하려면 먼저 접근 정책(Access Policy)를 설정해야 합니다. 접근 정책은 VPC 서비스 제어에서 보안정책을 적용할 수 있는 범위입니다. 기본적으로 조직 하위의 모든 폴더와 프로젝트에 보안정책 적용이 가능한 default policy가  생성됩니다. 규모가 작은 기업이라면 default policy 하나로도 운영이 가능합니다. 현재 VPC 서비스 제어는 프로젝트 단위로 최소 경계(perimeter)를 설정합니다.  설정하기 전에 관리자는 다음의 항목을 알고 있어야 합니다. 

  • 접근 통제 대상 자원이 어느 프로젝트 위치하고 있는가?
  • 접근 통제 대상은 출발지 IP, 사용자 계정, 서비스 계정중 하나여야 합니다.
  • 접근 통제를 하는 API(접근, 수정, 생성 등) 어떤 것인가? 

VPC 서비스 제어 설정

Cloud 웹 콘솔에 접속한 다음에 Security 메뉴 하위의 VPC Service Controls 메뉴를 선택하여 이동합니다.  프로젝트 선택기에서는 조직을 선택합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/image7_HppDVmt.max-800x800.png

VPC 서비스 제어 설정은 두 가지 모드를 제공합니다. 

ENFORCED MODE는 실제 운영 모드로서 보안 정책을 위반하는 접근을 차단합니다. 이에 반해 DRY RUN MODE는 일종의 테스트 모드로서 보안정책을 위반하는 접근을차단하지 않습니다. 다만 차단된 접근이라는 오류 로그를 생성합니다. 즉, DRY RUN MODE는 ENFORCED MODE를 활성화시키기 전에 서비스 안정성을 위한 테스트 수행모드입니다. 

VPC 서비스 제어를 초기부터 ENFORCED MODE로 가동하면 예기치 못한 사용자 접근 차단이 발생할 수 있습니다. 그러므로 최초 정책 설정은 DRY RUN MODE로 구성하고 로그를 검사하면서 접근 차단이 발생하지 않도록 정책을 수정하는 방식으로 운영해야 합니다. 

DRY RUN MODE로  동작하는 접근통제 정책은 수정이 가능합니다. 하지만 ENFORCED MODE로 동작하는 정책은 수정이 불가합니다. 만일 정책의 수정이 필요하다면 기존 정책을 지우고 개정 정책을 새롭게 추가해야 합니다. 

일반적으로 DRY RUN MODE로 설정하고 최소 2주일정도 사용자의 서비스 접근을 점검한 다음에 ENFORCED MODE로 전환하는 것을 권고합니다. GO TO AUDIT LOGS는 VPC 서비스 제어의 동작 현황 로그를 볼 수 있는 바로가기 링크입니다.  

새로운 경계 만들기

DRY RUN MODE에서 +NEW PERIMETER를 클릭하면 새로운 경계를 만들 수 있습니다.

서비스 접근자 정보없이 ENFORCED MODE를 선택하면 서비스 차단이 발생할 수 있기 때문입니다. 신규 경계 생성 단계는 7단계이지만 일부는 생략할 수 있습니다. 

1. Details

경계 이름을 설정합니다. 경계 이름을 입력합니다. 경계 타입은 기본적인 경계입니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/image3_AfUMiFb.max-600x600.png

Perimeter bridge는 경계간에 연결 경로를 생성하는 것입니다.

2. Projects

ADD PROJECTS 버튼을 클릭하여 보호 대상 자원이 위치하는 프로젝트를 선택합니다. 앞서 정책 범위를 default Policy로 설정했기 때문에 조직의 모든 프로젝트가 목록에서 보입니다. 원하는 프로젝트를 선택하면 됩니다. VPC 서비스 제어에서 생성하는 경계에서 프로젝트는 반드시 하나의 경계에만 추가됩니다. 즉, A 프로젝트가 있고, [가] 경계와 [나] 경계가 있다면 A 프로젝트는 둘 중의 하나에만 추가될 수 있습니다. 

3. Restricted Services

VPC 서비스 제어에서 통제할 서비스를 선택하는 항목입니다. 이 항목에는 VPC 서비스 제어가 가능한 API 목록이 나열되어 있습니다. 전체 목록은 여기에서 확인할 수 있습니다.

제한된 서비스는 VPC 서비스 제어에서 통제할 서비스 API를 지정하는 것입니다. 가장 강력한 방법은 모든 서비스를 등록하는 것입니다. 이후에 인그레스와 이그레스 규칙을 통해서 허용할 서비스를 개방할 수 있습니다. 전체를 설정하지 않더라도 스토리지 서비스 API는 보안을 위해서 설정하는 것을 권고합니다. 

https://storage.googleapis.com/gweb-cloudblog-publish/images/image2_kxDs2zz.max-800x800.png

4. VPC Accessible services

https://storage.googleapis.com/gweb-cloudblog-publish/images/image5_ZbhYvD4.max-800x800.png

경계내부에서 자원간 접속이 가능한 설정을 지정하는 것입니다. 기본값으로 모든 서비스(All services)를 선택합니다.

5. Access Levels

접근 수준을 지정하는 단계입니다. 다만 이 설정은 Ingress와 Egress 에서도 설정할 수 있기 때문에 이 단계에서는 설정하지 않고 넘어가기를 합니다. 

6. Ingress Policy

Ingress Policy는 경계 외부에서 경계 내부 자원 접근이 필요할 때 허용하는 정책을 설정하는 것입니다. 이 개념은 방화벽 설정과 유사합니다. ADD RULE을 클릭하면 아래와 같은 설정 화면이 나타나며, 각 항목 설정 의미는 다음과 같습니다.


https://storage.googleapis.com/gweb-cloudblog-publish/images/image1_TzsJ6O1.max-700x700.png

출발지 API 클라이언트 속성 지정

  • Source 

    • All Sources: 모든 소스를 의미합니다. 

    • Access Level: 접근 수준을 설정한 객체를 의미합니다. 

    • Projects: 특정 프로젝트에서 접근할 수 있게 설정합니다.  

  • Identity

    • Any Identity: 모든 계정을 의미합니다. 

    • Any User Account: 모든 사용자 계정을 의미합니다.

    • Any Service Account: 모든 서비스 계정을 의미합니다.

    • Selected identities: 관리자가 특정 계정을 설정할 수 있습니다.

목적지 GCP 서비스/자원 설정

  • Projects

    • All Projects: 모든 프로젝트를 의미합니다.

    • Selected projects: 관리자가 특정 프로젝트를 설정할 수 있습니다.

  • Services

    • All services: 모든 서비스를 의미합니다.

    • Selected services: 관리자가 특정 서비스를 설정할 수 있습니다.

그림에서 설정한 내용의 해석은 다음과 같습니다. 

  • Source: 모든 출발지를 설정했습니다.

  • Identity: 계정은 dragon@jayseo.altostrat.com을 설정했습니다. 

  • Project: security-demo-319501 프로젝트를 경계로 보호하는 프로젝트로 설정했습니다.

  • Services: All services로 설정했습니다. 

그러므로 위 설정에 의해서 security-demo-319501 프로젝트의 모든 서비스는 오직 dragon@jayseo.altostrat.com 사용자만 접근할 수 있습니다. 

7. Egress Policy

Egress는 경계 내부에서 경계 외부로 접근할 때 적용하는 보안 정책입니다. 방향성만 다를뿐 설정방법은 Ingress Policy 설정과 동일합니다. 일반적으로 Egress Policy는 설정하지 않습니다. 설정하지 않은 Egress Policy는 기본적으로 모든 데이터의 복사, 전송 등을 차단합니다. 그러므로 프로젝트 내부의 데이터 외부 유출 위협에 강력한 대응효과를 갖습니다. 경계 내부의 데이터를 경계 외부 자원과 공유하거나 경계  외부의 스토리지로 데이터를 전송하려면 Egress Policy를 설정해야 합니다. 

경계 생성후 분석

예제 ingress Policy를 설정 값은 다음과 같습니다. 실질적으로 사용자 dragon@에게 security-demo-319501 프로젝트의 모든 서비스에 접근이 가능하도록 경계를 생성했습니다.  테스트를 위해서 사용자 tiger@ 계정으로 security-demo-319501 프로젝트의 스토리지에 접근하면 다음과 같은 오류가 발생합니다.

https://storage.googleapis.com/gweb-cloudblog-publish/images/image4_MWhQ5Ul.max-800x800.png

현재 운영 모드가 DRY RUN이기 때문에 오류가 발생했더라도 접근 차단이 발생하지 않습니다. 이처럼 VPC 서비스 제어에서 경계를 생성하면 곧바로 ENFORCED MODE로 운영하지 말고 이 방식처럼 DRY RUN MODE로 운영하면서 오류가 없어질때까지 사용자들의 사용 패턴을 분석하고 이를 정책에 반영해야 합니다. 

마치면서

VPC 서비스 제어는 Google Cloud에서 제공하는 서비스로서 관리형 자원의 접근통제를 적용할때 매우 강력한 기능을 제공합니다. 사용자를 통제할 때 IP기반의 통제를 넘어서 사용자가 호출 가능한 API목록까지 통제 가능하기 때문에 보다 세밀하게 권한 제어를 수행할 수 있습니다. 이는 Google Cloud가 제공하는  Zero Trust 원칙의 보안 기능을 제공하기 때문입니다. 데이터 유출 보호를 위해서라도중요 데이터를 보관하는 프로젝트에는 VPC 서비스 제어를 적용하시는 것을 권고합니다. 


게시 위치