목적 :
GCP에서는 VPC서비스 제어라는 보안이 있습니다.
그 중 서비스 경계를 통해 Google Cloud 리소스와 VPC네트워크 격리가 가능합니다.
이를 통해 네트워크 통신을 차단, 허용하는 것 외에 GCP 리소스를 내외부적으로 허용, 차단을 할 수 있습니다.
VPC서비스 제어에 대해서는 작성할 것이 많지만, 이번 문서에서는 같은 조직간 프로젝트에 있는 리소스를 연결시 사용될 수 있는 “경계 브리지"에 대해 어떤 것인지, 사용방법에 대해 기술합니다.
참고 Docs (VPC서비스 제어 개요)
https://cloud.google.com/vpc-service-controls/docs/overview?hl=ko
내용 :
GCP에서 shared VPC와 VPC peering의 차이점은
Shared VPC는 메인이 되는 프로젝트를 기점으로 한 중앙집중형 (Centralized) 네트워크 관리 방식
VPC peering은 각 프로젝트별로 묶어지는 탈중앙화(Decentralized) 네트워크 관리방식입니다.
그리고 오늘 문서 주제인 브리지는 프로젝트단위로 연결을 제어합니다.
연결방법이라 작성하긴 하였지만, 정확히는 VPC서비스제어를 통한 GCP 리소스간의 연동방안이라 볼 수 있습니다.
브리지의 제약은 동일 조직에서만 설정이 가능합니다.
같은 조직내 프로젝트를 연결하는 것이므로, 설정이 간편한 점과 프로젝트 하나에 VPC를 나누는 것이 아닌 DMZ, 내부, 연계기관과 통신이 필요한 리소스등 서비스 범위에 따라 프로젝트를 나눈 케이스라면 브리지 사용을 고려해 볼 수 있습니다
또한 리소스간 통신방향이 양방향 이므로, 통신하는 방식을 완전히 알 수 없을때 사용하기 좋다고 생각됩니다.
반대로 이야기하면, 방화벽등을 통해 막을 수는 없고 서비스계정을 통해 권한을 조정해야되니 보안적인 면에서는 위의 방법보다 취약할 수 있습니다.
그래서 GCP Docs에서도 “경계브리지 대신 더 세분화된 제어를 제공하는 인그레스 및 이그레스 규칙을 사용하는 것이 좋습니다.” 라고 기술되어 있습니다.
위에 VPC peering, Shared VPC에 대해 이야기하였으나, 브리지는 TCP/IP통신이 아니라는 점에서 직접적인 비교보다 이러한 서비스가 있다 정도로 보시기를 부탁드립니다.
GCP 브리지를 사용한 경계 간 공유 문서
https://cloud.google.com/vpc-service-controls/docs/share-across-perimeters?hl=ko
구글에서 예시로 보여주는 구성도 입니다.
설명에서는 Private Project에 있는 VM들은 Sink Project에 접근하지 못하도록 하도록 하는 조건이 있었고 그에 맞추어 Source Project, Sink Project만 브리지로 연결했습니다.
- 구성도
총 3개의 프로젝트로 구성하였습니다.
DMZ Project / in-server Project / Storage Project
예시로 Storage간 복사로 진행해보겠습니다.
조건은 아래와 같습니다.
- DMZ ↔ in-server 간에는 통신을 허용하고storage 프로젝트에서는 DMZ, in-server에 접근이 불가하는 조건
- 구성방법
제약조건 : VPC서비스 제어를 사용합니다. 해당 기능은 조직 범위에서 볼 수 있습니다.
그러므로 조직 권한이 있는 관리자 권한이 있어야 테스트가 가능합니다.
없다면, 도메인을 생성하여 테스트 하겠습니다.
GCP를 도메인으로 사용하는 방안은 아래 링크를 참조 부탁드립니다.
https://seonggi.kr/227
프로젝트로 선택시 나오는 메시지
- GCP Console에 조직으로 선택 후 접근합니다.
보안 > 제로트러스트/VPC 서비스 제어
- 테스트 하기전에 조직내에 프로젝트가 2개 이상이 있어야합니다.
본 문서에서는 “DMZ Project / in-server Project”를 service-vpc-test란 폴더 하위에 같이 두었습니다. - default policy → 정책관리를 선택합니다.
- default policy에서는 브리지를 구성할 수 없습니다. 신규 액세스 정책을 생성합니다.
신규 정책 생선시에는 리소스를 필수로 선택하여야 하는데, 본 문서에서는 브리지로 연결할 프로젝트를 포함한 “service-vpc-test” 폴더를 선택하였습니다.
Access Context Manager권한이 있어야 하기에, 관리자 아이디에 해당 권한을 부여하였습니다.
- 정책이 생성되었고, 이제 프로젝트에 각 경계를 설정합니다.
- 프로젝트 경계는 각 프로젝트별로 생성합니다.
아래는 VPC서비스 경계 생성에 대한 화면이며, 여기서 설정이 필요한 것은 2번(Resources to Protect), 3번(Restricted Services), 6번(인그레스 정책)항목입니다.
3번(Restricted Services)는 프로젝트에서 보호할 서비스입니다.
storage transfer로 테스트를 하기 위해 storage에 관련된 API들을 추가하였습니다.
인그레스는 모든소스에서 관리자 id로 접근시
GCP서비스는 해당 project로 설정하였습니다.
- 다른 프로젝트도 동일하게 설정 한 후 이제 브리지 설정을 진행하겠습니다.
glcoud, Console모두 설정이 가능합니다.
Console 설정시에는 새경계를 선택 후 경계 유형에서 경계 브리지를 선택합니다.
보호할 리소스에서는 위에서 일반 경계를 설정한 각 프로젝트를 선택합니다.
- gcloud로 구성시 아래와 같은 명령어로 할 수 있습니다.
구글 예제에서는 policy가 제외되어 있지만..넣어야 동작됩니다.
gcloud access-context-manager perimeters create bridge --title="dmz-bridges" --perimeter-type=bridge --resources=projects/844500599092,projects/663164549977 --policy=363616457135
projetcts번호는 gcp메인페이지에서 각 프로젝트를 선택하면 확인할 수 있습니다.
policy id번호는 액세스 정책을 클릭하면 정책이름 옆에 있는 것이 policy id번호 입니다.
또한 gcloud명령어 실행시 해당 명령어는 조직 설정에 대한 건인데..
accesscontextmanager.googleapis.com의 SERVICE_DISABLED 에러가 계속 발생됩니다.
gcloud실행시 프로젝트를 선택 후 진행해야됩니다.
해당 에러메시지 관련 URL :
https://sarc.io/index.php/cloud/2324-gcp-gcloud-organization-cli-accesscontextmanager-googleapis-com-service-disabled
참고예제 : https://medium.com/google-cloud/google-cloud-vpc-service-controls-lessons-learned-670619c3d82c
구성도를 보면 연결 자체는 간단하지만, 각 프로젝트에 경계를 설정해주어야 하여 처음에는 여러가지를 설정해야합니다.
- 브리지 연결 테스트
위의 조건을 다시 상기해보겠습니다.
“DMZ ↔ in-server 간에는 통신을 허용하고
storage 프로젝트에서는 DMZ, in-server에 접근이 불가”
먼저 차단되는 조건으로 테스트를 해보겠습니다.
Storage 프로젝트 → DMZ 프로젝트로 Storage Transfer를 설정 후 실행하면 아래와 같이 조직 정책에 의해 실패하였다고 출력됩니다.
이제 브리지로 연결한 DMZ ↔ in-server 프로젝트간을 테스트 해보겠습니다.
아래와 같이 storage간 복사가 별 문제 없이 완료되었습니다.
테스트로는 Storage Transfer를 사용하였으나, 다른 서비스들도 사용 가능합니다.
다만, 지원되는 서비스와 제한사항이 있으므로 아래 GCP Docs를 참고 해야합니다.
https://cloud.google.com/vpc-service-controls/docs/supported-products?hl=ko
- 정리
VPC 서비스 제어라는 것이 온프레미스만 해본 저에게는 신선하였습니다.
네트워크를 통한 허용, 차단이 아닌 서비스(리소스)를 제어하는 부분 이라서요.
VPC 서비스 제어 자체는 더 알아보고, 사용할 것이 많다 생각합니다. (그만큼 공부할 것이 ..)
단순 VM사용이 아닌 GCP여러 리소스와 온프레미스, 타사 클라우드를 연동하여 사용한다면 인그레스, 이그레스를 적절히 사용하여 보안성 향상에 도움이 될거라 생각됩니다.
금일은 이러한 서비스 중에 브리지라는게 개념이 신기하여 알아보다 작성하게 되었습니다.
이 서비스가 필요한 경우는 대단히 제한적일 거라 생각됩니다. 아래의 경우에는 그나마 사용할만 할지도요.
같은 조직 산하에 별도의 프로젝트가 존재합니다.
DMZ, Server Zone, Data Storage Zone이 각 프로젝트 단위로 나누어져 있다고 가정합니다.
DMZ의 WAS서버가 → DB Server Zone에 있는 리소스와 연결되어 사용이 필요합니다.
정책적으로 Data Storage Zone Project에 있는 리소스는 접근하지 못하도록 한다는 조건일때 서비스 경계 브리지를 사용하면, 보다 간편하게 연결할 수 있다는 것이 장점으로 생각됩니다.
'Cloud > GCP' 카테고리의 다른 글
[GCP] Mobile Device Alerting 설정 (0) | 2024.11.25 |
---|---|
GCP의 Free Tier로 3-Tire 구축 테스트 내용정리 (0) | 2024.10.16 |
GCP Web console 접근을 위한 X-windows 구성 (0) | 2024.10.16 |
[GCP/OS] GCP compute engine SSH key 발급 및 접속 (0) | 2024.08.21 |
Google Cloud Next ’24 Security 참석 (0) | 2024.08.19 |
[GCP] WebConsole 접근 방안 (0) | 2024.08.05 |
Squid Proxy를 통한 GCP Web Console 접속 (0) | 2024.07.30 |