Deployment Manager를 사용하여 공유 VPC 만들기(가이드)

이 가이드에서는 Deployment Manager를 사용하여 공유 VPC를 설정하는 프로세스를 설명합니다. 이 프로세스를 통해 조직 전체에 GCP 리소스 액세스와 관련된 엄격한 네트워크 보안 규칙을 적용할 수 있습니다.

소개

대규모 조직에서는 예산 책정, 액세스 제어 등을 분리하기 위해 부서나 애플리케이션을 서로 다른 프로젝트에 배치해야 할 수 있습니다. 공유 VPC를 사용하면 조직 관리자가 여러 프로젝트에 단일 공유 VPC 네트워크 및 해당 네트워킹 리소스를 사용할 수 있는 권한을 부여할 수 있습니다.

조직 관리자는 공유 VPC를 사용하여 조직의 네트워크 및 보안 관리자가 연결된 프로젝트에서 사용할 수 있는 RFC 1918 IP 공간(및 VPN이나 방화벽 규칙과 같은 관련 기능)의 VPC 네트워크를 관리하도록 허용할 수 있습니다. 연결된 프로젝트의 관리자는 공유 VPC 네트워크 공간에서 가상 머신(VM) 인스턴스를 만들 수 있습니다. 또한 조직 전체에 일관된 정책을 적용 및 시행할 수 있습니다.

공유 VPC는 대규모 조직이나 보안 규칙이 엄격한 조직에서 주로 사용되므로 공유 VPC 설정을 쉽게 재현할 수 있어야 합니다. 이를 위해 IaC(Infrastructure as Code) 도구인 Deployment Manager를 사용할 수 있습니다.

가이드 실행 정보

이 가이드에서는 사용자가 Google Cloud Platform(GCP)의 조직 리소스를 잘 알고 있는 조직 리소스 관리자라고 가정합니다. 공유 VPC와 Deployment Manager를 이해하면 이 가이드를 쉽게 진행할 수 있습니다. 이 가이드에서 사용하는 배포 단어는 Deployment Manager의 배포를 나타냅니다.

이 가이드에서는 편의상 IAM 사용자 1명, 즉 기존 조직 리소스 관리자 ID만 사용합니다. 아직 조직 리소스가 없으면 시작하기 전에 섹션에서 조직 리소스를 만드는 방법을 참조하세요. 회사에서는 일반적으로 조직 리소스 관리자, 네트워크 관리자(공유 VPC 관리), 공유 VPC 사용자 3명이 이 가이드에서 설명하는 시나리오를 설정하는 데 참여합니다.

배포 아키텍처

다음 다이어그램은 이 솔루션의 아키텍처를 보여줍니다.

공유 VPC 아키텍처

이 가이드에서는 이 다이어그램에 표시된 프로젝트 세 개를 만듭니다.

  • 배포 관리자 홈 프로젝트는 조직 리소스 관리자(이 가이드에서는 본인)가 관리하며 다른 프로젝트 및 공유 VPC 설정을 만드는 데 사용됩니다.
  • 호스트 프로젝트는 네트워크 관리자가 관리하며 공유 VPC를 호스팅합니다. 모든 네트워크 구성은 이 프로젝트에서 수행됩니다.
  • 서비스 프로젝트는 공유 VPC 사용자가 관리합니다. 이 프로젝트에서 리소스는 호스트 프로젝트의 공유 VPC에서 만들 수 있습니다.

목표

  • 배포 관리자 홈 프로젝트를 만들고 구성합니다.
  • 배포 관리자로 호스트 및 서비스 프로젝트를 만듭니다.
  • 공유 VPC 기능을 구성합니다.
  • 호스트 프로젝트의 VPC 및 일부 하위 네트워크를 구성합니다.
  • VPC를 서비스 프로젝트에서 사용할 수 있는지 확인합니다.

비용

이 가이드에서는 비용이 청구될 수 있는 다음과 같은 GCP 구성요소를 사용합니다.

  • Compute Engine

가격 계산기를 사용하면 예상 사용량을 기준으로 예상 비용을 산출할 수 있습니다.

시작하기 전에

이 가이드는 GCP 조직을 기반으로 합니다. GCP 조직이 없으면 하나를 만듭니다. 자세한 내용은 조직 만들기 및 관리를 참조하세요.

이 가이드의 뒷부분에서 배포(즉, 배포 관리자 배포)를 사용하여 GCP 프로젝트 2개를 만들게 됩니다. 이 배포는 특정 구성이 적용된 전용 프로젝트에서 만듭니다. 다음 단계는 이 프로젝트의 초기 설정과 구성을 안내합니다.

배포 관리자의 홈 프로젝트 만들기

  1. Cloud Shell을 엽니다.

    Cloud Shell 열기

  2. 아직 결제 계정이 없으면 새 결제 계정을 만듭니다. 자세한 내용은 결제 계정 만들기를 참조하세요.

  3. 조직에 새 프로젝트를 만들고 결제 계정을 설정합니다. 이 프로젝트에 고유한 ID를 선택해야 합니다. 예를 들어 [YOUR_NAME]-[DATE]-dm-home과 같은 이름을 사용할 수 있습니다.

    gcloud

    1. 조직 목록을 표시하고 조직 ID를 기록합니다.

      gcloud organizations list
    2. 이 가이드에서 반복적으로 사용할 값의 환경 변수를 설정합니다. [ORG_ID]를 이전 단계에서 복사한 값으로 바꾸고 [DM_HOME_PROJECT_ID]를 홈 프로젝트의 ID로 바꿉니다.

      export ORG_ID=[ORG_ID]
      export DM_HOME_PROJECT=[DM_HOME_PROJECT_ID]
    3. 새 프로젝트를 만듭니다.

      gcloud projects create $DM_HOME_PROJECT \
          --organization=$ORG_ID
    4. 프로젝트의 결제 ID 목록을 가져오고 결제 ID를 기록합니다.

      gcloud beta billing accounts list
    5. 결제 계정 여러 개에 액세스할 수 있는 경우 각 계정의 내부 정책을 검토하고 적합한 계정을 선택합니다.

    6. 환경 변수를 이전 단계에서 가져온 결제 계정의 ID로 설정합니다. [BILLING_ACCOUNT_ID]를 이전 단계에서 가져온 결제 ID로 바꿉니다.

      export BILLING_ACCOUNT_ID=[BILLING_ACCOUNT_ID]
    7. 새 프로젝트에 대한 결제를 사용 설정합니다.

      gcloud beta billing projects link $DM_HOME_PROJECT \
          --billing-account=$BILLING_ACCOUNT_ID

    Console

    1. GCP Console에서 리소스 관리 페이지를 엽니다.

      [리소스 관리 페이지로 이동](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    2. 왼쪽 상단의 조직 드롭다운 목록에서 조직을 선택합니다.

    3. 프로젝트 만들기를 클릭한 다음 프로젝트 이름으로 선택한 ID를 입력합니다.

    4. 결제 계정 여러 개에 액세스할 수 있는 경우 결제 계정 섹션에서 각 계정에 대한 내부 정책을 검토하여 이 가이드에 사용할 계정 하나를 선택합니다.

    5. 조직 섹션에서 조직이 선택되었는지 확인합니다.

    6. 만들기를 클릭합니다.

  4. 가이드 나머지 부분에서 필요한 API를 사용 설정합니다.

    gcloud

    gcloud services enable cloudbilling.googleapis.com \
        deploymentmanager.googleapis.com \
        cloudresourcemanager.googleapis.com \
        iam.googleapis.com \
        servicemanagement.googleapis.com \
        --project $DM_HOME_PROJECT

    Console

    1. GCP Console에서 새 프로젝트를 선택했는지 확인합니다. 필요한 경우 리소스 관리 페이지에서 새 프로젝트로 전환합니다.

      [리소스 관리 페이지로 이동](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    2. API 라이브러리 페이지로 이동합니다.

      [API 라이브러리 페이지로 이동](https://console.cloud.google.com/apis/library){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }

    3. 다음 API를 사용 설정합니다.

      • Google Cloud Billing API
      • Google Identity and Access Management(IAM) API
      • Google Service Management API
      • Google Cloud Deployment Manager V2 API
      • Google Cloud Resource Manager API

조직 리소스 정책 구성

공유 VPC는 조직 수준 기능입니다. 따라서 조직 수준 정책을 일부 구성해야 합니다. 배포 관리자가 사용하는 서비스 계정에는 조직 수준의 특정 역할이 필요합니다.

gcloud


  1. 프로젝트 번호 및 서비스 계정 이름에 대한 환경 변수를 설정합니다. 다음 명령어는 프로젝트에서 값을 읽은 다음 이 값을 사용하여 환경 변수를 설정합니다.

    export PROJECT_NUMBER=$(gcloud projects describe $DM_HOME_PROJECT \
        --format="value(projectNumber)")
    export DM_SA=${PROJECT_NUMBER}@cloudservices.gserviceaccount.com
  2. IAM 정책을 추가합니다.

    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/resourcemanager.projectCreator \
        --member="serviceAccount:${DM_SA}"
    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/billing.user \
        --member="serviceAccount:${DM_SA}"
    gcloud organizations add-iam-policy-binding $ORG_ID \
        --role=roles/compute.xpnAdmin \
        --member="serviceAccount:${DM_SA}"

Console


  1. 프로젝트에서 IAM 및 관리자 > 설정으로 이동합니다.

  2. 프로젝트 번호를 기록합니다.

  3. IAM 및 관리자 > IAM으로 이동합니다.

  4. 맨 위에 있는 프로젝트 선택 메뉴에서 사용자 조직으로 전환합니다.

  5. 창 맨 위에 있는 추가를 클릭합니다.

  6. 다음 역할을 Deployment Manager 서비스 계정에 추가합니다. 이 서비스 계정 이름은 [PROJECT_NUMBER]@cloudservices.gserviceaccount.com입니다. 여기서, [PROJECT_NUMBER]는 앞에서 기록한 값입니다.

    • 리소스 관리자 > 프로젝트 생성자
    • 결제 > 결제 계정 사용자
    • Compute Engine > Compute 공유 VPC 관리자

프로젝트 및 공유 VPC 구성 만들기

이제 배포 관리자를 사용하여 호스트 및 서비스 프로젝트를 만들 준비가 되었습니다. GCP 콘솔을 사용 중일 경우 여기서부터 Cloud Shell로 전환해야 합니다.

  1. 세션의 시간이 초과되었거나 세션을 종료한 경우 새 Cloud Shell 세션을 엽니다.

    Cloud Shell 열기

  2. Cloud Shell에서 다음 Git 저장소를 복제합니다.

    git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
  3. 복제한 저장소에서 project_creation 샘플로 이동합니다.

    cd $HOME/deploymentmanager-samples/examples/v2/project_creation
  4. config_shared_vpc.yaml 파일을 엽니다.

    nano config_shared_vpc.yaml
  5. 다음 표에 나와 있는 값을 설정합니다.

    설정 설명
    HOST_PROJECT 호스트 프로젝트의 고유한 이름입니다. 호스트 프로젝트는 VPC가 생성되고 관리되는 위치입니다. 파일의 마지막 행에서도 이 값을 변경해야 합니다. 총 2개를 변경합니다.

    예:

    [YOUR_NAME]-[DATE]-host
    SERVICE_PROJECT 서비스 프로젝트의 고유한 이름입니다. 서비스 프로젝트는 호스트 프로젝트의 VPC가 사용되는 위치입니다.

    예:

    [YOUR_NAME]-[DATE]-svc
    ORG_ID 조직 ID입니다. 이전 단계에서 이 값을 가져와야 합니다. 가져오지 않은 경우에는 다음 명령어를 실행하여 가져올 수 있습니다.
    
    gcloud organizations list

    조직 ID를 따옴표로 묶어서 YAML 파일의 숫자 값으로 처리되지 않도록 합니다.

    BILLING_ACCOUNT_ID 결제 계정의 ID입니다. 이전 단계에서 이 값을 가져와야 합니다. 가져오지 않은 경우에는 다음 명령어를 실행하여 가져올 수 있습니다.
    
    gcloud beta billing accounts list
    EMAIL 사용자 이메일 주소입니다. 이메일 주소를 설정해야 하는 곳은 총 5곳입니다.
  6. 다음 키 순서를 사용하여 파일을 저장하고 nano를 종료합니다.

    ^O <Enter> ^X

  7. GCP 콘솔을 사용하여 배포 관리자 홈 프로젝트를 만든 경우 환경 변수를 홈 프로젝트의 ID로 설정합니다.

    export DM_HOME_PROJECT=[DM_HOME_PROJECT]
  8. 배포 미리보기를 만듭니다.

    gcloud deployment-manager deployments \
        create shared-vpc-projects \
        --config config_shared_vpc.yaml --preview \
        --project $DM_HOME_PROJECT

    배포 관리자 배포 미리보기를 만들면 만들어지고, 업데이트되고, 삭제되는 리소스를 확인할 수 있습니다.

  9. 배포 미리보기를 적용합니다.

    gcloud deployment-manager deployments \
        update shared-vpc-projects \
        --project $DM_HOME_PROJECT
  10. GCP 콘솔에서 배포를 확인합니다. 필요한 경우 상단의 프로젝트 선택 메뉴에서 배포 관리자 홈 프로젝트를 선택합니다.

    배포 관리자로 이동

몇 분 후 배포가 완료되고 새 프로젝트 두 개가 생성됩니다. 서비스 프로젝트가 이미 호스트 프로젝트와 연결되어 있지만 공유할 VPC는 아직 만들지 않았습니다.

문제해결

미리보기를 만드는 동안 문제가 발생하면 아직 리소스가 생성되지 않은 배포를 삭제하고 프로세스를 다시 시도합니다.

그러나 미리보기를 만들었지만 배포에 실패한 경우에는 해당 배포를 다시 만들지 못할 수 있습니다. 프로젝트는 삭제하고 바로 다시 만들 수 없으며 안전 기간 30일 동안 삭제된 것으로 표시됩니다. 배포를 다시 만들어야 하는 경우 다시 시도하기 전에 config_shared_vpc.yaml 파일에서 HOST_PROJECT 값과 SERVICE_PROJECT 설정을 변경합니다.

VPC 만들기

이제 다른 배포 관리자 템플릿을 사용하여 호스트 프로젝트에서 VPC를 만들어 보겠습니다. 이 작업은 일반적으로 네트워크 관리자가 수행합니다. 공유 VPC 구성이 이미 설정되어 있으므로 서비스 프로젝트에서 VPC를 바로 사용할 수 있습니다.

네트워킹 구성 배포

  1. 환경 변수를 config_shared_vpc.yaml 파일에서 설정한 호스트 프로젝트 및 서비스 프로젝트 이름으로 설정합니다.

    export HOST_PROJECT=[HOST_PROJECT]
    export SERVICE_PROJECT=[SERVICE_PROJECT]
  2. Git 저장소의 network 샘플로 이동합니다.

    cd $HOME/deploymentmanager-samples/community/network/

    config.yaml 파일에서 자체 CIDR을 사용하는 하위 네트워크 세 개가 있는 network.py 유형의 리소스 하나를 확인할 수 있습니다. 필요에 맞게 이 리소스를 변경하거나 복제해 볼 수 있습니다.

  3. 배포 미리보기를 만듭니다. 이 배포는 호스트 프로젝트에서 생성됩니다.

    gcloud deployment-manager deployments create host-network \
        --config config.yaml --preview \
        --project $HOST_PROJECT
  4. 배포 미리보기를 적용합니다.

    gcloud deployment-manager deployments update host-network \
        --project $HOST_PROJECT

확인

이제 서비스 프로젝트에서 호스트 프로젝트의 네트워크에 대한 액세스를 확인할 수 있습니다. 호스트 프로젝트에 roles/compute.networkUser 역할이 있으므로 이 네트워크에 액세스할 수 있습니다. 프로덕션 배포의 경우, 공유 VPC를 사용할 모든 사용자에게 이 역할을 할당해야 합니다.

  1. 호스트 프로젝트의 하위 네트워크를 사용하여 서비스 프로젝트에서 테스트 인스턴스를 만듭니다.

    gcloud

    gcloud compute instances create instance-test \
        --zone us-east1-b \
        --subnet \
        "projects/$HOST_PROJECT/regions/us-east1/subnetworks/host-network-us-east1" \
        --project $SERVICE_PROJECT

    Console


    1. 서비스 프로젝트를 선택합니다.

      [리소스 관리 페이지로 이동](https://console.cloud.google.com/cloud-resource-manager){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
    2. VM 인스턴스 페이지로 이동합니다.

      [VM 인스턴스 페이지로 이동](https://console.cloud.google.com/compute/instances){: target="console" class="button button-primary" track-type="tutorial" track-name="consoleLink" track-metadata-position="body" }
    3. 만들기를 클릭합니다.
    4. 이름 섹션에 `instance-test`를 입력합니다.
    5. 영역 섹션에서 `us-east1-b`를 선택했는지 확인합니다.
    6. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭합니다.
    7. 네트워킹 탭을 클릭합니다.
    8. 기존 네트워크 인터페이스를 클릭합니다.
    9. 나와 공유된 네트워크 옵션을 선택합니다.
    10. ![인스턴스 만들기 페이지의 '나와 공유된 네트워크' 섹션](/solutions/images/shared-vpc-with-deployment-manager-networks-shared-with-me.png){: class="screenshot" width="50%"}
    11. 네트워크 인터페이스 섹션 하단에 있는 완료를 클릭합니다.
    12. 만들기를 클릭합니다.

    인스턴스가 시작될 때까지 1~2분 정도 기다립니다. 인스턴스가 준비되면 VM 인스턴스 페이지에 녹색 상태 아이콘과 함께 표시됩니다.

  2. 인스턴스가 공유 VPC를 사용하고 있는지 확인합니다.

    gcloud

    gcloud compute instances describe instance-test \
        --zone us-east1-b --project $SERVICE_PROJECT \
        --format="value(networkInterfaces[0].network)"

    이 명령어 결과는 사용자가 만든 인스턴스에서 사용하는 VPC로 연결되는 링크입니다. 인스턴스는 서비스 프로젝트에서 생성되었지만 VPC는 호스트 프로젝트에서 생성됐음을 이 링크를 통해 확인할 수 있습니다(명령어에 --project 플래그를 사용한 결과).

    Console


    1. 인스턴스 목록에서 인스턴스를 선택합니다.
    2. 호스트 프로젝트에서 네트워크를 사용하고 있는지 확인합니다.

      !['host-network-us-east1'을 보여주는 네트워크 인터페이스 목록](/solutions/images/shared-vpc-with-deployment-manager-verify-network.png){: class="screenshot"}

삭제

이 가이드를 완료했으면 이후에 요금이 청구되지 않도록 GCP에서 만든 리소스를 삭제할 수 있습니다. 다음 섹션에서는 이러한 리소스를 삭제하거나 사용 중지하는 방법을 설명합니다.

  1. Cloud Shell에서 테스트 인스턴스를 삭제합니다.

    gcloud compute instances delete instance-test \
        --project $SERVICE_PROJECT \
        --zone us-east1-b
  2. 프로젝트 삭제 보호를 설정한 경우 삭제합니다.

    gcloud beta resource-manager org-policies disable-enforce \
        --organization $ORG_ID compute.restrictXpnProjectLienRemoval
  3. host-network 배포를 삭제합니다.

    gcloud deployment-manager deployments delete host-network \
        --project $HOST_PROJECT
  4. shared-vpc-projects 배포를 삭제합니다.

    gcloud deployment-manager deployments \
        delete shared-vpc-projects \
        --project $DM_HOME_PROJECT
  5. 홈 프로젝트를 삭제합니다.

    gcloud projects delete $DM_HOME_PROJECT

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...