공유 VPC 프로비저닝

공유 VPC를 사용하면 호스트 프로젝트VPC 네트워크에서 동일한 조직의 다른 서비스 프로젝트로 서브넷을 내보낼 수 있습니다. 서비스 프로젝트의 인스턴스는 호스트 프로젝트의 공유 서브넷에서 네트워크 연결을 수행할 수 있습니다. 이 페이지에서는 조직에 필요한 몇 가지 관리 준비를 포함하여 공유 VPC를 설정하고 사용하는 방법에 대해 설명합니다.

할당량, 한도, 운영 가능 리소스

시작하기 전에 공유 VPC 개요IAM 개요를 숙지해야 합니다. 구체적으로는 다음과 같습니다.

조직 준비

관리자 및 IAM

조직 준비, 공유 VPC 호스트 프로젝트 설정 및 공유 VPC 네트워크 사용에는 최소 세 가지의 관리자 IAM 역할이 필요합니다. 각 역할 및 선택적 역할에 대한 자세한 내용은 공유 VPC 개요의 관리자 및 IAM 섹션을 참조하세요.

관리자 목적
조직 관리자 조직 관리자는 공유 VPC 관리자를 지정하고 조직 수준의 정책을 정의하여 공유 VPC 호스트 프로젝트가 실수로 삭제되지 않게 합니다.
공유 VPC 관리자 공유 VPC 관리자는 호스트 프로젝트를 사용 설정하고 호스트 프로젝트에 서비스 프로젝트를 연결합니다.
서비스 프로젝트 관리자 공유 VPC 관리자는 IAM 구성원에게 전체 호스트 프로젝트 또는 프로젝트의 서브넷 일부에 대한 네트워크 사용자(compute.networkUser) 역할을 부여하여 서비스 프로젝트 관리자를 정의합니다. 또한 서비스 프로젝트 관리자는 소유권을 유지하고 서비스 프로젝트에 정의된 리소스를 제어하므로, 최소한 인스턴스 관리자(compute.instanceAdmin) 역할을 가지고 있거나 프로젝트 소유자여야 합니다.

실수로 호스트 프로젝트 삭제 방지

실수로 호스트 프로젝트를 삭제하면 연결된 모든 서비스 프로젝트가 중단될 수 있습니다. 프로젝트가 공유 VPC 호스트 프로젝트로 구성되면 특별한 잠금 기능(선취권)이 사용됩니다. 선취권이 존재하는 동안에는 실수로 프로젝트가 삭제되지 않습니다. 프로젝트가 공유 VPC로 구성되지 않게 되면 선취권은 호스트 프로젝트에서 자동으로 제거됩니다.

orgpolicy.policyAdmin 역할을 가진 조직 소유자 또는 다른 사용자는 선취권 제거를 resourcemanager.lienModifier 역할을 가진 조직 소유자 및 다른 사용자로만 제한하는 조직 수준 정책을 정의할 수 있습니다. 이렇게 하면 조직 소유자가 아니고 resourcemanager.lienModifier 역할이 없는 프로젝트 소유자가 실수로 공유 VPC 호스트 프로젝트를 삭제할 수 없게 됩니다. resourcemanager.lienModifier 역할 관련 권한에 대한 자세한 내용은 Resource Manager 문서에 있는 프로젝트에 선취권 사용하기를 참조하세요.

조직 정책은 조직의 모든 프로젝트에 적용되므로 이 단계를 한 번만 수행하면 선취권 삭제가 제한됩니다.

  1. orgpolicy.policyAdmin 역할을 가진 조직 관리자 또는 IAM 구성원으로 gcloud를 인증합니다. [ORG_ADMIN]을 조직 관리자의 이름으로 바꿉니다.

    gcloud auth login [ORG_ADMIN]
    
  2. 이 명령어의 결과를 확인하여 조직 ID 번호를 결정합니다.

    gcloud organizations list
    
  3. 이 명령어를 실행하여 조직에 compute.restrictXpnProjectLienRemoval 정책을 적용합니다. [ORG_ID]를 이전 단계에서 결정한 번호로 바꿉니다.

    gcloud beta resource-manager org-policies enable-enforce \
        --organization [ORG_ID] compute.restrictXpnProjectLienRemoval
    
  4. 조직 관리자 작업을 완료했으면 계정 보호를 위해 gcloud에서 로그아웃합니다.

    gcloud auth revoke [ORG_ADMIN]
    

공유 VPC 관리자 지정

조직 관리자는 하나 이상의 IAM 구성원에게 공유 VPC 관리자 역할인 compute.xpnAdmin을 부여할 수 있습니다. 이 권한 부여는 프로젝트 수준이 아닌 조직 또는 폴더 수준에서 바인딩을 만듭니다. 따라서 IAM 구성원을 프로젝트가 아닌 조직에서 정의해야 합니다.

Console

조직 수준에서 공유 VPC 관리자 역할을 부여하려면 다음 단계를 따르세요.

  1. Google Cloud Platform Console에 조직 관리자로 로그인한 다음 IAM 페이지로 이동합니다.
    IAM 페이지로 이동
  2. 프로젝트 메뉴에서 조직을 선택합니다.
    프로젝트를 선택하면 역할 메뉴에 올바른 항목이 표시되지 않습니다.
  3. 추가를 클릭합니다.
  4. 구성원의 이메일 주소를 입력합니다.
  5. 역할 드롭다운에서 Compute Engine > Compute 공유 VPC 관리자를 선택합니다.

  6. 저장을 클릭합니다.

폴더 수준에서 공유 VPC 관리자 역할을 부여하려면 다음 단계를 따르세요.

  1. Google Cloud Platform Console에 조직 관리자로 로그인한 다음 IAM 페이지로 이동합니다.
    IAM 페이지로 이동
  2. 프로젝트 메뉴에서 폴더를 선택합니다.
    프로젝트나 조직을 선택하면 올바른 옵션이 표시되지 않습니다.
  3. 구성원 페이지에서 추가를 클릭합니다.
  4. 새 구성원의 이메일 주소를 입력합니다.
  5. 역할 선택에서 Compute Engine > Compute 공유 VPC 관리자를 선택합니다.
  6. 저장을 클릭합니다.

gcloud

  1. 조직 관리자로 gcloud를 인증합니다. [ORG_ADMIN]을 조직 관리자의 이름으로 바꿉니다.

    gcloud auth login [ORG_ADMIN]
    
  2. 이 명령어의 결과를 확인하여 조직 ID 번호를 결정합니다.

    gcloud organizations list
    
  3. 조직 수준에서 공유 VPC 관리자 역할을 할당하려면 다음을 수행합니다.

    1. 공유 VPC 관리자 역할을 기존 IAM 구성원에 적용합니다. [ORG_ID]를 이전 단계의 조직 ID 번호로, [EMAIL_ADDRESS]를 공유 VPC 관리자 역할을 부여할 사용자의 이메일 주소로 바꿉니다.

       gcloud organizations add-iam-policy-binding [ORG_ID] 
      --member='user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  4. 폴더 수준에서 공유 VPC 관리자 역할을 할당하려면 다음을 수행합니다.

    1. 이 명령어의 결과를 확인하여 폴더 ID를 결정합니다.

      gcloud beta resource-manager folders list --organization=[ORG_ID]
      
    2. 공유 VPC 관리자 역할을 기존 IAM 구성원에 적용합니다. [ORG_ID]를 이전 단계의 조직 ID 번호로, [EMAIL_ADDRESS]를 공유 VPC 관리자 역할을 부여할 사용자의 이메일 주소로 바꿉니다.

       gcloud beta resource-manager folders add-iam-policy-binding [FOLDER_ID] 
      --member=`user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  5. 작업을 완료했으면 계정 보호를 위해 gcloud 명령줄 도구의 조직 관리자 계정에서 로그아웃합니다.

    gcloud auth revoke [ORG_ADMIN]
    

공유 VPC 설정

이 섹션의 모든 작업은 공유 VPC 관리자가 수행해야 합니다.

호스트 프로젝트 사용

조직 내에서 공유 VPC 관리자는 이 절차에 따라 할당량 및 한도를 기준으로 프로젝트를 공유 VPC 호스트 프로젝트로 지정할 수 있습니다. 공유 VPC 관리자는 조직의 resourcemanager.projectCreatorresourcemanager.projectDeleter 역할을 가지고 있을 때 프로젝트를 만들고 삭제할 수도 있습니다.

Console

  1. Google Cloud Platform Console의 공유 VPC 페이지로 이동합니다.
    공유 VPC 페이지로 이동
  2. 공유 VPC 관리자로 로그인합니다.
  3. 프로젝트 선택기에서 공유 VPC 호스트 프로젝트로 사용할 프로젝트를 선택합니다.
  4. 공유 VPC 설정을 클릭합니다.
  5. 다음 페이지의 호스트 프로젝트 사용에서 저장하고 계속하기를 클릭합니다.
  6. 서브넷 선택에서 다음 중 하나를 수행합니다.
    1. 호스트 프로젝트의 VPC 네트워크에 있는 현재 및 미래 서브넷을 모두 다음 단계에서 지정된 서비스 프로젝트 및 서비스 프로젝트 관리자와 공유해야 하는 경우 모든 서브넷 공유(프로젝트 수준 권한)를 클릭합니다.
    2. 호스트 프로젝트의 VPC 네트워크에서 서비스 프로젝트 및 서비스 프로젝트 관리자와 서브넷을 선택적으로 공유해야 하는 경우 개별 서브넷(서브넷 수준 권한)을 클릭합니다. 그런 다음 공유할 서브넷을 선택합니다.
  7. 계속을 클릭합니다.
    다음 화면이 표시됩니다.
  8. 프로젝트 이름에 호스트 프로젝트에 연결할 서비스 프로젝트를 지정합니다. 서비스 프로젝트를 연결한다고 해서 서비스 프로젝트 관리자가 정의되지는 않습니다. 이는 다음 단계에서 수행됩니다.
  9. 역할별 사용자 선택 섹션에서 서비스 프로젝트 관리자를 추가합니다. 이 사용자에게는 공유 서브넷에 대해 compute.networkUser의 IAM 역할이 부여됩니다. 서비스 프로젝트 관리자만이 공유 VPC 호스트 프로젝트의 서브넷에 리소스를 생성할 수 있습니다.
  10. 저장을 클릭합니다.

gcloud

  1. 공유 VPC 관리자로 gcloud를 인증합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 호스트 프로젝트가 되어야 하는 프로젝트에 대해 공유 VPC를 사용 설정합니다. [HOST_PROJECT_ID]를 프로젝트의 ID로 바꿉니다.

    조직 수준에서 공유 VPC 관리자 역할이 있는 경우

    gcloud compute shared-vpc enable [HOST_PROJECT_ID]
    

    폴더 수준에서 공유 VPC 관리자 역할이 있는 경우

    gcloud beta compute shared-vpc enable [HOST_PROJECT_ID]
    
  3. 프로젝트가 조직의 호스트 프로젝트로 나열되는지 확인합니다. [ORG_ID]를 조직 ID(gcloud organizations list에 따라 결정)로 바꿉니다.

    gcloud compute shared-vpc organizations list-host-projects [ORG_ID]
    
  4. 호스트 프로젝트를 사용 설정하기만 하면 되는 경우 gcloud에서 로그아웃하여 공유 VPC 관리자 계정 사용자 인증 정보를 보호할 수 있습니다. 그 외의 경우 이 단계를 건너뛰고 서비스 프로젝트 연결 단계로 계속 진행합니다.

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

서비스 프로젝트 연결

서비스 프로젝트는 서비스 프로젝트 관리자가 공유 VPC를 사용하기 전에 호스트 프로젝트에 연결해야 합니다. 공유 VPC 관리자가 연결을 완료하려면 다음 단계를 수행해야 합니다.

서비스 프로젝트는 호스트 프로젝트 하나에만 연결할 수 있지만 호스트 프로젝트는 여러 개의 서비스 프로젝트 연결을 지원합니다. 자세한 내용은 VPC 할당량 페이지의 공유 VPC에 한정되는 한도를 참조하세요.

Console

  1. Google Cloud Platform Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Platform Console의 공유 VPC 페이지로 이동합니다.
    공유 VPC 페이지로 이동
  3. 연결된 프로젝트 탭을 클릭합니다.
  4. 연결된 프로젝트 탭에서 프로젝트 연결 버튼을 클릭합니다.
  5. 프로젝트 이름 섹션에서 연결할 서비스 프로젝트 체크박스를 선택합니다. 서비스 프로젝트를 연결한다고 해서 서비스 프로젝트 관리자가 정의되지는 않습니다. 이는 다음 단계에서 수행됩니다.
  6. VPC 네트워크 권한 섹션에서 서비스 프로젝트 관리자를 선택합니다. 선택한 사용자에게는 공유 서브넷에 대해 compute.networkUser의 IAM 역할이 부여됩니다. 서비스 프로젝트 관리자만이 공유 VPC 호스트 프로젝트의 서브넷에 리소스를 생성할 수 있습니다.
  7. VPC 네트워크 공유 모드 섹션에서 다음 중 하나를 선택합니다.
    1. 호스트 프로젝트의 VPC 네트워크에 있는 모든 현재 및 미래 서브넷을 모든 서비스 프로젝트 및 서비스 프로젝트 관리자와 공유하려면 모든 서브넷 공유(프로젝트 수준 권한)를 클릭합니다.
    2. 호스트 프로젝트의 VPC 네트워크에서 서비스 프로젝트 및 서비스 프로젝트 관리자와 서브넷을 선택적으로 공유해야 하는 경우 개별 서브넷(서브넷 수준 권한)을 클릭합니다. 그런 다음 공유할 서브넷을 선택합니다.
  8. 저장을 클릭합니다.

gcloud

  1. 아직 하지 않은 경우 gcloud를 공유 VPC 관리자로 로그인합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 이전에 사용 설정된 호스트 프로젝트에 서비스 프로젝트를 연결합니다. [SERVICE_PROJECT_ID]를 서비스 프로젝트의 프로젝트 ID로, [HOST_PROJECT_ID]를 호스트 프로젝트의 프로젝트 ID로 바꿉니다.

    조직 수준에서 공유 VPC 관리자 역할이 있는 경우

    gcloud compute shared-vpc associated-projects add [SERVICE_PROJECT_ID] \
        --host-project [HOST_PROJECT_ID]
    

    폴더 수준에서 공유 VPC 관리자 역할이 있는 경우

    gcloud beta compute shared-vpc associated-projects add [SERVICE_PROJECT_ID] \
        --host-project [HOST_PROJECT_ID]
    
  3. 서비스 프로젝트가 연결되었는지 확인합니다.

    gcloud compute shared-vpc get-host-project [SERVICE_PROJECT_ID]
    
  4. 원하는 경우 호스트 프로젝트에 연결된 서비스 프로젝트를 나열할 수 있습니다.

    gcloud compute shared-vpc list-associated-resources [HOST_PROJECT_ID]
    
  5. 서비스 프로젝트를 연결하기만 하면 되는 경우 gcloud에서 로그아웃하여 공유 VPC 관리자 계정을 보호하시기 바랍니다. 그 외의 경우에는 이 단계를 건너뛰고 모든 서브넷 또는 일부 서브넷의 서비스 프로젝트 관리자를 정의합니다.

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

모든 서브넷의 서비스 프로젝트 관리자

공유 VPC 관리자는 서비스 프로젝트의 IAM 구성원을 호스트 프로젝트의 모든 서브넷에 액세스할 수 있는 서비스 프로젝트 관리자로 정의할 수 있습니다. 이 유형의 서비스 프로젝트 관리자에게는 전체 호스트 프로젝트compute.networkUser 역할이 부여됩니다. 즉, 현재 호스트 프로젝트에서 정의된 모든 서브넷과 향후 서브넷에 액세스할 수 있습니다.

Console

GCP 콘솔을 사용하여 호스트 프로젝트의 모든 서브넷에 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 IAM 구성원을 정의하려면 서비스 프로젝트 연결 섹션을 참조하세요.

gcloud

이 단계에서는 서비스 프로젝트의 IAM 구성원을 호스트 프로젝트의 모든 서브넷에 액세스할 수 있는 서비스 프로젝트 관리자로 정의합니다. 이 단계를 수행하기 전에 호스트 프로젝트를 사용 설정하고 호스트 프로젝트에 서비스 프로젝트를 연결해야 합니다.

  1. 아직 하지 않은 경우 gcloud를 공유 VPC 관리자로 로그인합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 서비스 프로젝트의 IAM 구성원이 서비스 프로젝트 관리자가 되도록 정책 바인딩을 만듭니다. [HOST_PROJECT_ID]를 호스트 프로젝트의 프로젝트 ID로, [SERVICE_PROJECT_ADMIN]을 서비스 프로젝트 관리자 사용자의 이메일 주소로 바꿉니다.

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
    --member "user:[SERVICE_PROJECT_ADMIN]" \
    --role "roles/compute.networkUser"
    

    다음과 같이 --member 인수 형식을 변경하여 여러 유형의 구성원을 지정할 수 있습니다.

    • Google 그룹(이메일 주소 기준)을 구성원으로 지정하려면 group:을 사용합니다.
    • Google 도메인을 구성원으로 지정하려면 domain:을 사용합니다.
    • 서비스 계정을 지정하려면 serviceAccount:를 사용합니다. 이 사용 사례에 대한 자세한 내용은 서비스 계정을 서비스 프로젝트 관리자로를 참조하세요.
  3. 정의해야 하는 서비스 프로젝트 관리자가 추가될 때마다 이전 단계를 반복합니다.

  4. 서비스 프로젝트 관리자 정의를 마치면 gcloud에서 로그아웃하여 공유 VPC 관리자 계정 사용자 인증 정보를 보호할 수 있습니다.

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

일부 서브넷의 서비스 프로젝트 관리자

공유 VPC 관리자는 서비스 프로젝트의 IAM 구성원을 호스트 프로젝트의 일부 서브넷에만 액세스할 수 있는 서비스 프로젝트 관리자로 정의할 수 있습니다. 이 옵션은 호스트 프로젝트의 일부 서브넷에 대해서만 compute.networkUser 역할을 부여하여 보다 세밀하게 서비스 프로젝트 관리자를 정의하는 방법을 제공합니다.

Console

GCP 콘솔을 사용하여 호스트 프로젝트의 일부 서브넷에만 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 IAM 구성원을 정의하려면 서비스 프로젝트 연결 섹션을 참조하세요.

gcloud

이 단계에서는 서비스 프로젝트의 IAM 구성원을 호스트 프로젝트의 일부 서브넷에만 액세스할 수 있는 서비스 프로젝트 관리자로 정의합니다. 이를 정의하기 전에 호스트 프로젝트를 사용 설정하고 호스트 프로젝트에 서비스 프로젝트를 연결해야 합니다.

  1. 아직 하지 않은 경우 gcloud를 공유 VPC 관리자로 로그인합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 서비스 프로젝트 관리자가 액세스해야 하는 호스트 프로젝트의 서브넷을 선택합니다. 현재 IAM 정책을 JSON 형식으로 가져옵니다. [SUBNET_NAME]을 호스트 프로젝트의 서브넷 이름으로, [HOST_PROJECT_ID]를 호스트 프로젝트의 프로젝트 ID로 바꿉니다.

    gcloud beta compute networks subnets get-iam-policy [SUBNET_NAME] \
        --region [SUBNET_REGION] \
        --project [HOST_PROJECT_ID] \
        --format json
    
  3. 전 단계의 JSON 출력을 복사하여 파일에 저장합니다. 교육용으로 여기서는 이를 subnet-policy.json 파일에 저장합니다.

  4. subnet-policy.json 파일을 수정하여 서브넷에 대한 액세스 권한이 있는 서비스 프로젝트 관리자가 될 IAM 구성원을 추가합니다. 각 [SERVICE_PROJECT_ADMIN]을 서비스 프로젝트의 IAM 사용자 이메일 주소로 바꿉니다.

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    정책에서 다음과 같이 다른 유형의 IAM 구성원(사용자가 아닌)을 지정할 수 있습니다.

    • Google 그룹(이메일 주소 기준)을 구성원으로 지정하려면 user:group:으로 전환합니다.
    • Google 도메인을 구성원으로 지정하려면 user:domain:으로 전환합니다.
    • 서비스 계정을 지정하려면 serviceAccount:를 사용합니다. 이 사용 사례에 대한 자세한 내용은 서비스 계정을 서비스 프로젝트 관리자로를 참조하세요.
  5. subnet-policy.json 파일의 내용을 사용하여 서브넷의 정책 바인딩을 업데이트합니다.

    gcloud beta compute networks subnets set-iam-policy [SUBNET_NAME] subnet-policy.json \
        --region [SUBNET_REGION] \
        --project [HOST_PROJECT_ID]
    
  6. 서비스 프로젝트 관리자 정의를 마치면 gcloud에서 로그아웃하여 공유 VPC 관리자 계정 사용자 인증 정보를 보호할 수 있습니다.

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

서비스 계정을 서비스 프로젝트 관리자로

공유 VPC 관리자는 서비스 프로젝트의 서비스 계정을 서비스 프로젝트 관리자로 정의할 수도 있습니다. 이 섹션에서는 두 가지 유형의 서비스 계정을 서비스 프로젝트 관리자로 정의하는 방법을 설명합니다.

다른 IAM 구성원과 마찬가지로 서비스 프로젝트 관리자 역할(compute.networkUser)은 호스트 프로젝트의 모든 서브넷 또는 일부 서브넷에만 부여할 수 있습니다. 그러나 설명의 편의를 위해 이 섹션에서는 호스트 프로젝트의 모든 서브넷에 대해 두 가지 서비스 계정을 서비스 프로젝트 관리자로 정의하는 방법만 보여줍니다.

사용자 관리형 서비스 계정을 서비스 프로젝트 관리자로

이 지침은 공유 VPC 호스트 프로젝트의 모든 서브넷에 대해 사용자 관리형 서비스 계정을 서비스 프로젝트 관리자로 정의하는 방법을 설명합니다.

Console

  1. Google Cloud Platform Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Platform Console의 설정 페이지로 이동합니다.
    설정 페이지로 이동
  3. 서비스 프로젝트 관리자로 정의해야 하는 서비스 계정이 포함된 서비스 프로젝트로 프로젝트를 변경합니다.
  4. 서비스 프로젝트의 프로젝트 ID를 복사합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 ID를 [SERVICE_PROJECT_ID]로 표시합니다.
  5. 프로젝트를 공유 VPC 호스트 프로젝트로 변경합니다.
  6. Google Cloud Platform Console의 IAM 페이지로 이동합니다.
    IAM 페이지로 이동
  7. 추가를 클릭합니다.
  8. [SERVICE_ACCOUNT_NAME]@[SERVICE_PROJECT_ID].iam.gserviceaccount.com구성원 필드에 추가하고 [SERVICE_ACCOUNT_NAME]을 서비스 계정의 이름으로 바꿉니다.
  9. 역할 메뉴에서 Compute Engine > Compute 네트워크 사용자를 선택합니다.
  10. 추가를 클릭합니다.

gcloud

  1. 아직 하지 않은 경우 gcloud를 공유 VPC 관리자로 로그인합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 서비스 프로젝트의 프로젝트 ID를 결정합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 ID를 [SERVICE_PROJECT_ID]로 표시합니다. [SERVICE_PROJECT_ID]를 서비스 프로젝트의 프로젝트 ID로 바꿉니다.

    gcloud projects describe [SERVICE_PROJECT_ID] --format='get(projectId)'
    
    • 서비스 프로젝트의 프로젝트 ID를 모르는 경우 조직의 모든 프로젝트를 나열할 수 있습니다. 이 목록에는 각 프로젝트 ID가 표시됩니다.

      gcloud projects list
      
  3. 정책 바인딩을 만들어 서비스 계정을 서비스 프로젝트 관리자로 만듭니다. [HOST_PROJECT_ID]를 호스트 프로젝트의 프로젝트 ID로, [SERVICE_ACCOUNT_NAME]을 서비스 계정 이름으로, [SERVICE_PROJECT_ID]를 서비스 프로젝트 ID로 바꿉니다.

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
        --member "serviceAccount:[SERVICE_ACCOUNT_NAME]@[SERVICE_PROJECT_ID].iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

Google API 서비스 계정을 서비스 프로젝트 관리자로

이 지침은 공유 VPC 호스트 프로젝트의 모든 서브넷에 대해 Google API 서비스 계정을 서비스 프로젝트 관리자로 정의하는 방법을 설명합니다. Google API 서비스 계정을 서비스 프로젝트 관리자로 설정하는 것은 공유 VPC와 함께 사용되는 관리형 인스턴스 그룹의 요구 사항입니다. 인스턴스 생성과 같은 작업은 이 유형의 서비스 계정으로 수행되기 때문입니다. 이 관계에 대한 자세한 내용은 관리형 인스턴스 그룹 및 IAM을 참조하세요.

Console

  1. Google Cloud Platform Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Platform Console의 설정 페이지로 이동합니다.
    설정 페이지로 이동
  3. 서비스 프로젝트 관리자로 정의해야 하는 서비스 계정이 포함된 서비스 프로젝트로 프로젝트를 변경합니다.
  4. 서비스 프로젝트의 프로젝트 번호를 복사합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 번호를 [SERVICE_PROJECT_NUMBER]로 표시합니다.
  5. 프로젝트를 공유 VPC 호스트 프로젝트로 변경합니다.
  6. Google Cloud Platform Console의 IAM 페이지로 이동합니다.
    IAM 페이지로 이동
  7. 추가를 클릭합니다.
  8. [SERVICE_PROJECT_NUMBER]@cloudservices.gserviceaccount.com구성원 필드에 추가합니다.
  9. 역할 메뉴에서 Compute Engine > Compute 네트워크 사용자를 선택합니다.
  10. 추가를 클릭합니다.

gcloud

  1. 아직 하지 않은 경우 gcloud를 공유 VPC 관리자로 로그인합니다. [SHARED_VPC_ADMIN]을 공유 VPC 관리자의 이름으로 바꿉니다.

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 서비스 프로젝트의 프로젝트 번호를 결정합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 번호를 [SERVICE_PROJECT_NUMBER]로 표시합니다. [SERVICE_PROJECT_ID]를 서비스 프로젝트의 프로젝트 ID로 바꿉니다.

    gcloud projects describe [SERVICE_PROJECT_ID] --format='get(projectNumber)'
    
    • 서비스 프로젝트의 프로젝트 ID를 모르는 경우 조직의 모든 프로젝트를 나열할 수 있습니다. 이 목록에는 각 프로젝트 번호가 표시됩니다.

      gcloud projects list
      
  3. 정책 바인딩을 만들어 서비스 계정을 서비스 프로젝트 관리자로 만듭니다. [HOST_PROJECT_ID]를 호스트 프로젝트의 프로젝트 ID로, [SERVICE_PROJECT_NUMBER]를 서비스 프로젝트 번호로 바꿉니다.

    gcloud projects add-iam-policy-binding [HOST_PROJECT_ID] \
        --member "serviceAccount:[SERVICE_PROJECT_NUMBER]@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

공유 VPC 사용

공유 VPC 관리자가 호스트 프로젝트 사용 설정, 호스트 프로젝트에 필요한 서비스 프로젝트 연결, 모든 호스트 프로젝트 서브넷 또는 일부 호스트 프로젝트 서브넷의 서비스 프로젝트 관리자 정의 작업을 완료하면, 서비스 프로젝트 관리자가 해당 호스트 프로젝트의 서브넷을 사용하여 서비스 프로젝트에서 인스턴스, 템플릿, 내부 부하 분산기를 만들 수 있습니다.

이 섹션의 모든 작업은 서비스 프로젝트 관리자가 수행해야 합니다.

공유 VPC 관리자는 서비스 프로젝트 관리자에게 compute.networkUser 역할(전체 호스트 프로젝트 또는 일부 서브넷만)만 부여한다는 점에 유의해야 합니다. 또한 서비스 프로젝트 관리자는 각 서비스 프로젝트를 관리하는 데 필요한 다른 역할도 수행해야 합니다. 예를 들어 서비스 프로젝트 관리자는 프로젝트 소유자이거나 최소한 프로젝트의 compute.instanceAdmin 역할을 가지고 있어야 합니다.

사용 가능한 서브넷 나열

서비스 프로젝트 관리자는 다음 단계에 따라 권한이 부여된 서브넷을 나열할 수 있습니다.

Console

Google Cloud Platform Console의 공유 VPC 페이지로 이동합니다.
공유 VPC 페이지로 이동

gcloud

  1. 아직 하지 않은 경우 gcloud를 서비스 프로젝트 관리자로 인증합니다. [SERVICE_PROJECT_ADMIN]을 서비스 프로젝트 관리자 이름으로 바꿉니다.

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. [HOST_PROJECT_ID]를 공유 VPC 호스트 프로젝트의 프로젝트 ID로 바꿔 다음 명령어를 실행합니다.

    gcloud compute networks subnets list-usable --project [HOST_PROJECT_ID]
    

    다음 예는 project-1 호스트 프로젝트에서 사용 가능한 서브넷을 나열합니다.

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

자세한 내용은 SDK 문서의 list-usable 명령어를 참조하세요.

정적 내부 IP 예약

서비스 프로젝트 관리자는 공유 VPC 네트워크의 서브넷에서 내부 IP 주소를 예약할 수 있습니다. IP 주소 구성 객체는 서비스 프로젝트에서 생성되지만 해당 값은 선택한 공유 서브넷에서 사용 가능한 주소 범위에서 가져옵니다.

gcloud

  1. 아직 하지 않은 경우 gcloud를 서비스 프로젝트 관리자로 인증합니다. [SERVICE_PROJECT_ADMIN]을 서비스 프로젝트 관리자 이름으로 바꿉니다.

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. [HOST_PROJECT_ID]를 공유 VPC 호스트 프로젝트의 프로젝트 ID로 바꿔 다음 명령어를 실행합니다.

    gcloud compute addresses create [IP_ADDR_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET]
    

여기서 다음과 같이 바꿉니다.

  • [IP_ADDR_NAME]: IP 주소 객체 이름
  • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
  • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
  • [REGION]: 공유 서브넷을 포함하는 영역
  • [SUBNET]: 공유 서브넷의 이름

IP 주소 생성에 대한 자세한 내용은 SDK 문서에 게시되어 있습니다.

인스턴스 만들기

공유 VPC를 사용하여 인스턴스를 만들 때는 다음 사항에 유의하세요.

  • 인스턴스를 만드는 표준 프로세스에는 영역, 네트워크 및 서브넷을 선택하는 과정이 포함됩니다. 선택한 서브넷과 선택한 영역은 모두 같은 지역에 있어야 합니다. 서비스 프로젝트 관리자가 공유 VPC 네트워크의 서브넷을 사용하여 인스턴스를 생성하는 경우 해당 인스턴스에 대해 선택된 영역은 선택한 서브넷과 동일한 지역에 있는 영역이어야 합니다.

    • 예약된 고정 내부 IP 주소로 인스턴스를 만들 때 고정 IP 주소가 생성되어 있으면 서브넷(및 지역)이 이미 선택되어 있습니다. 고정 내부 IP 주소로 인스턴스를 생성하는 gcloud 예시가 이 섹션에 나와 있습니다.
  • 서비스 프로젝트 관리자는 권한이 부여된 서브넷을 사용하여 인스턴스만 만들 수 있습니다. 사용할 수 있는 서브넷을 확인하려면 사용 가능한 서브넷 나열을 참조하세요.

  • GCP가 공유 VPC 네트워크의 서브넷에서 인스턴스를 생성하라는 요청을 받으면 요청을 보내는 IAM 구성원이 해당 공유 서브넷을 사용할 수 있는 권한이 있는지 확인합니다. 확인에 실패하면 인스턴스가 생성되지 않고 GCP는 권한 오류를 반환합니다. 도움이 필요할 경우 공유 VPC 관리자에게 문의하세요.

Console

  1. Google Cloud Platform Console의 VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 만들기를 클릭합니다.
  3. 인스턴스 이름을 지정합니다.
  4. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭합니다.
  5. 네트워킹을 클릭합니다.
  6. 나와 공유된 네트워크 라디오 버튼을 클릭합니다.
  7. 인스턴스를 만들 공유 서브넷을 선택합니다.
  8. 인스턴스에 필요한 다른 매개변수를 지정합니다.
  9. 만들기를 클릭합니다.

gcloud

  • 공유 VPC 네트워크의 공유 서브넷에서 임시 내부 IP 주소로 인스턴스를 생성하려면 다음을 수행합니다.

    gcloud compute instances create [INSTANCE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
    --zone [ZONE]
    

    여기서 다음과 같이 바꿉니다.

    • [INSTANCE_NAME]: 인스턴스의 이름
    • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
    • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
    • [REGION]: 공유 서브넷을 포함하는 영역
    • [SUBNET]: 공유 서브넷의 이름
    • [ZONE]: 지정된 지역에 있는 영역
  • 공유 VPC 네트워크에 예약된 고정 내부 IP 주소로 인스턴스를 생성하려면 다음을 수행합니다.

    1. 호스트 프로젝트의 고정 내부 IP 주소를 예약합니다.
    2. 다음과 같이 인스턴스를 만듭니다.

      gcloud compute instances create [INSTANCE_NAME] \
      --project [SERVICE_PROJECT_ID] \
      --private-network-ip [IP_ADDR_NAME] \
      --zone [ZONE]
      --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
      

      여기서 다음과 같이 바꿉니다.

      • [INSTANCE_NAME]: 인스턴스의 이름
      • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
      • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
      • [IP_ADDR_NAME]: 고정 IP 주소의 이름
      • [ZONE]: [IP_ADDR_NAME]과 동일한 지역에 있는 영역
      • [SUBNET]: 고정 내부 IP 주소와 연결된 공유 서브넷의 이름

인스턴스 템플릿 만들기

공유 VPC를 사용하여 인스턴스 템플릿을 만들 때는 다음 사항에 유의하세요.

  • 인스턴스 템플릿을 만드는 프로세스에는 네트워크 및 서브넷을 선택하는 과정이 포함됩니다.

    • 커스텀 모드 공유 VPC 네트워크에서 사용하기 위해 만든 템플릿은 네트워크와 서브넷을 모두 지정해야 합니다.

    • 자동 모드 공유 VPC 네트워크에서 사용하기 위해 만든 템플릿은 원하는 경우 서브넷 선택을 연기할 수 있습니다. 이러한 경우 서브넷은 템플릿을 사용하는 관리형 인스턴스 그룹과 동일한 지역에서 자동으로 선택됩니다. 자동 모드 네트워크는 정의에 따라 모든 지역에서 서브넷을 가집니다.

  • IAM 구성원이 인스턴스 템플릿을 만들면 GCP는 구성원이 지정된 서브넷을 사용할 수 있는지 확인하기 위한 권한 검사를 수행하지 않습니다. 이 권한 검사는 항상 템플릿을 사용하는 관리형 인스턴스 그룹이 요청될 때까지 연기됩니다.

Console

  1. Google Cloud Platform Console의 인스턴스 템플릿 페이지로 이동합니다.
    인스턴스 템플릿 페이지로 이동
  2. 인스턴스 템플릿 만들기를 클릭합니다.
  3. 인스턴스 템플릿 이름을 지정합니다.
  4. 관리, 보안, 디스크, 네트워킹, 단독 임대를 클릭합니다.
  5. 네트워킹을 클릭합니다.
  6. 나와 공유된 네트워크 라디오 버튼을 클릭합니다.
  7. 인스턴스 템플릿을 만들 공유 서브넷을 선택합니다.
  8. 인스턴스 템플릿에 필요한 다른 매개변수를 지정합니다.
  9. 만들기를 클릭합니다.

gcloud

  • 자동 모드 공유 VPC 네트워크의 자동 생성 서브넷에서 사용할 인스턴스 템플릿을 만들려면 다음을 수행합니다.

    gcloud compute instance-templates create [TEMPLATE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --network projects/[HOST_PROJECT_ID]/global/networks/[NETWORK]
    

    여기서 다음과 같이 바꿉니다.

    • [TEMPLATE_NAME]: 템플릿 이름
    • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
    • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
    • [NETWORK]: 공유 VPC 네트워크 이름
  • 공유 VPC 네트워크(자동 또는 커스텀 모드)에서 수동으로 생성된 서브넷에 대한 인스턴스 템플릿을 만들려면 다음을 수행합니다.

    gcloud compute instance-templates create [TEMPLATE_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --region [REGION] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET]
    

    여기서 다음과 같이 바꿉니다.

    • [TEMPLATE_NAME]: 템플릿 이름
    • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
    • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
    • [REGION]: 공유 서브넷을 포함하는 영역
    • [SUBNET]: 공유 서브넷의 이름

관리형 인스턴스 그룹 만들기

공유 VPC를 사용하여 관리형 인스턴스 그룹을 만들 때는 다음 사항에 유의하세요.

  • 공유 VPC와 함께 사용되는 관리형 인스턴스 그룹은 자동 확장을 통한 자동 인스턴스 생성과 같은 작업이 Google API 서비스 계정에 의해 수행되기 때문에 Google API 서비스 계정을 서비스 프로젝트 관리자로 설정해야 합니다.

  • 관리형 인스턴스 그룹을 만드는 표준 프로세스에는 그룹 유형 및 인스턴스 템플릿에 따라 영역 또는 지역을 선택하는 과정이 포함됩니다. 네트워크 및 서브넷 세부정보는 인스턴스 템플릿에 연결 됩니다. 운영 가능 인스턴스 템플릿은 관리형 인스턴스 그룹이 사용하는 동일한 영역의 서브넷을 참조하는 템플릿으로 제한됩니다.

  • 서비스 프로젝트 관리자는 권한이 부여된 서브넷을 사용하는 구성원 인스턴스가 있는 관리형 인스턴스 그룹만 만들 수 있습니다. 네트워크 및 서브넷 세부정보는 인스턴스 템플릿에 연결되므로 서비스 프로젝트 관리자는 사용 권한이 부여된 서브넷을 참조하는 템플릿만 사용할 수 있습니다.

  • GCP가 관리형 인스턴스 그룹 생성 요청을 받으면 요청을 보내는 IAM 구성원이 인스턴스 템플릿에 지정된 서브넷(그룹과 동일한 지역에 있음)을 사용할 수 있는 권한이 있는지 확인합니다. 확인에 실패하면 관리형 인스턴스 그룹이 생성되지 않고 GCP는 권한 오류를 반환합니다. 사용 가능한 서브넷을 나열하여 사용할 수 있는 서브넷을 확인하고 도움이 필요할 경우 공유 VPC 관리자에게 문의하세요.

Console

  1. Google Cloud Platform Console의 인스턴스 그룹 페이지로 이동합니다.
    인스턴스 그룹 페이지로 이동
  2. 인스턴스 그룹 만들기를 클릭합니다.
  3. 인스턴스 그룹의 이름을 지정합니다.
  4. 위치 섹션에서 영역 또는 지역(다중 영역) 그룹을 선택하여 만듭니다.
  5. 적절한 영역 또는 지역을 선택합니다.
  6. 영역 그룹을 작성하는 경우 그룹 유형에서 관리형 인스턴스 그룹을 선택했는지 확인합니다. 지역 인스턴스 그룹은 관리형 인스턴스 그룹이어야 합니다.
  7. 인스턴스 템플릿에서 공유 VPC 네트워크에 대해 정의된 인스턴스 템플릿을 선택합니다. 사용 가능한 템플릿은 인스턴스 그룹에 대해 선택한 것과 동일한 지역의 서브넷에 대해 정의되어야 합니다.
  8. 자동 확장 옵션 또는 인스턴스 수를 지정합니다.
  9. 자동 복구 옵션을 지정합니다.
  10. 만들기를 클릭합니다.

gcloud

서비스 프로젝트 관리자는 인스턴스 템플릿에서 지정된 공유 서브넷을 사용할 수 있는 권한이 있는 경우 gcloud를 사용하여 관리형 인스턴스 그룹을 만들 수 있습니다.

gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --template [INSTANCE_TEMPLATE_NAME] \
    --size [NUMBER_OF_INSTANCES] \
    --zone [ZONE]

여기서 다음과 같이 바꿉니다.

  • [INSTANCE_GROUP_NAME]: 인스턴스 그룹의 이름
  • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
  • [INSTANCE_TEMPLATE_NAME]: 인스턴스 템플릿 이름
  • [NUMBER_OF_INSTANCES]: 그룹에서 만들 인스턴스 수
  • [ZONE]: (인스턴스 템플릿에서 정의된) 서브넷과 동일한 지역에 있는 영역

지역 그룹 인스턴스를 만들려면 --zone 매개변수를 --region 매개변수로 바꾸고 지역을 지정합니다(인스턴스 템플릿에서 정의된 서브넷에서 사용되는 지역과 동일해야 함).

자동 확장 및 자동 복구를 구성하는 방법에 대한 자세한 내용은 SDK 문서를 참조하세요.

내부 부하 분산기 만들기

다음 절차에서는 전달 규칙이 공유 VPC 호스트 프로젝트의 서브넷을 사용하는 내부 부하 분산기를 만드는 방법을 보여줍니다. 전달 규칙 자체는 여전히 서비스 프로젝트에서 정의되며 서브넷 참조는 내부 전달 규칙에서만 사용됩니다.

호스트 프로젝트에서 내부 부하 분산기를 만들기 전에 다음을 먼저 읽어보시기 바랍니다.

Console

  1. Google Cloud Platform Console의 부하 분산 페이지로 이동합니다.
    부하 분산 페이지로 이동

  2. 일반적인 절차에 따라 내부 부하 분산기를 만들고 다음 조정을 수행합니다.

    • 프론트엔드 서비스 구성 섹션에서 서브넷 메뉴의 다른 프로젝트에 의해 공유되는 네트워크 섹션에서 필요한 공유 VPC 서브넷을 선택합니다.
  3. 내부 부하 분산기 만들기를 마칩니다.

gcloud

서비스 프로젝트 관리자는 액세스 권한이 있는 호스트 프로젝트의 서브넷에 내부 부하 분산기를 만들 수 있습니다. 일반적인 절차에 따라 내부 부하 분산기를 생성하되 전달 규칙을 만들 때 --subnet 인수로 공유 VPC의 서브넷도 지정합니다.

gcloud compute forwarding-rules create [FR_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --load-balancing-scheme internal \
    --region [REGION] \
    --ip-protocol [IP_PROTOCOL] \
    --ports PORT,[PORT,…] \
    --backend-service [BACKEND_SERVICE_NAME] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET] \
    --address [INTERNAL_IP]

여기서 다음과 같이 바꿉니다.

  • [FR_NAME]: 전달 규칙 이름
  • [SERVICE_PROJECT_ID]: 서비스 프로젝트의 ID
  • [REGION]: 공유 서브넷을 포함하는 영역
  • [IP_PROTOCOL]: 사용할 IP 프로토콜(기본값은 TCP)
  • [PORT]: 부하 분산기의 숫자 포트 또는 포트 목록
  • [BACKEND_SERVICE_NAME]: 백엔드 서비스의 이름(내부 부하 분산기 만들기 일반 절차에서 이미 만듦)
  • [HOST_PROJECT_ID]: 공유 VPC 호스트 프로젝트의 ID
  • [SUBNET]: 공유 서브넷의 이름
  • [INTERNAL_IP]: 공유 서브넷의 내부 IP 주소(지정되지 않은 경우 사용 가능한 IP 주소가 선택됨)

gcloud compute forwarding-rules create에서 사용할 다른 옵션을 보려면 이 페이지를 참조하세요.

다음 단계

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

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