공유 VPC 프로비저닝

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

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

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

조직 준비

관리자 및 IAM

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

공유 VPC의 조직 정책

조직 정책 제약조건에 따라 프로젝트, 폴더 또는 조직 수준에서 공유 VPC 리소스를 보호할 수 있습니다. 다음 섹션에서는 각 정책에 대해 설명합니다.

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

실수로 호스트 프로젝트를 삭제하면 연결된 모든 서비스 프로젝트가 중단될 수 있습니다. 프로젝트가 공유 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 관리자는 동일한 조직의 모든 호스트 프로젝트에 호스트가 아닌 프로젝트를 연결할 수 있습니다. 조직 정책 관리자는 하나의 비호스트 프로젝트 또는 폴더나 조직을 연결할 수 있는 여러 개의 비호스트 프로젝트로 호스트 프로젝트가 될 수 있는 프로젝트를 제한할 수 있습니다. 자세한 내용은 constraints/compute.restrictSharedVpcHostProject 제약조건을 참조하세요.

호스트 프로젝트에서 서비스 프로젝트가 사용할 수 있는 서브넷 제한

기본적으로 공유 VPC가 구성되면 서비스 프로젝트의 IAM 구성원은 적절한 IAM 권한을 가진 경우에 한해 호스트 프로젝트의 모든 서브넷을 사용할 수 있습니다. 개별 사용자 권한의 관리 외에도 조직 정책 관리자는 특정 프로젝트 또는 폴더 또는 조직 내 여러 프로젝트에서 액세스할 수 있는 서브넷 집합을 정의하는 정책을 설정할 수 있습니다. 자세한 내용은 constraints/compute.restrictSharedVpcSubnetworks 제약조건을 참조하세요.

공유 VPC 관리자 지정

beta

조직 관리자는 하나 이상의 IAM 구성원에게 공유 VPC 관리자프로젝트 IAM 관리자 역할을 부여할 수 있습니다. 프로젝트 IAM 역할은 개별 서브넷뿐만 아니라 모든 기존 및 향후 서브넷을 공유할 수 있도록 공유 VPC 관리자 권한을 부여합니다. 이 권한 부여는 프로젝트 수준이 아닌 조직 또는 폴더 수준에서 바인딩을 만듭니다. 따라서 IAM 구성원을 프로젝트가 아닌 조직에서 정의해야 합니다.

Console

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

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

  6. 다른 역할 추가를 클릭합니다.

  7. 역할 드롭다운에서 Resource Manager > 프로젝트 IAM 관리자를 선택합니다.

  8. 저장을 클릭합니다.

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

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

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"
          
          gcloud organizations add-iam-policy-binding ORG_ID \
            --member='user:EMAIL_ADDRESS' \
            --role="roles/resourcemanager.projectIamAdmin"
          
  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"
          
          gcloud beta resource-manager folders add-iam-policy-binding FOLDER_ID \
             --member='user:EMAIL_ADDRESS' \
             --role="roles/resourcemanager.projectIamAdmin"
          
  5. 작업을 완료했으면 계정 보호를 위해 gcloud 명령줄 도구의 조직 관리자 계정에서 로그아웃합니다.

        gcloud auth revoke ORG_ADMIN
        

API

  • 조직 수준에서 공유 VPC 관리자 역할을 할당하려면 다음 절차를 따르세요.

    1. 조직 ID 번호를 확인합니다.

          POST https://cloudresourcemanager.googleapis.com/v1/organizations
          
    2. 기존 조직 정책을 설명하고 세부정보를 기록합니다.

          POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
          

      ORG_ID를 조직의 ID로 바꿉니다.

    3. 공유 VPC 관리자 역할을 할당합니다.

          POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy
          {
            "bindings": [
              ...copy existing bindings
              {
                "members": [
                  "user:EMAIL_ADDRESS"
                ],
                "role": "roles/compute.xpnAdmin"
              },
              {
                "members": [
                  "user:EMAIL_ADDRESS"
                ],
                "role": "roles/resourcemanager.projectIamAdmin"
              }
            ],
            "etag": "ETAG",
            "version": 1,
            ...other exisitng policy details
          }
          

      자리표시자를 유효한 값으로 바꿉니다.

      • ORG_ID는 공유 VPC 관리자 역할을 부여할 사용자가 포함된 조직의 ID입니다.
      • EMAIL_ADDRESS는 사용자의 이메일 주소입니다.
      • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.

      자세한 내용은 organizations.setIamPolicy 메서드를 참조하세요.

  • 폴더 수준에서 공유 VPC 관리자 역할을 할당하려면 다음 요청을 사용하세요.

    1. 조직 ID 번호를 확인합니다.

          POST https://cloudresourcemanager.googleapis.com/v1/organizations
          
    2. 폴더 ID를 찾습니다.

          GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
          

      ORG_ID를 조직의 ID로 바꿉니다.

    3. 기존 폴더 정책을 설명하고 세부정보를 기록합니다.

          POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
          

      FOLDER_ID를 폴더를 폴더의 ID로 바꿉니다.

    4. 공유 VPC 관리자 역할을 할당합니다.

          POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy
          {
            "bindings": [
              ...copy existing bindings
              {
                "members": [
                  "user:EMAIL_ADDRESS"
                ],
                "role": "roles/compute.xpnAdmin"
              },
              {
                "members": [
                  "user:EMAIL_ADDRESS"
                ],
                "role": "roles/resourcemanager.projectIamAdmin"
              }
            ],
            "etag": "ETAG",
            "version": 1,
            ...other existing policy details
          }
          

      자리표시자를 유효한 값으로 바꿉니다.

      • FOLDER_ID는 공유 VPC 관리자 역할을 부여할 사용자가 포함된 조직의 ID입니다.
      • EMAIL_ADDRESS는 사용자의 이메일 주소입니다.
      • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.

      자세한 내용은 folders.setIamPolicy 메서드를 참조하세요.

공유 VPC 설정

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

호스트 프로젝트 사용

beta

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

Console

  1. Google Cloud 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
        

API

  1. 공유 VPC 관리자 권한이 있는 사용자 인증 정보를 사용하여 프로젝트에 공유 VPC를 사용 설정합니다.

    • 조직 수준에 공유 VPC 관리자 역할이 있는 경우 v1 API를 사용합니다.

          POST https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
          
    • 폴더 수준에 공유 VPC 관리자 역할이 있는 경우 베타 API를 사용합니다.

          POST https://www.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnHost
          

    HOST_PROJECT_ID를 공유 VPC 호스트 프로젝트가 될 호스트 프로젝트의 ID로 바꿉니다.

    자세한 내용은 projects.enableXpnHost 메서드를 참조하세요.

  2. 프로젝트가 호스트 프로젝트로 나열되는지 확인합니다.

        POST https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
        

    HOST_PROJECT_ID를 공유 VPC 호스트 프로젝트의 ID로 바꿉니다.

    자세한 내용은 projects.listXpnHosts 메서드를 참조하세요.

서비스 프로젝트 연결

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

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

Console

  1. Google Cloud Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Console의 공유 VPC 페이지로 이동합니다.
    공유 VPC 페이지로 이동
  3. 연결된 프로젝트 탭을 클릭합니다.
  4. 연결된 프로젝트 탭에서 프로젝트 연결 버튼을 클릭합니다.
  5. 프로젝트 이름 섹션에서 연결할 서비스 프로젝트 체크박스를 선택합니다. 서비스 프로젝트를 연결한다고 해서 서비스 프로젝트 관리자가 정의되지는 않습니다. 이는 다음 단계에서 수행됩니다.
  6. VPC 네트워크 권한 섹션에서 compute.networkUser 역할을 가지게 될 구성원의 역할을 선택합니다. Cloud 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
        

API

  1. 서비스 프로젝트를 공유 VPC 호스트 프로젝트에 연결합니다.

    • 조직 수준에 공유 VPC 관리자 역할이 있는 경우 v1 API를 사용합니다.

          POST https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource
          {
          "xpnResource": {
            "id": "SERVICE_PROJECT"
          }
          }
          
    • 폴더 수준에 공유 VPC 관리자 역할이 있는 경우 베타 API를 사용합니다.

          POST https://www.googleapis.com/compute/beta/projects/HOST_PROJECT_ID/enableXpnResource
          {
          "xpnResource": {
            "id": "SERVICE_PROJECT"
          }
          }
          

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 호스트 프로젝트의 ID입니다.
    • SERVICE_PROJECT은 연결할 서비스 프로젝트의 ID입니다.

    자세한 내용은 projects.enableXpnResource 메서드를 참조하세요.

  2. 서비스 프로젝트가 호스트 프로젝트에 연결되어 있는지 확인합니다.

        GET https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 호스트 프로젝트의 ID입니다.

    자세한 내용은 projects.getXpnResources 메서드를 참조하세요.

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

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

Console

Cloud Console을 사용하여 호스트 프로젝트의 모든 서브넷에 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 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
        

API

  1. 기존 프로젝트 정책을 설명하고 세부정보를 기록합니다. 기존 정책 및 etag 값이 필요합니다.

        POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
        

    HOST_PROJECT_ID를 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID로 바꿉니다.

  2. 서비스 프로젝트의 IAM 구성원이 서비스 프로젝트 관리자가 되도록 정책 바인딩을 만듭니다.

        POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
        {
          "bindings": [
            ...copy existing bindings
            {
              "members": [
                MEMBER,
                ...additional members
              ],
              "role": "roles/compute.networkUser"
            },
          ],
          "etag": "ETAG",
          "version": 1,
          ...other existing policy details
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID입니다.
    • MEMBER는 사용자, 그룹, 도메인 또는 서비스 계정과 같은 역할이 연결된 ID입니다. 자세한 내용은 Resource Manager 문서에서 members 필드를 참조하세요.
    • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.

    자세한 내용은 projects.setIamPolicy 메서드를 참조하세요.

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

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

Console

Cloud Console을 사용하여 호스트 프로젝트의 일부 서브넷에만 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 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
        

API

  1. 기존 서브넷 정책을 설명하고 세부정보를 기록합니다. 기존 정책 및 etag 값이 필요합니다.

        GET https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID입니다.
    • SUBNET_NAME은 공유할 서브넷의 이름입니다.
    • SUBNET_REGION은 서브넷이 있는 리전입니다.
  2. 서브넷 정책을 업데이트하여 호스트 프로젝트의 서브넷에 대한 액세스 권한을 서비스 프로젝트 관리자에게 부여합니다.

        POST https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
        {
          "bindings": [
            ...copy existing bindings
            {
              "members": [
                MEMBER,
                ...additional members
              ],
              "role": "roles/compute.networkUser"
            },
          ],
          "etag": "ETAG",
          "version": 1,
          ...other existing policy details
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.
    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID입니다.
    • MEMBER는 사용자, 그룹, 도메인 또는 서비스 계정과 같은 역할이 연결된 ID입니다. 자세한 내용은 Resource Manager 문서에서 members 필드를 참조하세요.
    • SUBNET_NAME은 공유할 서브넷의 이름입니다.
    • SUBNET_REGION은 서브넷이 있는 리전입니다.

    자세한 내용은 subnetworks.setIamPolicy 메서드를 참조하세요.

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

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

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

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

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

Console

  1. Google Cloud Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Console의 설정 페이지로 이동합니다.
    설정 페이지로 이동
  3. 서비스 프로젝트 관리자로 정의해야 하는 서비스 계정이 포함된 서비스 프로젝트로 프로젝트를 변경합니다.
  4. 서비스 프로젝트의 프로젝트 ID를 복사합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 ID를 SERVICE_PROJECT_ID로 표시합니다.
  5. 프로젝트를 공유 VPC 호스트 프로젝트로 변경합니다.
  6. Google Cloud 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가 표시됩니다.

        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"
        

API

  1. 기존 프로젝트 정책을 설명하고 세부정보를 기록합니다. 기존 정책 및 etag 값이 필요합니다.

        POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
        

    HOST_PROJECT_ID를 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID로 바꿉니다.

  2. 서비스 계정이 서비스 프로젝트 관리자가 되도록 정책 바인딩을 만듭니다.

        POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
        {
          "bindings": [
            ...copy existing bindings
            {
              "members": [
                "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com",
                ...include additional service accounts
              ],
              "role": "roles/compute.networkUser"
            },
          ],
          "etag": "ETAG",
          "version": 1,
          ...other existing policy details
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID입니다.
    • SERVICE_ACCOUNT_NAME은 서비스 계정의 이름입니다.
    • SERVICE_PROJECT_ID은 서비스 계정이 포함된 서비스 프로젝트의 ID입니다.
    • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.

    자세한 내용은 projects.setIamPolicy 메서드를 참조하세요.

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

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

Console

  1. Google Cloud Console에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud Console의 설정 페이지로 이동합니다.
    설정 페이지로 이동
  3. 서비스 프로젝트 관리자로 정의해야 하는 서비스 계정이 포함된 서비스 프로젝트로 프로젝트를 변경합니다.
  4. 서비스 프로젝트의 프로젝트 번호를 복사합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 번호를 SERVICE_PROJECT_NUMBER로 표시합니다.
  5. 프로젝트를 공유 VPC 호스트 프로젝트로 변경합니다.
  6. Google Cloud 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"
        

API

  1. 기존 프로젝트 정책을 설명하고 세부정보를 기록합니다. 기존 정책 및 etag 값이 필요합니다.

        POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
        

    HOST_PROJECT_ID를 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID로 바꿉니다.

  2. 프로젝트를 나열하여 프로젝트 번호를 찾습니다.

        GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
        

    SERVICE_PROJECT_ID를 서비스 계정이 있는 서비스 프로젝트의 ID로 바꿉니다.

  3. 서비스 계정이 서비스 프로젝트 관리자가 되도록 정책 바인딩을 만듭니다.

        POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
        {
          "bindings": [
            ...copy existing bindings
            {
              "members": [
                "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
              ],
              "role": "roles/compute.networkUser"
            },
          ],
          "etag": "ETAG",
          "version": 1,
          ...other existing policy details
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID입니다.
    • SERVICE_PROJECT_NUMBER는 서비스 계정이 있는 서비스 프로젝트의 번호입니다.
    • ETAG은 기존 정책을 설명할 때 얻은 고유 식별자로, 여러 업데이트 요청이 동시에 전송되는 경우 충돌을 방지합니다.

    자세한 내용은 projects.setIamPolicy 메서드를 참조하세요.

공유 VPC 사용

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

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

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

사용 가능한 서브넷 나열

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

Console

Google Cloud 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 명령어를 참조하세요.

API

호스트 프로젝트에서 사용 가능한 서브넷을 나열합니다. 서비스 프로젝트 관리자로 요청을 실행합니다.

    GET https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable
    

HOST_PROJECT_ID를 공유 VPC 네트워크가 포함된 호스트 프로젝트의 ID로 바꿉니다.

자세한 내용은 subnetworks.listUsable 메서드를 참조하세요.

고정 내부 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 \
        --region=REGION
        

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

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

IP 주소 생성에 대한 자세한 내용은 SDK 문서를 참조하세요.

API

고정 내부 IP 주소를 서비스 프로젝트 관리자로 예약합니다.

    POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
    {
      "name": "ADDRESS_NAME",
      "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
      "addressType": "INTERNAL"
    }
    

자리표시자를 유효한 값으로 바꿉니다.

  • ADDRESS_NAME은 예약된 내부 IP 주소의 이름입니다.
  • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
  • REGION은 예약된 IP 주소가 위치하고 공유 서브넷이 있는 리전입니다.
  • SERVICE_PROJECT_ID는 IP 주소를 예약할 서비스 프로젝트의 ID입니다.
  • SUBNET_NAME은 공유 서브넷의 이름입니다.

자세한 내용은 addresses.insert 메서드를 참조하세요.

인스턴스 생성

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

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

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

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

Console

  1. Google Cloud 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 주소와 연결된 공유 서브넷의 이름

API

  • 서비스 프로젝트 관리자 권한으로 임시 내부 IP 주소를 사용해 인스턴스를 생성하려면 서브넷만 지정하세요

        POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
        {
          "machineType": "MACHINE_TYPE",
          "name": "INSTANCE_NAME",
          "networkInterfaces": [
            {
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
            }
          ],
          "disks": [
            {
              "boot": true,
              "initializeParams": {
                "sourceImage": "SOURCE_IMAGE"
              }
            }
          ]
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • INSTANCE_NAME은 인스턴스의 이름입니다.
    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
    • MACHINE_TYPE은 인스턴스의 머신 유형입니다.
    • REGION은 공유 서브넷을 포함하는 리전입니다.
    • SERVICE_PROJECT_ID는 서비스 프로젝트의 ID입니다.
    • SOURCE_IMAGE는 인스턴스의 이미지입니다.
    • SUBNET은 공유 서브넷의 이름입니다.
    • ZONE은 지정된 리전에 있는 영역입니다.

    자세한 내용은 instances.insert 메서드를 참조하세요.

  • 서비스 프로젝트 관리자 권한으로 임시 내부 IP 주소를 사용해 인스턴스를 생성하려면 서브넷과 예약된 IP 주소의 이름을 지정하세요.

        POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
        {
          "machineType": "MACHINE_TYPE",
          "name": "INSTANCE_NAME",
          "networkInterfaces": [
            {
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
              "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME"
            }
          ],
          "disks": [
            {
              "boot": true,
              "initializeParams": {
                "sourceImage": "SOURCE_IMAGE"
              }
            }
          ]
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • ADDRESS_NAME은 예약된 내부 IP 주소의 이름입니다.
    • INSTANCE_NAME은 인스턴스의 이름입니다.
    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
    • MACHINE_TYPE은 인스턴스의 머신 유형입니다.
    • REGION은 공유 서브넷을 포함하는 리전입니다.
    • SERVICE_PROJECT_ID는 서비스 프로젝트의 ID입니다.
    • SOURCE_IMAGE는 인스턴스의 이미지입니다.
    • SUBNET은 공유 서브넷의 이름입니다.
    • ZONE은 지정된 리전에 있는 영역입니다.

    자세한 내용은 instances.insert 메서드를 참조하세요.

인스턴스 템플릿 만들기

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

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

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

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

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

Console

  1. Google Cloud 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: 공유 서브넷의 이름

API

  • 자동 모드 공유 VPC 네트워크의 자동 생성 서브넷을 사용하는 인스턴스 템플릿을 만들려면 VPC 네트워크를 지정하세요.

        POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
        {
        "properties": {
          "networkInterfaces": [
            {
              "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK"
            }
          ]
        ...
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
    • SERVICE_PROJECT_ID는 서비스 프로젝트의 ID입니다.
    • NETWORK는 공유 VPC 네트워크의 이름입니다.

    자세한 내용은 instanceTemplates.insert 메서드를 참조하세요.

  • 공유 VPC 네트워크(자동 또는 커스텀 모드)에서 수동으로 생성된 서브넷을 사용하는 인스턴스 템플릿을 만들려면 서브넷을 지정하세요.

        POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
        {
        "properties": {
          "networkInterfaces": [
            {
              "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
            }
          ]
        ...
        }
        

    자리표시자를 유효한 값으로 바꿉니다.

    • HOST_PROJECT_ID는 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
    • REGION은 공유 서브넷을 포함하는 리전입니다.
    • SERVICE_PROJECT_ID는 서비스 프로젝트의 ID입니다.
    • SUBNET_NAME은 공유 서브넷의 이름입니다.

    자세한 내용은 instanceTemplates.insert 메서드를 참조하세요.

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

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

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

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

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

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

자세한 내용은 Compute Engine 문서의 관리형 인스턴스 그룹 만들기를 참조하세요.

내부 TCP/UDP 부하 분산기 만들기

다음 예시에서는 공유 VPC 네트워크에 내부 TCP/UDP 부하 분산기를 만들 때 고려해야 할 사항을 설명합니다. 서비스 프로젝트 관리자는 호스트 프로젝트에서 액세스할 수 있는 서브넷을 사용하는 내부 TCP/UDP 부하 분산기를 만들 수 있습니다. 부하 분산기의 내부 전달 규칙은 서비스 프로젝트에 정의되어 있지만 서브넷 참조는 호스트 프로젝트의 공유 VPC 네트워크에 있는 서브넷을 가리킵니다.

공유 VPC 환경에서 내부 TCP/UDP 부하 분산기를 만들기 전에 다음 문서를 먼저 읽어보시기 바랍니다.

Console

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

  2. 내부 TCP/UDP 부하 분산기를 만들고 다음 조정을 수행합니다. 프런트엔드 서비스 구성 섹션에서 서브넷 메뉴의다른 프로젝트에 의해 공유된 네트워크 섹션에서 필요한 공유 VPC 서브넷을 선택합니다.

  3. 부하 분산기 만들기를 마칩니다.

gcloud

내부 전달 규칙을 만들 때 --subnet 플래그를 사용하여 호스트 프로젝트의 서브넷을 지정합니다.

    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: TCP 또는 UDP 중 부하 분산기의 백엔드 서비스의 프로토콜과 일치하는 항목
  • PORT: 부하 분산기의 숫자 포트 또는 포트 목록
  • BACKEND_SERVICE_NAME: 백엔드 서비스의 이름(내부 TCP/UDP 부하 분산기를 만드는 일반적인 절차에 따라 이미 생성됨)
  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID
  • SUBNET: 공유 서브넷의 이름
  • INTERNAL_IP: 공유 서브넷의 내부 IP 주소(지정되지 않은 경우 사용 가능한 IP 주소가 선택됨)

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

API

내부 전달 규칙을 만들고 호스트 프로젝트의 서브넷을 지정합니다.

    POST https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules
    {
      "name": "FR_NAME",
      "IPAddress": "IP_ADDRESS",
      "IPProtocol": "PROTOCOL",
      "ports": [ "PORT", ... ],
      "loadBalancingScheme": "INTERNAL",
      "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
      "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME",
      "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME",
      "networkTier": "PREMIUM"
    }
    

자리표시자를 유효한 값으로 바꿉니다.

  • BE_NAME은 백엔드 서비스의 이름입니다(내부 TCP/UDP 부하 분산기를 만드는 일반적인 절차에 따라 이미 생성됨).
  • FR_NAME은 전달 규칙의 이름입니다.
  • HOST_PROJECT_ID는 공유 VPC 호스트 프로젝트의 ID입니다.
  • IP_ADDRESS은 공유 서브넷의 내부 IP 주소입니다.
  • IP_PROTOCOLTCP 또는 UDP 중 부하 분산기의 백엔드 서비스의 프로토콜과 일치하는 항목입니다.
  • PORT는 부하 분산기의 숫자 포트 또는 포트 목록입니다.
  • REGION은 공유 서브넷을 포함하는 리전입니다.
  • SERVICE_PROJECT_ID는 서비스 프로젝트의 ID입니다.
  • SUBNET은 공유 서브넷의 이름입니다.

자세한 내용은 forwardingRules.insert 메서드를 참조하세요.

다음 단계