고정 외부 IP 주소 구성


가상 머신(VM) 인스턴스에 고정 외부 IP 주소를 할당할 수 있습니다. VM의 고정 IP 주소를 변경, 나열, 해제할 수도 있습니다. 고정 외부 IP 주소를 예약하려면 고정 외부 IP 주소 예약을 참조하세요.

외부 IP 주소는 고정 또는 임시 주소일 수 있습니다. VM에 변경되지 않는 고정 외부 IP 주소가 필요한 경우 다음을 수행합니다.

  1. 고정 외부 IP 주소를 가져옵니다. 새 외부 IP 주소를 예약하거나 기존 임시 외부 IP 주소를 승격하는 것도 가능합니다.
  2. 예약된 IP 주소를 기존 VM에 할당하거나 새 VM을 만들 때 할당합니다.

내부 Compute Engine 네트워크에 고정 IP 주소가 필요한 경우 고정 내부 IP 주소 예약을 참조하세요.

시작하기 전에

  • IP 주소에 대해 알아봅니다.
  • 고정 외부 IP 주소의 할당량 및 한도에 대해 읽어봅니다.
  • 외부 IP 주소 가격 책정에 대해 읽어봅니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    Terraform

    로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.

    REST

    로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공한 사용자 인증 정보를 사용합니다.

      Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init

필요한 역할

고정 IP 주소를 구성하고 관리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

이러한 사전 정의된 역할에는 고정 IP 주소를 구성 및 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

필수 권한

고정 IP 주소를 구성하고 관리하려면 다음 권한이 필요합니다.

  • VM 인스턴스에 대한 compute.instances.update 권한
  • VM 인스턴스에 대한 compute.instances.updateNetworkInterface 권한
  • VM 인스턴스에 대한 compute.instances.addAccessConfig 권한
  • VM 인스턴스에 대한 compute.instances.deleteAccessConfig 권한
  • 네트워크에 대한 compute.networks.list
  • 서브넷에 대한 compute.subnetworks.use 권한
  • 서브넷에 대한 compute.subnetworks.list 권한
  • VM 만들기:
    • 프로젝트에 대한 compute.instances.create 권한
    • 커스텀 이미지를 사용하여 VM 만들기: 이미지에 대한 compute.images.useReadOnly 권한
    • 스냅샷을 사용하여 VM 만들기: 스냅샷에 대한 compute.snapshots.useReadOnly 권한
    • 인스턴스 템플릿을 사용하여 VM 만들기: 인스턴스 템플릿에 대한 compute.instanceTemplates.useReadOnly 권한
    • VM에 기존 네트워크 할당: 프로젝트에 대한 compute.networks.use 권한
    • VM의 고정 IP 주소 지정: 프로젝트에 대한 compute.addresses.use 권한
    • 기존 네트워크 사용 시 VM에 외부 IP 주소 할당: 프로젝트에 대한 compute.networks.useExternalIp 권한
    • VM의 서브넷 지정: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.use 권한
    • VPC 네트워크를 사용할 때 VM에 외부 IP 주소 할당: 프로젝트 또는 선택한 서브넷에 대한 compute.subnetworks.useExternalIp 권한
    • VM에 VM 인스턴스 메타데이터 설정: 프로젝트에 대한 compute.instances.setMetadata 권한
    • VM에 태그 설정: VM에 대한 compute.instances.setTags 권한
    • VM에 라벨 설정: VM에 대한 compute.instances.setLabels 권한
    • VM에 사용할 서비스 계정 설정: VM에 대한 compute.instances.setServiceAccount 권한
    • VM의 새 디스크 만들기: 프로젝트에 대한 compute.disks.create 권한
    • 기존 디스크를 읽기 전용 또는 읽기-쓰기 모드로 연결: 디스크에 대한 compute.disks.use 권한
    • 기존 디스크를 읽기 전용 모드로 연결: 디스크에 대한 compute.disks.useReadOnly 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

제한사항

  • 한 번에 하나의 리소스만 고정 외부 IP 주소를 사용할 수 있습니다.

  • IP 주소가 리소스에 할당되면 해당 주소가 고정 주소인지 임시 주소인지 확인할 수 있는 방법이 없습니다. IP 주소를 해당 프로젝트에 예약된 고정 외부 IP 주소 목록과 비교할 수 있습니다. 프로젝트에서 사용할 수 있는 고정 외부 IP 주소의 목록을 확인하려면 gcloud compute addresses list 하위 명령어를 사용합니다.

  • 각 VM에는 네트워크 인터페이스가 여러 개 있을 수 있으며 각 인터페이스에는 다음 IP 주소가 할당될 수 있습니다.

    • 내부 IPv4 주소(필수)
    • 외부 IPv4 주소
    • IPv6 주소 범위(내부 또는 외부 중 하나)
  • 고정 IP 주소 이름을 변경할 수 없습니다.

  • 할당된 외부 IP 주소는 VM과 동일한 물리적 호스트에 존재하고, 라우팅, 지연 시간, 가격 책정을 포함한 모든 목적을 위해 VM과 동일한 리전에 존재합니다. 이는 인터넷 위치정보 조회 정보에 관계없이 적용됩니다.

참고: 네트워크 인터페이스는 여러 전달 규칙으로부터 트래픽을 수신하며 이 전달 규칙은 다른 외부 IP 주소에도 적용될 수 있습니다. 여러 외부 IP 주소에서 이러한 전달 규칙을 통해 네트워크 인터페이스를 참조할 수 있지만 각 네트워크 인터페이스에는 외부 IPv4 주소 하나와 외부 IPv6 주소 범위 하나만 할당될 수 있습니다.

부하 분산 및 전달 규칙에 대한 자세한 내용은 부하 분산 문서를 읽어보세요.

사용 가능한 고정 외부 IP 주소 보기

프로젝트에 예약한 고정 외부 IP 주소를 나열하려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 IP 주소 페이지로 이동합니다.

    IP 주소로 이동

  2. 외부 IP 주소를 클릭합니다.

gcloud

gcloud compute addresses list 명령어를 사용합니다.

  • 모든 IP 주소를 나열하려면 다음 명령어를 사용합니다.

    gcloud compute addresses list
  • 모든 전역 IP 주소를 나열하려면 다음 명령어를 사용합니다.

    gcloud compute addresses list --global
  • 특정 리전의 모든 리전 IP 주소를 나열하려면 다음 명령어를 사용합니다.

    gcloud compute addresses list \
        --regions=REGION
    

    REGION을 주소를 나열할 리전으로 바꿉니다. 쉼표로 구분한 리전 이름을 지정하여 여러 리전의 주소를 나열할 수 있습니다.

    gcloud compute addresses list \
        --regions=REGION1,REGION2,..REGION_n_
    

API

  • 리전 IPv4 또는 IPv6 주소를 나열하려면 addresses.list 메서드를 호출합니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
    

    다음을 바꿉니다.

    • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
    • REGION: 요청의 리전 이름
  • 모든 리전의 모든 주소를 나열하려면 addresses.aggregatedList 메서드를 호출합니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/addresses
    
  • 전역 IPv4 또는 IPv6 주소를 나열하려면 globalAddresses.list 메서드를 호출합니다.

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/addresses
    

    다음을 바꿉니다.

    PROJECT_ID: 이 요청의 프로젝트 ID입니다.

고정 외부 IP 주소 구성

다음 섹션에서는 VM에 고정 외부 IP 주소를 구성하는 방법을 설명합니다.

고정 외부 IP 주소를 사용하는 VM을 만듭니다.

고정 외부 IP 주소를 예약한 후 이를 VM에 할당할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 인스턴스 만들기 페이지로 이동합니다.

    인스턴스 만들기로 이동

  2. VM 세부정보를 지정합니다.

  3. 고급 옵션 섹션을 펼칩니다.

  4. 네트워킹 섹션을 펼칩니다.

  5. 네트워크 인터페이스 섹션에서 네트워크 인터페이스를 확장하여 수정합니다.

  6. IPv4 주소를 할당하려면 다음 안내를 따르세요.

    1. 네트워크를 선택하세요.
    2. 외부 IPv4 주소 목록에서 IP 주소를 선택합니다.
  7. IPv6 주소를 할당하려면 다음 안내를 따르세요.

    1. IPv6 서브넷이 포함된 네트워크를 선택합니다.
    2. 서브네트워크 목록에서 이중 스택 서브넷을 선택합니다.
    3. IP 스택 유형IPv4 및 IPv6(이중 스택)을 선택합니다.
    4. 외부 IPv6 주소 목록에서 새로 예약된 외부 IPv6 주소를 선택합니다. 또는 IP 주소 만들기를 선택하고 새 고정 외부 IPv6 주소를 예약합니다.
    5. 네트워크 서비스 등급에서 프리미엄을 선택합니다.
  8. 기본 네트워크 인터페이스 수정을 완료하려면 완료를 클릭합니다.

  9. VM 만들기 프로세스를 계속 진행합니다.

gcloud

VM을 만들고 이미 예약한 고정 리전 외부 IP 주소를 할당할 수 있습니다.

  • 고정 외부 IPv4 주소를 할당하려면 다음을 실행합니다.

    gcloud compute instances create VM_NAME --address=IP_ADDRESS
    

    다음을 바꿉니다.

    • VM_NAME: VM의 이름입니다.
    • IP_ADDRESS: VM에 할당할 IP 주소입니다. 주소 이름이 아닌 예약된 고정 외부 IP 주소를 사용합니다.
  • 고정 외부 IPv6 주소를 할당하려면 다음을 실행합니다.

    gcloud compute instances create VM_NAME \
        --subnet=SUBNET \
        --stack-type=IPV4_IPV6 \
        --external-ipv6-address=IPV6_ADDRESS \
        --external-ipv6-prefix-length=96 \
        --ipv6-network-tier=PREMIUM \
        --zone=ZONE
    

Terraform

google_compute_instance 리소스를 사용하여 외부 IP 주소를 할당할 수 있습니다.

resource "google_compute_instance" "default" {
  name         = "dns-proxy-nfs"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "ubuntu-1404-trusty-v20160627"
    }
  }

  network_interface {
    network = "default"
    access_config {
      nat_ip = google_compute_address.default.address
    }
  }
}

REST

새 VM에 고정 외부 IPv4 주소를 할당하려면 다음을 실행합니다.

새 VM 만들기 요청에서 networkInterfaces[].accessConfigs[].natIP 속성과 사용하려는 외부 IPv4 주소를 명시적으로 제공합니다. 예를 들면 다음과 같습니다.

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "networkInterfaces": [{
    "accessConfigs": [{
      "type": "ONE_TO_ONE_NAT",
      "name": "External NAT",
      "natIP": "IPV4_ADDRESS"
     }],
    "network": "global/networks/default"
  }],
  "disks": [{
      "autoDelete": "true",
      "boot": "true",
      "type": "PERSISTENT",
      "initializeParams": {
          "sourceImage": "SOURCE_IMAGE"
      }
}]
}

새 VM에 고정 외부 IPv6 주소를 할당하려면 다음을 실행합니다.

새 VM 만들기 요청에서 networkInterfaces[].ipv6AccessConfigs[].externalIpv6 속성과 사용하려는 외부 IPv6 주소를 명시적으로 제공합니다. 예를 들면 다음과 같습니다.

{
  "name": "VM_NAME",
  "machineType": "zones/ZONE/machineTypes/MACHINE_TYPE",
  "networkInterfaces": [{
          "accessConfigs": [{
              "name": "external-nat",
              "type": "ONE_TO_ONE_NAT"
          }],
          "ipv6AccessConfigs": [{
        "externalIpv6": "IOV6_ADDRESS",
        "externalIpv6PrefixLength": 96,
        "name": "external-ipv6-access-config",
        "networkTier": "PREMIUM",
        "type": "DIRECT_IPV6"
          }],
      "stackType": "IPV4_IPV6",
      "subnetwork":"SUBNETWORK
  }],
  "disks": [{
    "autoDelete": "true",
    "boot": "true",
    "mode": "READ_WRITE",
    "type": "PERSISTENT",
    "initializeParams": {
        "sourceImage": "SOURCE_IMAGE"
    },
  }],
 }

외부 IP 주소 변경 또는 기존 VM에 할당

기존 VM에 대해 임시 또는 고정 외부 IP 주소를 변경하거나 할당할 수 있습니다.

VM은 여러 인터페이스를 가질 수 있고 각 인터페이스는 외부 IP 주소를 가질 수 있습니다. VM에 이미 외부 IP 주소가 있는 경우 먼저 해당 주소를 삭제해야 합니다. 그런 후 기존 VM에 새 외부 IP 주소를 할당할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 VM 인스턴스 페이지로 이동합니다.

    VM 인스턴스로 이동

  2. 외부 IP를 할당하려는 VM의 이름을 클릭합니다. 인스턴스 세부정보 페이지가 표시됩니다.
  3. 인스턴스 세부정보 페이지에서 다음 단계를 완료합니다.

    1. 수정을 클릭합니다.
    2. 네트워크 인터페이스를 펼칩니다.
    3. VM에 할당하는 데 필요한 외부 IP 주소를 선택합니다.
      1. 외부 IPv4 주소의 경우 임시 또는 고정 외부 IPv4 주소를 선택합니다.
      2. 외부 IPv6 주소의 경우 임시 또는 고정 외부 IPv6 주소를 선택합니다.
    4. 완료를 클릭합니다.
  4. 저장을 클릭합니다.

gcloud

  1. 선택사항: 고정 외부 IP 주소를 예약합니다.

    고정 외부 IP 주소를 할당하려는 경우에는 주소를 예약하고 해당 주소가 다른 리소스에서 사용되고 있지 않은지 확인해야 합니다. 필요한 경우에는 안내에 따라 새 고정 외부 IP 주소를 예약하거나 고정 외부 IP 주소를 할당 해제합니다.

    임시 외부 IP 주소를 사용하려는 경우에는 이 단계를 건너 뛰고, Compute Engine이 임시 외부 IP 주소를 무작위로 할당하도록 할 수 있습니다.

  2. 고정 외부 IP 주소 할당 해제의 설명대로 기존 IP 주소 할당을 삭제합니다.

  3. 새로운 외부 IP 주소를 할당합니다.

    • IPv4 주소를 할당하려면 instances add-access-config 하위 명령어를 사용합니다.

      참고: IP_ADDRESS를 고정 IP 주소의 이름으로 바꾸지 마세요. 실제 IP 주소를 사용해야 합니다.
      gcloud compute instances add-access-config VM_NAME \
        --access-config-name="ACCESS_CONFIG_NAME" --address=IP_ADDRESS
      

      다음을 바꿉니다.

      • VM_NAME: VM의 이름
      • ACCESS_CONFIG_NAME: 액세스 구성의 이름. 따옴표 사이에 전체 이름을 포함해야 합니다.
      • IP_ADDRESS: 추가할 IP 주소입니다.

      고정 외부 IP 주소를 사용하는 대신 Compute Engine이 임시 외부 IP 주소를 할당하도록 하려면 --address IP_ADDRESS 속성을 생략합니다.

      gcloud compute instances add-access-config VM_NAME \
        --access-config-name="ACCESS_CONFIG_NAME"
      
    • IPv6 주소 범위를 할당하려면 instance network-interfaces update 하위 명령어를 사용합니다.

      gcloud compute instances network-interfaces update VM_NAME \
        --network-interface==NIC \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPV4_IPV6 \
        --external-ipv6-address=IPV6_ADDRESS \
        --external-ipv6-prefix-length=96 \
        --zone=ZONE
      

      다음을 바꿉니다.

      • VM_NAME: VM의 이름입니다.
      • NIC: 네트워크 인터페이스의 이름입니다.
      • IPV6_ADDRESS: VM에 할당할 IPv6 주소. /96 범위에서 첫 번째 IPv6 주소를 지정합니다.
      • ZONE: VM의 영역

REST

VM의 새 액세스 구성을 추가하여 해당 VM의 외부 IPv4 또는 IPv6 주소를 변경할 수 있습니다.

  1. 고정 외부 IP 주소 할당 해제의 설명대로 기존 IP 주소 할당을 삭제합니다.

  2. instances.deleteAccessConfig 메서드POST 요청을 수행하여 기존 액세스 구성을 삭제하세요.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/deleteAccessConfig
    
  3. instances.addAccessConfig 메서드POST 요청을 수행하여 VM의 네트워크 인터페이스에 새 액세스 구성을 추가합니다.

외부 IP 주소를 특정 VM으로 제한

특정 워크로드에서는 기본적인 요구사항에 따라 보안 및 네트워크 제한사항이 포함될 수 있습니다. 예를 들어 특정 VM만 외부 IP 주소를 사용하도록 제한할 수 있습니다. 이렇게 하면 데이터 무단 반출을 방지하거나 네트워크 격리를 유지하는 데 도움이 될 수 있습니다. 조직 정책을 사용하면 조직 또는 프로젝트 내에서 VM의 외부 IP 주소 사용을 제어하는 제약 조건이 포함된 특정 VM에서만 외부 IP 주소를 사용할 수 있습니다.

VM에서 외부 IP 주소 제어를 위한 제약조건은 다음과 같습니다.

constraints/compute.vmExternalIpAccess

제약조건을 사용하기 위해서는 외부 IP 주소를 포함할 수 있는 VM의 allowedList를 사용하여 정책을 지정합니다. 정책을 지정하지 않으면 모든 VM에 대해 모든 외부 IP 주소가 허용됩니다. 정책이 적용되면 allowedValues 목록에 나열된 VM에만 외부 IP 주소(임시 또는 고정)를 할당할 수 있고, 조직 또는 프로젝트에서 정책에 명시적으로 정의되지 않은 다른 Compute Engine VM은 외부 IP 주소 사용이 금지됩니다.

VM은 허용 및 거부 목록에서 인스턴스의 URI를 사용하여 식별됩니다.

projects/PROJECT_ID/zones/ZONE/instances/VM_NAME

외부 IP 주소 제한 사양

  • 목록 제약조건은 VM에만 적용할 수 있습니다.
  • 이 제약조건은 소급해서 적용할 수 없습니다. 정책을 사용 설정하기 전에 외부 IP 주소가 있는 모든 VM은 외부 IP 주소를 유지합니다.
  • 이 제약조건은 allowedList 또는 deniedList를 허용하지만 동일 정책에서 둘 다 허용하지는 않습니다.
  • 필요한 권한이 있는 사용자 또는 관리자가 VM 수명 주기 및 무결성을 관리 및 유지보수할 수 있습니다. 이 제약조건은 VM의 URI만 확인하며, 허용 목록에 있는 VM이 변경, 삭제 또는 재생성되는 것을 방지하지 않습니다.

외부 IP 주소를 제한하는 데 필요한 권한

프로젝트 또는 조직 수준에서 제약조건을 설정하려면 해당 조직에서 orgpolicy.policyAdmin 역할을 부여 받아야 합니다.

조직 수준에서 정책 제약조건 설정

콘솔

  1. 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 필요한 경우 프로젝트 드롭다운 메뉴에서 필요한 조직을 선택합니다.
  3. VM 인스턴스에 허용되는 외부 IP 정의를 클릭합니다.
  4. 수정을 클릭하여 외부 IP 정책을 수정합니다. 수정 도구에 액세스할 수 없으면 적절한 권한이 없는 것입니다.
  5. 맞춤설정을 선택하여 특정 VM의 조직 정책을 설정합니다.

    조직 정책 수정 페이지의 맞춤설정 옵션

  6. 필요한 정책 시행정책 유형을 선택합니다.

  7. 정책 값에서 커스텀을 선택합니다.

  8. VM의 URI를 입력하고 Enter를 누릅니다. URI는 다음과 같은 형식이어야 합니다.

    projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
    
  9. 새 정책 값을 클릭하고 필요에 따라 VM의 URI를 입력합니다.

  10. 저장을 클릭하여 제약조건을 적용합니다.

gcloud

외부 IP 주소에 대해 제약조건을 설정하려면 먼저 조직 ID가 필요합니다. organizations list 명령어를 실행하고 응답에서 숫자 ID를 찾아 조직 ID를 찾을 수 있습니다.

gcloud organizations list

gcloud CLI는 조직 목록을 다음 형식으로 반환합니다.

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

gcloud resource-manager org-policies set-policy 명령어를 사용하여 정책을 설정합니다. 정책을 JSON 파일로 제공해야 합니다. 다음 형식으로 JSON 파일을 만듭니다.

{
"constraint": "constraints/compute.vmExternalIpAccess",
"listPolicy": {
  "allowedValues": [
     "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
     "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
     "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"
  ]
 }
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID(예: example-project). 이는 조직 숫자 ID가 필요한 조직 정책 설정과 다릅니다.
  • ZONE: VM의 영역
  • VM_NAME: VM의 이름

또는 deniedValues 목록을 지정하여 외부 IP 주소를 갖지 못하도록 명시적으로 금지할 VM을 표시할 수 있습니다. 목록에 없는 VM은 모두 외부 IP 주소를 갖도록 암시적으로 허용됩니다. allowedValues 또는 deniedValues 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

그런 다음 요청을 사용해서 파일을 전달합니다.

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --organization=ORGANIZATION_ID

ORGANIZATION_ID를 조직의 숫자 ID로 바꿉니다.

VM에 외부 IP 주소가 사용되지 않도록 하려면 정책 allValuesDENY로 설정할 수 있습니다.

{
  "constraint": "constraints/compute.vmExternalIpAccess",
  "listPolicy": {
    "allValues": "DENY"
  }
}

REST

setOrgPolicy() API를 사용하여 제약조건을 정의합니다. 사용자가 지정하는 allowedValue 목록의 VM은 외부 IP 주소를 가질 수 있습니다. 또는 deniedValues 목록을 지정하여 외부 IP 주소를 갖지 못하도록 명시적으로 금지할 VM을 표시할 수 있습니다. 목록에 없는 VM은 모두 외부 IP 주소를 갖도록 암시적으로 허용됩니다. allowedValues 또는 deniedValues 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

예를 들어 다음은 조직 내 특정 프로젝트의 VM이 외부 IP 주소를 갖는 것이 허용되는 compute.vmExternalIpAccess 제약조건을 조직에 적용하기 위한 요청입니다.

POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:setOrgPolicy

여기서 ORGANIZATION_ID는 조직의 숫자 ID입니다.

이제 요청 본문에서 이 제약조건의 정책을 제공합니다.

{
  "policy": {
    "constraint": "constraints/compute.vmExternalIpAccess",
    "listPolicy": {
      "allowedValues": [
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME",
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"
        ]
      }
    }
 }

VM에 외부 IP 주소가 사용되지 않도록 하려면 정책 allValuesDENY로 설정할 수 있습니다.

{
  "policy": {
    "constraint": "constraints/compute.vmExternalIpAccess",
    "listPolicy": {
      "allValues": "DENY"
      }
    }
 }

프로젝트 수준에서 정책 설정

프로젝트 수준에서 정책을 설정하면 조직 수준의 정책이 재정의됩니다. 예를 들어 조직 수준에서 allowedValues 목록에 example-vm-1이 있지만, 프로젝트 수준의 정책에서 deniedValues 목록에 동일한 VM이 있는 경우 VM이 외부 IP 주소를 갖는 것이 허용되지 않습니다.

콘솔

조직 수준에서 정책 제약조건 설정에 설명된 것과 동일한 절차를 따르지만, 조직 대신 프로젝트 선택기에서 프로젝트를 선택합니다.

프로젝트 선택기

gcloud

gcloud resource-manager org-policies set-policy 명령어를 사용하여 정책을 설정합니다. 정책을 JSON 파일로 제공해야 합니다. 다음 형식으로 JSON 파일을 만듭니다.

{
 "constraint": "constraints/compute.vmExternalIpAccess",
 "listPolicy": {
  "allowedValues": [
   "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"
  ]
 }
}

다음을 바꿉니다.

  • PROJECT_ID: 요청의 프로젝트 ID(예: example-project). 이는 조직 숫자 ID가 필요한 조직 정책 설정과 다릅니다.
  • ZONE: VM의 영역
  • VM_NAME: VM의 이름입니다.

또는 외부 IP 주소를 갖지 못하도록 명시적으로 금지할 VM의 deniedValues 목록을 지정할 수 있습니다. 목록에 없는 VM은 모두 외부 IP 주소를 갖도록 암시적으로 허용됩니다. allowedValues 또는 deniedValues 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

그런 다음 요청을 사용해서 파일을 전달합니다.

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=example-project

REST

setOrgPolicy API를 사용하여 제약조건을 정의합니다. 사용자가 지정하는 allowedValue 목록의 VM은 외부 IP 주소를 가질 수 있습니다. 또는 deniedValues 목록을 지정하여 외부 IP 주소를 갖지 못하도록 명시적으로 금지할 VM을 표시할 수 있습니다. 목록에 없는 VM은 모두 외부 IP 주소를 갖도록 암시적으로 허용됩니다. allowedValues 또는 deniedValues 중 하나를 지정할 수 있지만 둘 다 지정할 수는 없습니다.

예를 들어 다음은 특정 VM이 외부 IP 주소를 갖는 것을 허용하는 compute.vmExternalIpAccess 제약조건을 프로젝트에 설정하기 위한 요청입니다.

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setOrgPolicy

PROJECT_ID를 이 요청의 프로젝트 ID로 바꾸세요.

요청 본문에는 이 제약조건의 정책이 포함됩니다.

{
  "policy": {
    "constraint": "constraints/compute.vmExternalIpAccess",
    "listPolicy": {
      "allowedValues": [
        "projects/PROJECT_ID/zones/ZONE/instances/VM_NAME"
      ]
    }
  }
}

외부 IP 주소 제한 권장사항

  • 이 제약조건과 함께 deniedValues 목록을 사용하지 마세요. deniedValues 목록에 값을 정의하면 deniedValues 목록에 있는 VM만 외부 IP 주소 사용이 제한됩니다. 외부 IP 주소를 포함할 수 있는 VM을 정확하게 제어해야 할 경우, 이 방식은 보안상 문제가 될 수 있습니다. allowedValues 목록에서 특정 VM을 삭제하려면, VM을 하위 계층의 deniedValues 목록에 넣는 대신 allowedList에서 VM을 삭제하도록 기존 정책을 업데이트합니다.

  • 리소스 계층의 대부분에 적용할 정책을 설정하되 특정 프로젝트를 제외시키려는 경우 기본 정책을 복원해야 합니다. 이때 프로젝트의 모든 VM이 외부 IP 주소와 연결될 수 있도록 restoreDefault 객체를 지정하여 setOrgPolicy 메서드를 사용하면 됩니다. 프로젝트의 현재 정책은 기본 설정의 영향을 받지 않습니다.

  • 환경을 보다 효과적으로 제어하려면 조직 정책을 IAM 역할과 함께 사용합니다. 이 정책은 VM에만 적용되지만 네트워크 기기에서 외부 IP 주소를 더 효과적으로 제어하고 제한하려는 경우 적절한 당사자에게 compute.networkAdmin 역할을 부여할 수 있습니다.

  • 정책이 사용 설정된 상태로 Compute Engine에서 실행되고 있는 조직 또는 프로젝트 내의 모든 서비스 및 제품은 이 조직 정책의 영향을 받습니다. 특히 Google Kubernetes Engine, Dataflow, Dataproc, Cloud SQL 같은 서비스가 이 정책의 영향을 받습니다. 이것이 문제가 될 경우에는 조직 정책이 적용되지 않는 다른 프로젝트에서 다른 서비스 및 제품을 설정하고 필요한 경우 공유 VPC를 사용하는 것이 좋습니다.

고정 외부 IP 주소 관리

다음 섹션에서는 VM의 고정 외부 IP 주소를 관리하는 방법을 설명합니다.

내부 IP 주소가 임시 주소 또는 고정 주소인지 확인

고정 및 임시 내부 IP 주소는 대부분의 상황에서 모양과 동작이 동일합니다. 그러나 고정 내부 IP 주소를 사용하면 리소스를 삭제하고 다시 만드는 경우에도 동일한 리소스에 같은 IP 주소를 사용할 수 있습니다. 일반적으로 임시 IP 주소는 리소스를 중지하거나 삭제할 때 해제됩니다.

주소가 고정 주소 또는 임시 주소인지 확인하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 IP 주소 페이지로 이동합니다.

    IP 주소로 이동

  2. 목록에서 주소를 찾고 유형 열에서 IP 주소 유형을 확인합니다.

고정 외부 IP 주소 할당 해제

IP 주소를 할당 해제하면 리소스에서 삭제되지만, IP 주소를 예약된 상태로 유지합니다. IP 주소를 할당 해제하면 IP 주소를 다른 리소스에 다시 할당할 수 있습니다.

VM을 삭제하여 IPv4 또는 IPv6 주소를 할당 해제할 수도 있습니다.

콘솔

  1. Google Cloud 콘솔에서 IP 주소 페이지로 이동합니다.

    IP 주소로 이동

  2. 외부 IP 주소를 클릭합니다.

  3. 할당 해제하려는 고정 IP 주소를 선택합니다.

  4. 변경을 클릭하여 IP 주소 연결 대화상자를 엽니다.

  5. 연결 대상 드롭다운 목록에서 없음을 선택합니다.

  6. OK(확인)를 클릭합니다.

gcloud

  1. gcloud compute addresses list 명령어를 사용하여 고정 IP 주소가 사용 중인지 확인합니다.

    gcloud compute addresses list
    

    출력은 다음과 비슷합니다.

    NAME                      REGION    ADDRESS                  STATUS
    example-address-ipv4      REGION    198.51.100.1             RESERVED
    example-address-new-ipv4  REGION    203.0.113.1              IN_USE
    example-address-ipv6      REGION    2001:db8:1:1:1:1:1:1     RESERVED
    example-address-new-ipv6  REGION    2001:db8:4:4:4:4:4:4     IN_USE
    
    • IP 주소가 사용 중이 아니면 상태는 RESERVED입니다.
    • IP 주소가 사용 중이면 상태는 IN_USE입니다.
  2. IP 주소를 사용하는 VM의 이름을 검색합니다.

    gcloud compute addresses describe ADDRESS_NAME \
      --region=REGION
    

    다음을 바꿉니다.

    • ADDRESS_NAME: IPv6 주소 리소스의 이름
    • REGION: IPv6 주소 리소스의 리전

    출력은 다음과 비슷합니다.

    address: IP_ADDRESS
    addressType: EXTERNAL
    ...
    region: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/addresses/ADDRESS_NAME
    status: IN_USE
    subnetwork: https://www.googleapis.com/compute/v1/projects/PROJECT/regions/REGION/subnetworks/SUBNET
    users:
    - https://www.googleapis.com/compute/v1/projects/PROJECT/zones/ZONE/instances/VM_NAME
    

    users 필드에 IP 주소를 사용하는 VM의 이름이 표시됩니다.

  3. VM에서 IP 주소를 할당 해제합니다.

    • IPv4 주소를 할당 해제하려면 VM의 액세스 구성 파일을 삭제합니다.

      1. 삭제하려는 액세스 구성의 이름을 가져옵니다. 이름을 가져오려면 gcloud compute instances describe 명령어를 사용합니다. VM_NAME을 VM의 이름으로 바꿉니다.

        gcloud compute instances describe VM_NAME
        

        액세스 구성은 다음 형식으로 표시됩니다.

        networkInterfaces:
          - accessConfigs:
            - kind: compute#accessConfig
              name: external-nat
              natIP: 203.0.113.1
              type: ONE_TO_ONE_NAT
        
      2. gcloud compute instances delete-access-config 명령어를 사용하여 액세스 구성을 삭제합니다.

        gcloud compute instances delete-access-config VM_NAME \
          --access-config-name="ACCESS_CONFIG_NAME"
        

        다음을 바꿉니다.

        • VM_NAME: VM의 이름입니다.
        • ACCESS_CONFIG_NAME: 삭제할 액세스 구성의 이름. 따옴표 사이에 전체 이름을 포함해야 합니다.
    • IPv6 주소 범위를 할당 해제하려면 instance network-interfaces update 명령어를 사용합니다.

      gcloud compute instances network-interfaces update VM_NAME \
        --network-interface=nic0 \
        --stack-type=IPV4_ONLY \
        --zone=ZONE
      

      다음을 바꿉니다.

      • VM_NAME: IP 주소를 사용하는 VM의 이름
      • ZONE: VM의 영역
  4. 고정 외부 IP 주소를 사용할 수 있고 IN_USE 대신 RESERVED로 표시되었는지 확인합니다.

    gcloud compute addresses list \
      --filter="ADDRESS_NAME AND region=REGION"
    

    다음을 바꿉니다.

    • ADDRESS_NAME: IP 주소 리소스의 이름
    • REGION: IP 주소 리소스의 리전

이제 고정 외부 IP 주소를 사용할 수 있으므로, 이를 다른 VM에 할당하도록 선택할 수 있습니다.

REST

고정 외부 IPv4 또는 IPv6 주소를 할당 해제하려면 다음 단계를 수행합니다.

  • IPv4 주소의 경우 주소를 사용하는 VM에 연결된 액세스 구성을 삭제합니다.

    1. VM의 액세스 구성 세부정보를 확인하려면 instances.get 메서드GET 요청을 수행하세요.

      GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
      
    2. instances.deleteAccessConfig 메서드POST 요청을 수행하여 기존 액세스 구성을 삭제하세요.

      POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/deleteAccessConfig
      

      다음을 바꿉니다.

      • PROJECT_ID: 이 요청의 프로젝트 ID입니다.
      • ZONE: VM이 있는 영역
      • VM_NAME: VM의 이름
  • IPv6 주소의 경우 IPv6 주소가 연결된 VM에 대한 네트워크 인터페이스의 스택 유형을 업데이트합니다.

    1. instances.updateNetworkInterface 메서드에 대해 PATCH 요청을 실행합니다.

    2. 요청 본문에서 stackType 필드 값을 IPV4_ONLY로 업데이트합니다.

      예를 들면 다음과 같습니다.

      PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/updateNetworkInterface
      
      {
        "networkInterfaces": [{
          ...
          "stackType" : "IPV4_ONLY"
          ...
          }]
      }
      

고정 외부 IP 주소 해제

고정 외부 IPv4 또는 IPv6 주소가 더 이상 필요하지 않으면 IP 주소 리소스를 삭제하여 IP 주소를 해제할 수 있습니다. VM을 삭제해도 고정 외부 IP 주소는 자동으로 해제되지 않습니다. 더 이상 필요하지 않은 고정 외부 IP 주소는 수동으로 해제해야 합니다.

고정 외부 IP 주소를 해제하려면 VPC 문서의 고정 외부 IP 주소 해제를 참조하세요.

다음 단계