베하~ 안녕하세요! BTC_현상수배범 입니다.
오늘은 GCP에서 제공하는 서비스인 VPC Service Controls(VPC 서비스 제어)에 대해서 알아보도록 하겠습니다.
VPC Service Control(이하 VPC SC)은 외부 또는 내부 주체의 우발적이거나 표적화된 작업으로부터 GCS, BigQuery 등의 GCP 리소스를 보호하고, 불필요한 무단 데이터 반출 위험을 최소화할 수 있습니다. VPC SC를 설정함으로써 명시적으로 지정한 서비스의 리소스, 데이터를 보호하는 경계를 만들 수 있습니다.
VPC SC를 사용함으로써 얻을 수 있는 보안 이점은 다음과 같습니다.
- 승인되지 않은 네트워크에서 도용된 사용자 인증 정보를 사용한 액세스 차단
- 악의적인 내부자 또는 손상된 코드에 의한 데이터 유출 차단
- 잘못 구성된 IAM 정책으로 인한 비공개 데이터의 공개적 노출 차단
- 서비스 액세스 모니터링
조직 액세스 정책을 사용하고 전체 Google Cloud 조직에 VPC 서비스 제어를 구성하거나 Scoped policy를 사용하고 조직의 폴더 또는 프로젝트에 VPC 서비스 제어를 구성할 수 있습니다. 경계 내에 있는 데이터를 자유롭게 처리, 변환, 복사할 수 있습니다. 보안 제어는 경계 내에서 생성된 모든 새 리소스에 자동으로 적용됩니다.
이제 VPC SC를 실제 GCP 환경에 적용하는 방법을 간단한 실습을 통해 진행해보도록 하겠습니다. 이번 실습에서는 아래와 같이 특정 IP 범위에서 GCP 리소스로의 접근을 제한하는 VPC SC를 구성하고자 합니다.
해당 실습을 위해서는 다음과 같은 권한(조직 수준에서 필요)이 필요합니다.
1. Access Context Manager 설정
1.1 Access Level 생성
- Console -> Navigation menu -> Security -> Access Context Manager -> CREATE ACCESS LEVEL
1.2 세부사항 입력 및 저장
Title*: Access Level을 의미하는 제목을 작성합니다.
Create conditions in: Basic mode를 선택합니다.
- Basic mode: 일반적으로 기본 Access Level을 생성하는 방법입니다.
- Advanced mode: 커스텀 Access Level을 만들고 관리할 수 있습니다. Advanced mode는 유료 엔터프라이즈 보안 구독시 사용할 수 있습니다.
Conditions: 조건을 설정하는 섹션입니다. IP 주소 범위를 선택합니다. 조건에 따른 결과가 TRUE, FALSE로 반환되며, 접근을 제어할 수 있습니다.
- IP subnetworks: IP 주소 범위를 조건으로 설정합니다. 예시로, 차단하고자 하는 IP 주소 범위를 입력하신 뒤, FALSE로 설정하면 해당 IP 대역으로부터 GCP 리소스에 접근이 불가능하도록 설정할 수 있습니다. 이번 실습에서는 특정 주소 범위에서 리소스 접근이 불가하도록 구성하고자 하니, IP subnetworks에 해당 IP 범위를 기입하신 뒤, FALSE를 선택하고 SAVE 버튼을 클릭하면 됩니다.
- Geographic locations: 요청이 특정 리전에서 시작되었는지 여부를 확인합니다. 요청 출처는 요청이 발생한 IP 주소의 위치정보에 따라 결정됩니다. 이로 인해 리전 속성은 공용 IP 주소에서 시작된 요청에 대해서만 작동합니다.
- Device policy: 기기 정책은 요청이 시작된 기기에 대한 정보를 기반으로 요청을 필터링하는 데 사용되는 속성 모음입니다. 예를 들어 기기 정책 속성은 IAP(Identity-Aware Proxy)와 함께 사용되어 컨텍스트 인식 액세스를 지원합니다.
- Access level dependencies: 다음 형식으로 된 하나 이상의 기존 액세스 수준 목록입니다.
- accessPolicies/**POLICY-NAME**/accessLevels/**LEVEL-NAME**
- POLICY-NAME: 조직의 액세스 정책의 숫자 이름입니다.
- LEVEL-NAME: 종속 항목으로 추가하려는 액세스 수준 이름입니다.
2. VPC SC 생성
2.1 Console -> Navigation menu -> Security -> VPC Service Controls -> CREATE
2.2 Create Access Policy
Access Policy Title*: VPC 서비스 제어 정책을 나타내는 제목을 작성합니다.
Select resources to include in the policy*: 해당 정책을 적용할 프로젝트를 선택합니다.
Manage principals*: 해당 정책을 관리할 사용자/서비스 계정을 추가합니다. 최소 하나 이상의 계정에 Admin 권한을 부여해야 합니다. 이후, CREATE ACCESS POLICY 버튼을 클릭하면 access policy가 생성됩니다.
2.3 NEW PERIMETER
1 -> 2번 과정에서 생성한 POLICY TITLE을 선택합니다.
2 -> ENFORCED MODE와 DRY RUN MODE 중 DRY RUN MODE를 선택합니다.
- ENFORCED MODE: 해당 정책이 실제 서비스에 바로 적용되어 GCP 리소스에 대한 액세스를 차단합니다.
- DRY RUN MODE: 리소스가 보호된 것처럼 위반 사항을 로깅하지만, 실제로 해당 리소스에 대한 액세스를 차단하지는 않습니다.
3 -> NEW PERIMETER 버튼을 클릭하여 새로운 VPC Service Perimeter를 생성합니다.
2.4 NEW VPC Service Perimeter
2.4.1 Details
Perimeter Title*: 새로운 Perimeter(경계)의 제목을 입력합니다. 향후 제목을 수정할 수 없습니다.
Perimeter Type*: Regular perimeter를 선택합니다.
- Regular perimeter: 새로운 경계를 만드는 것을 의미합니다.
- Perimeter bridge: 프로젝트가 다른 경계의 프로젝트와 통신해야할 때, Perimeter bridge를 통해 서비스 경계 간 통신이 가능합니다.
2.4.2 Resources to protect
해당 섹션에서는 보호하려는 프로젝트, VPC를 설정합니다. Add resources 버튼을 클릭한 뒤, 보호 대상으로 프로젝트 또는 VPC를 선택한 뒤, ADD SELECTED RESOURCES 버튼을 클릭합니다.
2.4.3 Restricted Services
해당 섹션에서는 보호하려는 서비스(리소스)를 설정합니다. perimeter control을 지원하는 GCP Service만 선택 가능합니다. ADD SERVICES 버튼을 클릭한 뒤, Storage를 검색하고 Cloud Storage API를 선택하면 GCS를 보호하려는 서비스로 설정할 수 있습니다.
2.4.4 VPC accessible services
생성할 경계 내부에서 Private Google Access를 사용하여 액세스할 수 있는 서비스를 지정합니다. 이는 이전 단계(2.4.3)에서 보호되는 서비스 목록으로 설정한 리소스에만 적용됩니다. 이번 실습에서는 private google access를 사용하지 않기 때문에 설정하지 않고 다음 단계로 넘어갑니다.
2.4.5 Access Levels
Access Levels는 경계 외부에서 경계 내부의 보호되는 리소스에 대해 액세스하도록 허용할 수 있습니다. 1번 단계에서 생성했던 Access Level을 선택합니다. VPC Service Perimeter 생성 이후에도 수정 가능합니다. 사전에 구성했던 Access Level 조건에 따라 경계 내부의 리소스에 접근 범위를 지정할 수 있습니다.
2.4.6 Ingress & Egress Policy
경계 외부의 API 클라이언트에서 경계 내부의 리소스에 액세스하도록 허용하려면 Ingress Policy를 구성합니다. VPC 서비스 제어는 Ingress 규칙과 Egress 규칙을 사용하여 서비스 경계로 보호되는 리소스와 클라이언트의 액세스를 허용합니다. 이번 실습에서는 Ingress 및 Egress 규칙을 사용하지 않기 때문에 CREATE PERIMETER 버튼을 클릭하면 됩니다.
위 과정을 통해서 생성된 경계가 전파되고 적용되는 데 최대 30분이 소요될 수 있습니다. 아래의 쿼리문을 Logs Explorer에 입력하면 Access Levels에서 설정한 IP 범위에서 GCS 버킷에 접속했을 때의 결과를 확인할 수 있습니다.
resource.type="audited_resource" severity="ERROR" protoPayload.metadata.dryRun=true
현재는 Dry Run Mode로 서비스 경계를 생성했기 때문에 GCP 리소스에 접근이 가능한 상태입니다. 다음과 같은 방법으로 실제 서비스에 적용이 가능합니다.
- Console -> Navigation menu -> Security -> VPC Service Controls -> DRY RUN MODE
- 해당 페이지에서 Perimeter의 제목을 클릭한 뒤, 세부정보 페이지에서 Dry run config에서 ENFORCE 버튼을 클릭하면 실제 서비스 환경에 적용됩니다.
'CSP (Cloud Service Provider) > GCP' 카테고리의 다른 글
[GCP] Workload Identity Federation을 사용하기 위한 Github Action 세팅 (0) | 2023.05.19 |
---|---|
GKE Maintenance Alert to SLACK (0) | 2023.05.12 |
GCP Workload Identity Federation (0) | 2023.05.11 |
GCP KMS(Key Management System) (0) | 2023.05.11 |
최소권한 관리 (0) | 2023.01.19 |
댓글