공유 VPC 프로비저닝

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

공유 VPC는 IPv4 전용(단일 스택) 및 IPv4 및 IPv6(이중 스택) 서브넷 둘 다 내보내기를 지원합니다.

서비스 프로젝트를 분리하거나 공유 VPC 구성을 완전히 삭제하는 방법은 공유 VPC 프로비저닝 해제를 참조하세요.

공유 VPC는 API 및 명령줄 인터페이스에서는 'XPN'이라고도 합니다.

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

시작하기 전에 공유 VPCIAM을 숙지해야 합니다.

조직 준비

관리자 및 IAM

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

조직 정책 제약조건

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

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

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

orgpolicy.policyAdmin 역할이 있는 사용자는 선취권 제거를 다음 규칙으로만 제한하는 조직 수준의 정책 제약조건(constraints/compute.restrictXpnProjectLienRemoval)을 정의할 수 있습니다.

  • 조직 수준에서 roles/owner 또는 roles/resourcemanager.lienModifier가 있는 사용자
  • 조직 수준에서 resourcemanager.projects.get resourcemanager.projects.updateLiens 권한이 포함된 커스텀 역할이 있는 사용자

이렇게 하면 조직 수준의 roles/owner 역할 또는 조직 수준에서 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 resource-manager org-policies enable-enforce \
        --organization ORG_ID compute.restrictXpnProjectLienRemoval
    
  4. 조직 관리자 작업을 완료했으면 계정 보호를 위해 gcloud에서 로그아웃합니다.

    gcloud auth revoke ORG_ADMIN
    

호스트 프로젝트 연결 제한

기본적으로 공유 VPC 관리자는 동일한 조직의 모든 호스트 프로젝트에 호스트가 아닌 프로젝트를 연결할 수 있습니다. 조직 정책 관리자는 하나의 비호스트 프로젝트 또는 폴더나 조직을 연결할 수 있는 여러 개의 비호스트 프로젝트로 호스트 프로젝트가 될 수 있는 프로젝트를 제한할 수 있습니다. 자세한 내용은 constraints/compute.restrictSharedVpcHostProjects 제약조건을 참조하세요.

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

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

실수로 호스트 프로젝트 종료 방지

공유 VPC 네트워크에서 결제 연결을 해제하면 서비스 프로젝트를 포함한 모든 종속 리소스가 완전히 종료될 수 있습니다. 비활성 또는 사용 중지 결제로 인한 우발적인 공유 VPC 종료가 발생하지 않도록 호스트 프로젝트와 해당 결제 계정 간의 링크를 보호합니다.

공유 VPC 관리자 지정

조직 관리자는 하나 이상의 IAM 구성원에게 공유 VPC 관리자프로젝트 IAM 관리자 역할을 부여할 수 있습니다.

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

콘솔

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

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

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

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

  8. 저장을 클릭합니다.

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

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

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

      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.xpnAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/resourcemanager.projectIamAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.networkViewer"
      
  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 existing 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"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.networkViewer"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      다음을 바꿉니다.

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

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

공유 VPC 설정

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

호스트 프로젝트 사용

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

호스트 프로젝트를 사용 설정하면 프로젝트의 네트워크 리소스가 서비스 프로젝트와 자동으로 공유되지 않습니다. 선택한 네트워크와 서브넷을 서비스 프로젝트와 공유하려면 호스트 프로젝트에 서비스 프로젝트를 연결해야 합니다.

콘솔

아직 공유 VPC 관리자 역할이 없으면 Google Cloud 콘솔에서 이 페이지를 볼 수 없습니다.

  1. Google Cloud 콘솔에서 공유 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로 바꿉니다.

    gcloud 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를 사용 설정합니다.

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
    

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

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

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

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

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

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

Terraform

Terraform 리소스를 사용하여 호스트 프로젝트를 사용 설정할 수 있습니다.

resource "google_compute_shared_vpc_host_project" "host" {
  project = var.project # Replace this with your host project ID in quotes
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

서비스 프로젝트 연결

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

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

콘솔

  1. Google Cloud 콘솔에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud 콘솔에서 공유 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로 바꿉니다.

    gcloud 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 호스트 프로젝트에 연결합니다.

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

    다음을 바꿉니다.

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

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

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

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

    다음을 바꿉니다.

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

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

Terraform

Terraform 리소스를 사용하여 서비스 프로젝트를 연결할 수 있습니다.

resource "google_compute_shared_vpc_service_project" "service1" {
  host_project    = google_compute_shared_vpc_host_project.host.project
  service_project = var.service_project # Replace this with your service project ID in quotes
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

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

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

호스트 프로젝트에서 compute.networkUser 역할을 가진 사용자는 연결된 서비스 프로젝트 내의 모든 서브넷을 볼 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 호스트 프로젝트의 모든 서브넷에 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 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": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    다음을 바꿉니다.

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

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

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

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

호스트 프로젝트에서 compute.networkUser 역할을 가진 사용자는 연결된 서비스 프로젝트 내의 모든 서브넷을 볼 수 있습니다.

콘솔

Google Cloud 콘솔을 사용하여 호스트 프로젝트의 일부 서브넷에만 액세스할 수 있는 서비스 프로젝트 관리자로 서비스 프로젝트의 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 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 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://compute.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://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    다음을 바꿉니다.

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

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

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

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

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

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

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

콘솔

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

콘솔

  1. Google Cloud 콘솔에 공유 VPC 관리자로 로그인합니다.
  2. Google Cloud 콘솔에서 설정 페이지로 이동합니다.
    설정 페이지로 이동
  3. 서비스 프로젝트 관리자로 정의해야 하는 서비스 계정이 포함된 서비스 프로젝트로 프로젝트를 변경합니다.
  4. 서비스 프로젝트의 프로젝트 번호를 복사합니다. 명확한 설명을 위해 여기서는 서비스 프로젝트 번호를 SERVICE_PROJECT_NUMBER로 표시합니다.
  5. 프로젝트를 공유 VPC 호스트 프로젝트로 변경합니다.
  6. Google Cloud 콘솔의 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 네트워크 사용자 역할(roles/compute.networkUser)을 전체 호스트 프로젝트 또는 해당 서브넷의 일부 프로젝트에만 부여한다는 점에 유의해야 합니다. 또한 서비스 프로젝트 관리자는 각 서비스 프로젝트를 관리하는 데 필요한 다른 역할도 수행해야 합니다. 예를 들어 서비스 프로젝트 관리자는 프로젝트 소유자이거나 최소한 프로젝트의 Compute 인스턴스 관리자 역할(roles/compute.instanceAdmin)을 가지고 있어야 합니다.

사용 가능한 서브넷 나열

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

콘솔

Google Cloud 콘솔에서 공유 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://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable

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

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

고정 내부 IPv4 또는 IPv6 주소 예약

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

서비스 프로젝트에서 독립형 내부 IP 주소를 예약하려면 다음 단계를 완료합니다.

콘솔

  1. 공유 VPC를 설정합니다.
  2. Google Cloud 콘솔에서 공유 VPC 페이지로 이동합니다.

    공유 VPC로 이동

  3. 공유 VPC 관리자로 로그인합니다.

  4. 프로젝트 선택 도구에서 서비스 프로젝트를 선택합니다.

  5. VPC 네트워크 > IP 주소를 선택하여 IP 주소 페이지로 이동합니다.

  6. 내부 고정 IP 주소 예약을 클릭합니다.

  7. 이름 필드에 IP 주소 이름을 입력합니다.

  8. IP 버전 목록에서 필요한 IP 버전을 선택합니다.

    • 고정 내부 IPv4 주소를 예약하려면 IPv4를 선택합니다.
    • 고정 내부 IPv6 주소를 예약하려면 IPv6를 선택합니다.
  9. 나와 공유된 네트워크 버튼을 클릭합니다.

  10. 네트워크서브네트워크 목록에서 각각 VPC 네트워크와 서브넷을 선택합니다.

  11. IP 주소를 예약할 방법을 지정합니다.

    • IPv4 주소의 경우 예약할 고정 내부 IPv4 주소를 지정하려면 고정 IP 주소에서 직접 선택을 선택한 후 커스텀 IP 주소를 입력합니다. 그렇지 않으면 시스템이 서브넷에서 고정 내부 IPv4 주소를 자동으로 할당합니다.
    • IPv6 주소의 경우 시스템이 서브넷의 내부 IPv6 주소 범위에서 고정 내부 IPv6 주소를 자동으로 할당합니다.
  12. 선택사항: 다른 프런트엔드에서 고정 내부 IPv4 주소를 공유하려면 목적에서 공유를 선택합니다. 기본 선택 항목은 비공유입니다.

  13. 예약을 클릭합니다.

gcloud

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

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. compute addresses create 명령어를 사용합니다.

    • IPv4 주소 예약:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV4
      
    • IPv6 주소 예약:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV6
      

    다음을 바꿉니다.

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

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

API

addresses.insert 메서드를 사용합니다.

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

    POST https://compute.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: 예약된 IPv4 주소가 위치하고 공유 서브넷이 있는 리전입니다.
  • SERVICE_PROJECT_ID: IPv4 주소를 예약할 서비스 프로젝트의 ID입니다.
  • SUBNET_NAME: 공유 서브넷의 이름

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

Terraform

Terraform 데이터 블록을 사용하여 호스트 서브넷 정보를 지정할 수 있습니다. 그런 다음 Terraform 리소스를 사용하여 고정 내부 IPv4 주소를 예약합니다. 선택적 address 인수를 생략하면 사용 가능한 IPv4 주소가 선택되어 예약됩니다.

호스트 서브넷을 지정합니다.

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

호스트 프로젝트의 서브넷에서 서비스 프로젝트에 사용할 IPv4 주소를 예약합니다.

resource "google_compute_address" "internal" {
  project      = var.service_project
  region       = "us-central1"
  name         = "int-ip"
  address_type = "INTERNAL"
  address      = "10.0.0.8"
  subnetwork   = data.google_compute_subnetwork.subnet.self_link
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

고정 외부 IPv4 주소 예약

서비스 프로젝트의 리소스는 서비스 프로젝트 또는 호스트 프로젝트에 정의된 리전 고정 외부 IPv4 주소를 사용할 수 있습니다. 따라서 연결된 서비스 프로젝트의 리소스가 호스트 프로젝트에 예약된 리전 고정 외부 IPv4 주소를 사용할 수 있습니다.

고정 외부 IPv6 주소 예약

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

콘솔

Google Cloud 콘솔을 사용하여 서비스 프로젝트에 독립형 외부 IPv6 주소를 예약할 수 있습니다.

  1. 공유 VPC를 설정합니다.
  2. Google Cloud 콘솔에서 공유 VPC 페이지로 이동합니다.
    공유 VPC 페이지로 이동
  3. 공유 VPC 관리자로 로그인합니다.
  4. 프로젝트 선택 도구에서 서비스 프로젝트를 선택합니다.
  5. IP 주소 페이지로 이동하려면 VPC 네트워크 > IP 주소를 선택합니다.
  6. 외부 고정 IP 주소 예약을 클릭합니다.
  7. 새 주소의 이름을 선택합니다.
  8. 네트워크 서비스 등급이 프리미엄 또는 표준인지 지정합니다. IPv6 고정 주소 예약은 프리미엄 등급에서만 지원됩니다.
  9. IP 버전에서 IPv6을 선택합니다.
  10. 이 IP 주소가 리전 또는 전역인지 지정합니다.
    • 전역 부하 분산기에 대해 고정 IP 주소를 예약하는 경우에는 전역을 선택합니다.
    • 인스턴스 또는 리전 부하 분산기에 대해 고정 IP 주소를 예약하는 경우에는 리전을 선택한 다음 주소를 만들 리전을 선택합니다.
  11. 다음을 선택합니다.
    • 이 프로젝트의 네트워크: IPv6 주소를 예약하는 동일한 Virtual Private Cloud(VPC) 네트워크의 서브넷에서 외부 IPv6 주소를 예약하려면 이 옵션을 선택합니다.
    • 나와 공유된 네트워크: 공유 VPC 네트워크의 서브넷에서 외부 IPv6 주소를 예약하려면 이 옵션을 선택합니다.
  12. 선택한 옵션에 따라 다음을 선택합니다.

    • 네트워크: VPC 네트워크
    • 서브네트워크: 고정 리전 IPv6 주소를 할당할 서브넷
    • 엔드포인트 유형: VM 인스턴스 또는 네트워크 부하 분산기 선택
  13. 선택사항: VM 인스턴스를 엔드포인트 유형으로 선택한 경우 IPv6 주소를 연결할 VM 인스턴스를 선택합니다.

  14. 예약을 클릭합니다.

gcloud

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

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. gcloud compute addresses create 명령어를 사용합니다.

    gcloud compute addresses create IP_ADDR_NAME \
        --project SERVICE_PROJECT_ID \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --region=REGION \
        --ip-version=IPV6 \
        --endpoint-type=[VM | NETLB]
    

    다음을 바꿉니다.

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

API

고정 내부 IPv6 주소를 서비스 프로젝트 관리자로 예약하려면 addresses.insert 메서드를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
{
  "name": "ADDRESS_NAME",
  "ipVersion": "IPV6",
  "ipv6EndpointType": "VM|LB",
  "networkTier": "PREMIUM",
  "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "addressType": "EXTERNAL"
}

다음을 바꿉니다.

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

인스턴스 만들기

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

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

    예약된 고정 내부 IPv4 주소로 인스턴스를 만들 때 고정 IPv4 주소가 생성되어 있으면 서브넷과 리전이 이미 선택되어 있습니다. 고정 내부 IPv4 주소로 인스턴스를 생성하는 gcloud 예시가 이 섹션에 나와 있습니다.

  • 서비스 프로젝트 관리자는 권한이 부여된 서브넷을 사용하여 인스턴스만 만들 수 있습니다. 사용할 수 있는 서브넷을 확인하려면 사용 가능한 서브넷 나열을 참조하세요.

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

  • 이중 스택 서브넷에서 인스턴스를 만들 경우 이중 스택 인스턴스를 만들 수 있습니다. 이중 스택 서브넷은 커스텀 모드 VPC 네트워크에서만 지원됩니다. 서브넷의 IPv6 액세스 유형에 따라 VM에 할당된 IPv6 주소가 내부 또는 외부 IPv6 주소인지가 결정됩니다.

공유 서브넷에서 이중 스택 인스턴스를 만들려면 Google Cloud CLI 또는 API를 사용합니다. Google Cloud 콘솔에서는 공유 서브넷에 이중 스택 인스턴스를 만들 수 없습니다.

콘솔

  1. 공유 VPC를 설정합니다.
  2. Google Cloud 콘솔에서 공유 VPC 페이지로 이동합니다.

    공유 VPC로 이동

  3. 공유 VPC 관리자로 로그인합니다.

  4. 프로젝트 선택 도구에서 서비스 프로젝트를 선택합니다.

  5. 인스턴스 만들기 페이지로 이동하려면 Compute Engine > VM 인스턴스 > 인스턴스 만들기를 선택합니다.

  6. 인스턴스 이름을 지정합니다.

  7. 리전에 대해 공유 서브네트워크가 포함된 리전을 선택합니다.

  8. 고급 옵션에서 네트워킹을 클릭합니다.

  9. 네트워크 인터페이스에서 나와 공유된 네트워크 라디오 버튼을 클릭합니다.

  10. 공유 서브네트워크 목록에서 인스턴스를 만들 필요한 서브넷을 선택합니다.

    • IPv4 주소의 경우 단일 스택 서브넷을 선택합니다.
    • IPv6 주소의 경우 필요한 IPv6 액세스 유형의 이중 스택 서브넷을 선택합니다.
  11. IP 스택 유형을 선택합니다.

    • IPv4 주소의 경우 IPv4(단일 스택)를 선택합니다.
    • IPv6 주소의 경우 IPv4 및 IPv6(이중 스택)을 선택합니다.
  12. 인스턴스에 필요한 다른 매개변수를 지정합니다.

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

gcloud

  • 공유 VPC 네트워크의 공유 서브넷에서 임시 내부 IPv4 주소로 인스턴스를 만듭니다.

    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 네트워크에 예약된 고정 내부 IPv4 주소로 인스턴스를 만듭니다.

    1. 호스트 프로젝트의 사용 가능한 주소 범위에서 서비스 프로젝트의 고정 내부 IPv4 주소를 예약합니다.
    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입니다.
      • IP_ADDR_NAME: 고정 IP 주소의 이름입니다.
      • ZONE: IP_ADDR_NAME과 동일한 리전에 있는 영역입니다.
      • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID입니다.
      • REGION: 공유 서브넷을 포함하는 리전입니다.
      • SUBNET: 고정 내부 IPv4 주소와 연결된 공유 서브넷의 이름입니다.
  • 임시 내부 IPv4 주소와 임시 IPv6 주소로 인스턴스를 만듭니다.

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --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: 지정된 리전에 있는 영역입니다.
  • 예약된 고정 외부 IPv6 주소로 인스턴스를 만듭니다.

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --ipv6-address IPV6_ADDRESS \
        --ipv6-prefix-length=96 \
        --ipv6-network-tier PREMIUM \
        --zone ZONE
    

    다음을 바꿉니다.

    • INSTANCE_NAME: 인스턴스 이름
    • SERVICE_PROJECT_ID: 서비스 프로젝트의 ID입니다.
    • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 ID입니다.
    • REGION: 공유 서브넷을 포함하는 리전
    • SUBNET: 공유 서브넷의 이름
    • IPV6_ADDRESS: VM에 할당할 IPv6 주소.
    • ZONE: 지정된 리전에 있는 영역입니다.

API

  • 임시 내부 IPv4 주소로 인스턴스를 만들려면 서브넷만 지정합니다.

    POST https://compute.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 메서드를 참조하세요.

  • 예약된 내부 IPv4 주소로 인스턴스를 만들려면 서브넷 및 예약된 IPv4 주소 이름을 지정합니다.

    POST https://compute.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: 예약된 내부 IPv4 주소의 이름입니다.
    • INSTANCE_NAME: 인스턴스 이름입니다.
    • HOST_PROJECT_ID: 공유 VPC 네트워크가 포함된 프로젝트의 ID입니다.
    • MACHINE_TYPE: 인스턴스의 머신 유형입니다.
    • REGION: 공유 서브넷을 포함하는 리전
    • SERVICE_PROJECT_ID: 서비스 프로젝트의 ID입니다.
    • SOURCE_IMAGE: 인스턴스의 이미지입니다.
    • SUBNET: 공유 서브넷의 이름
    • ZONE: 지정된 리전에 있는 영역입니다.

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

  • 임시 내부 IPv4 주소와 임시 IPv6 주소로 인스턴스를 만들려면 서브넷 및 스택 유형을 지정합니다.

    POST https://compute.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",
          "stackType": "IPv4_IPv6"
        }
      ],
      "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 메서드를 참조하세요.

Terraform

Terraform 데이터 블록을 사용하여 호스트 서브넷 정보를 지정할 수 있습니다. 그런 다음 Terraform 리소스를 사용하여 서비스 프로젝트에서 VM 인스턴스를 만듭니다.

호스트 서브넷을 지정합니다.

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

호스트 프로젝트의 공유 서브넷에서 임시 IPv4 주소를 사용하여 서비스 프로젝트에 VM 인스턴스를 만듭니다.

resource "google_compute_instance" "ephemeral_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "my-vm"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

호스트 프로젝트의 공유 서브넷에서 예약된 고정 IPv4 주소를 사용하여 서비스 프로젝트에 VM 인스턴스를 만듭니다.

resource "google_compute_instance" "reserved_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "reserved-ip-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
    network_ip = google_compute_address.internal.address
  }
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

인스턴스 템플릿 만들기

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

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

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

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

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

  • 이중 스택 서브넷에서 템플릿을 만들 경우 이중 스택 템플릿을 만들 수 있습니다. 이중 스택 서브넷은 커스텀 모드 VPC 네트워크에서만 지원됩니다. 서브넷의 IPv6 액세스 유형에 따라 VM에 할당된 IPv6 주소가 내부 또는 외부 IPv6 주소인지가 결정됩니다.

    공유 서브넷에서 이중 스택 인스턴스 템플릿을 만들려면 Google Cloud CLI 또는 API를 사용합니다. Google Cloud 콘솔에서는 공유 서브넷에 이중 스택 인스턴스 템플릿을 만들 수 없습니다.

콘솔

  1. 공유 VPC를 설정합니다.
  2. Google Cloud 콘솔에서 공유 VPC 페이지로 이동합니다.
    공유 VPC 페이지로 이동
  3. 공유 VPC 관리자로 로그인합니다.
  4. 프로젝트 선택 도구에서 서비스 프로젝트를 선택합니다.
  5. 인스턴스 템플릿 만들기 페이지로 이동하려면 Compute Engine > 인스턴스 템플릿 > 인스턴스 템플릿 만들기를 선택합니다.
  6. 인스턴스 템플릿 이름을 지정합니다.
  7. 고급 옵션에서 네트워킹을 클릭합니다.
  8. 네트워크 인터페이스에서 나와 공유된 네트워크 라디오 버튼을 클릭합니다.
  9. 공유 서브네트워크 목록에서 인스턴스 템플릿을 만들 필요한 서브넷을 선택합니다.
    • IPv4 주소의 경우 단일 스택 서브넷을 선택합니다.
    • IPv6 주소의 경우 필요한 IPv6 액세스 유형의 이중 스택 서브넷을 선택합니다.
  10. IP 스택 유형을 선택합니다.
    • IPv4 주소의 경우 IPv4(단일 스택)를 선택합니다.
    • IPv6 주소의 경우 IPv4 및 IPv6(이중 스택)을 선택합니다.
  11. 인스턴스 템플릿에 필요한 다른 매개변수를 지정합니다.
  12. 만들기를 클릭합니다.

gcloud

  • 다음과 같이 자동 모드 공유 VPC 네트워크의 자동 생성 서브넷에서 사용할 IPv4 전용 인스턴스 템플릿을 만듭니다.

    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 네트워크(자동 또는 커스텀 모드)에서 수동으로 생성된 서브넷에 대한 IPv4 전용 인스턴스 템플릿을 만들려면 다음을 수행합니다.

    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 네트워크에서 서브넷을 사용하는 이중 스택 인스턴스 템플릿을 만듭니다.

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --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 네트워크의 자동 생성 서브넷을 사용하는 IPv4 전용 인스턴스 템플릿을 만들려면 VPC 네트워크를 지정하세요.

    POST https://compute.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 네트워크(자동 또는 커스텀 모드)에서 수동으로 생성된 서브넷을 사용하는 IPv4 전용 인스턴스 템플릿을 만들려면 서브넷을 지정하세요.

    POST https://compute.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 네트워크에서 서브넷을 사용하는 이중 스택 인스턴스 템플릿을 만들려면 서브넷 및 스택 유형을 지정하세요.

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

    다음을 바꿉니다.

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

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

Terraform

Terraform 데이터 블록을 사용하여 호스트 서브넷 정보를 지정할 수 있습니다. 그런 다음 Terraform 리소스를 사용하여 VM 인스턴스 템플릿을 만듭니다. VM의 IPv4 주소는 호스트 프로젝트의 공유 서브넷에서 시작됩니다.

해당 서브넷은 VM 인스턴스가 생성될 동일한 리전에 있어야 합니다.

호스트 서브넷을 지정합니다.

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

서비스 프로젝트에서 VM 인스턴스 템플릿을 만듭니다.

resource "google_compute_instance_template" "default" {
  project      = var.service_project
  name         = "appserver-template"
  description  = "This template is used to create app server instances."
  machine_type = "n1-standard-1"
  disk {
    source_image = "debian-cloud/debian-9"
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

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

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

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

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

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

  • Google Cloud이 관리형 인스턴스 그룹 생성 요청을 받으면 요청을 실행하는 IAM 구성원이 인스턴스 템플릿에 지정된 서브넷(그룹과 동일한 리전에 있음)을 사용할 수 있는 권한이 있는지 확인합니다. 확인에 실패하면 관리형 인스턴스 그룹이 생성되지 않고 Google Cloud는 Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME 오류를 반환합니다.

    사용 가능한 서브넷을 나열하여 사용할 수 있는 서브넷을 확인하고 서비스 계정에 추가 액세스 권한이 필요한 경우 공유 VPC 관리자에게 문의하세요. 자세한 내용은 서비스 계정을 서비스 프로젝트 관리자로를 참조하세요.

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

HTTPS 부하 분산기 만들기

공유 VPC 네트워크 내에서 외부 애플리케이션 부하 분산기를 구성하는 방법에는 여러 가지가 있습니다. 배포 유형에 관계없이 부하 분산기의 모든 구성요소는 동일한 조직 및 동일한 공유 VPC 네트워크에 있어야 합니다.

지원되는 공유 VPC 아키텍처에 대해 자세히 알아보려면 다음을 참조하세요.

내부 패스 스루 네트워크 부하 분산기 만들기

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

공유 VPC 환경에서 내부 패스 스루 네트워크 부하 분산기를 만들기 전에 공유 VPC 아키텍처를 참조하세요.

콘솔

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

  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: 백엔드 서비스의 이름입니다(내부 패스 스루 네트워크 부하 분산기 만들기에 관한 일반적인 절차 중에 이미 생성됨).
  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID
  • SUBNET: 공유 서브넷의 이름
  • INTERNAL_IP: 공유 서브넷의 내부 IP 주소입니다(지정되지 않은 경우 사용 가능한 IP 주소가 선택됨).

더 많은 옵션은 gcloud compute forwarding-rules create 명령어를 참조하세요.

API

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

POST https://compute.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: 백엔드 서비스의 이름입니다(내부 패스 스루 네트워크 부하 분산기 만들기에 관한 일반적인 절차 중에 이미 생성됨).
  • FR_NAME: 전달 규칙의 이름입니다.
  • HOST_PROJECT_ID: 공유 VPC 호스트 프로젝트의 프로젝트 ID
  • IP_ADDRESS: 공유 서브넷의 내부 IP 주소입니다.
  • IP_PROTOCOL: 부하 분산기의 백엔드 서비스 프로토콜과 일치하는 TCP 또는 UDP입니다.
  • PORT: 부하 분산기의 숫자 포트 또는 포트 목록입니다.
  • REGION: 공유 서브넷을 포함하는 리전
  • SERVICE_PROJECT_ID: 서비스 프로젝트의 ID
  • SUBNET: 공유 서브넷의 이름

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

Terraform

Terraform 데이터 블록을 사용하여 호스트 서브넷호스트 네트워크를 지정할 수 있습니다. 그런 다음 Terraform 리소스를 사용하여 전달 규칙을 만듭니다.

호스트 네트워크를 지정합니다.

data "google_compute_network" "network" {
  name    = "my-network-123"
  project = var.project
}

호스트 서브넷을 지정합니다.

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

서비스 프로젝트에서 호스트 프로젝트의 네트워크 및 서브넷에 전달 규칙을 만듭니다.

resource "google_compute_forwarding_rule" "default" {
  project               = var.service_project
  name                  = "l4-ilb-forwarding-rule"
  backend_service       = google_compute_region_backend_service.default.id
  region                = "europe-west1"
  ip_protocol           = "TCP"
  load_balancing_scheme = "INTERNAL"
  all_ports             = true
  allow_global_access   = true
  network               = data.google_compute_network.network.self_link
  subnetwork            = data.google_compute_subnetwork.subnet.self_link
}

Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

다음 단계