네트워크 태그 구성

태그는 Compute Engine 가상 머신(VM) 인스턴스 또는 인스턴스 템플릿과 같이 리소스의 태그 필드에 추가되는 문자열입니다. 태그는 별도의 리소스가 아니므로 별도로 만들 수 없습니다. 해당 문자열이 있는 모든 리소스에는 해당 태그가 있는 것으로 간주됩니다. 태그를 사용하여 특정 VM 인스턴스에 방화벽 규칙경로를 적용할 수 있습니다.

네트워크 태그를 만들 때 새 VM에 할당하거나 나중에 할당된 태그 집합을 수정할 수 있습니다. VM을 중지하지 않고도 네트워크 태그를 수정할 수 있습니다.

사양

인스턴스에 할당하는 네트워크 태그는 인스턴스의 모든 네트워크 인터페이스에 적용됩니다. 네트워크 태그는 인스턴스의 네트워크 인터페이스에 직접 연결된 VPC 네트워크에만 적용됩니다. 피어링된 네트워크는 별개의 네트워크로 유지되기 때문에 VPC 네트워크 피어링의 경우에도 같은 사항이 적용됩니다. 따라서 네트워크 태그는 인스턴스의 네트워크 인터페이스가 연결된 네트워크에서만 의미가 있습니다.

네트워크 태그는 소문자로 시작해야 하며 소문자, 숫자, 하이픈을 포함할 수 있습니다. 태그는 소문자 또는 숫자로 끝나야 합니다.

권한

이 페이지에서 설명하는 태스크에는 다음과 같은 IAM 역할이 필요합니다. 자세한 내용은 Compute Engine IAM 역할을 참조하세요.

태스크 필요한 역할
새 인스턴스 생성 시 인스턴스에 네트워크 태그 할당 프로젝트 소유자나 편집자 또는 인스턴스 관리자
기존 인스턴스의 네트워크 태그 추가 또는 삭제
방화벽 규칙 추가, 삭제 또는 수정 프로젝트 소유자나 편집자 또는 보안 관리자

한도

네트워크 태그에는 다음과 같은 한도가 적용됩니다.

한도 설명
VM당 최대 태그 수 64 VM의 모든 태그는 고유해야 합니다. VM당 최대 64개의 서로 다른 태그를 할당할 수 있습니다.
각 태그의 최대 문자 수 63
태그에 허용되는 문자 소문자, 숫자, 대시 추가 사항:
• 태그는 소문자로 시작해야 합니다.
•태그는 숫자 또는 소문자로 끝나야 합니다.

방화벽 규칙 및 경로

네트워크 태그를 사용하면 특정 인스턴스 또는 인스턴스 집합에 방화벽 규칙과 경로를 적용할 수 있습니다.

  • 대상 태그와 소스 태그를 사용하여 특정 인스턴스에 방화벽 규칙을 적용할 수 있습니다.

  • 태그를 사용하여 특정 인스턴스에 경로를 적용할 수 있습니다.

방화벽 규칙의 대상

Google Cloud의 모든 방화벽 규칙에는 적용할 인스턴스를 정의하는 대상이 있어야 합니다. 기본 대상은 네트워크의 모든 인스턴스이지만 대상 태그나 대상 서비스 계정을 사용하여 대상 인스턴스를 지정할 수도 있습니다.

대상 태그는 규칙이 적용되는 Google Cloud VM을 정의합니다. 규칙은 특정 VPC 네트워크에 적용됩니다. 네트워크 태그가 일치하는 VPC 네트워크에 연결된 인스턴스의 네트워크 인터페이스와 연결된 기본 내부 IP 주소에 적용됩니다.

인그레스 방화벽 규칙과 이그레스 방화벽 규칙 모두에 대상이 있습니다.

  • 인그레스 규칙은 VPC 네트워크로 들어오는 트래픽에 적용됩니다. 인그레스 규칙의 경우 대상은 Google Cloud의 대상 VM입니다.

  • 이그레스 규칙은 VPC 네트워크에서 나가는 트래픽에 적용됩니다. 이그레스 규칙의 경우 대상은 Google Cloud의 소스 VM입니다.

예를 들어 모든 소스에서 TCP 포트 80을 통해 들어오는 트래픽을 허용하는 인그레스 방화벽 규칙이 있다고 가정합니다. 규칙의 대상 태그는 http-server입니다. 이 규칙은 http-server 네트워크 태그가 있는 인스턴스에만 적용됩니다. 즉, 포트 80 에서 들어오는 트래픽은 해당 인스턴스에서 허용됩니다.

인그레스 방화벽 규칙에 대한 소스 필터

인그레스 방화벽 규칙을 만들 때는 소스를 지정해야 합니다. 내부 또는 외부 IP 주소 범위를 사용하거나 특정 인스턴스를 참조하여 소스를 정의할 수 있습니다. 인스턴스를 지정하려면 소스 태그나 소스 서비스 계정을 사용합니다.

VPC 네트워크에서 적용된 인그레스 방화벽 규칙의 소스 태그는 네트워크 태그가 일치하는 인스턴스의 VPC 네트워크에 연결된 네트워크 인터페이스와 연결된 기본 내부 IP 주소에서 들어오는 트래픽의 소스를 정의합니다.

IP 범위와 소스 태그의 조합을 사용하거나 IP 범위와 소스 서비스 계정의 조합을 사용할 수 있습니다. 동일한 규칙에서 네트워크 태그와 서비스 계정을 모두 사용할 수는 없습니다. 소스 태그와 서비스 계정에 대한 자세한 내용은 서비스 계정별 및 네트워크 태그별 필터링을 참조하세요.

고려사항

소스 태그에 인그레스 방화벽 규칙을 사용하면 적용이 지연될 수 있습니다. 일반적으로 이러한 지연은 몇 초 정도 걸리지만, 드물게 몇 분이 걸릴 수 있습니다. 다음과 같이 변경 시 인그레스 방화벽 규칙이 연결된 인스턴스에 적용되거나 삭제되는 데 시간이 걸릴 수 있습니다.

  • 규칙의 소스 태그와 연결된 태그가 있는 인스턴스 시작 또는 중지
  • 규칙의 대상 태그와 연결된 태그가 있는 인스턴스 시작
  • 태그가 규칙의 소스 또는 대상 필드에 사용된 경우 인스턴스에서 태그 추가 또는 삭제
  • 규칙에서 소스 또는 대상 태그 추가 또는 삭제

적용 지연은 소스 태그를 사용하는 인그레스 규칙에만 적용됩니다. 다른 모든 방화벽 규칙은 인스턴스에 즉시 적용됩니다. 예를 들어 소스 IP 주소 범위와 대상 태그를 사용하는 인그레스 규칙에는 적용 지연이 없습니다.

경로와의 상호작용

경로를 만들 때 경로가 네트워크 태그가 일치하는 인스턴스의 VPC 네트워크에 연결된 네트워크 인터페이스의 기본 내부 IP 주소에서 전송된 트래픽에만 적용되도록 VPC 네트워크를 지정하고 태그를 지정할 수 있습니다.

태그 추가 및 삭제

VM 인스턴스를 만들 때 네트워크 태그를 지정할 수 있습니다. 기존 VM에 태그를 추가하거나 기존 VM에서 태그를 삭제할 수도 있습니다.

VM을 만들 때 태그 추가

Console

  1. VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스 만들기를 클릭합니다.
  3. 관리, 보안, 디스크, 네트워킹, 단독 테넌시를 클릭하여 해당 섹션을 엽니다.
  4. 네트워킹 탭을 클릭합니다.
  5. 네트워크 태그 필드에서 하나 이상의 태그를 쉼표로 구분하여 지정합니다.
  6. VM의 다른 필드를 채웁니다.
  7. 만들기를 클릭합니다.

gcloud

새 태그를 인스턴스에 할당하려면 다음 gcloud 명령어를 사용합니다. [INSTANCE-NAME]은 인스턴스의 이름으로, [ZONE]은 해당 영역으로, [TAGS]는 쉼표로 구분된 문자열 목록으로 바꿉니다.

gcloud compute instances create [INSTANCE-NAME] \
    --zone [ZONE] \
    --tags [TAGS] \
    ...other parameters as needed.

자세한 내용은 gcloud 문서를 참조하세요.

기존 VM에 태그 추가

Console

  1. VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스 이름을 클릭합니다.
  3. VM 인스턴스 세부정보 페이지에서 수정을 클릭합니다.
  4. 네트워크 태그 섹션에서 하나 이상의 태그를 쉼표로 구분하여 지정합니다.
  5. 저장을 클릭합니다.

gcloud

새 태그를 인스턴스에 할당하려면 다음 gcloud 명령어를 사용합니다. [INSTANCE-NAME]은 인스턴스의 이름으로, [ZONE]은 해당 영역으로, [TAGS]는 쉼표로 구분된 문자열 목록으로 바꿉니다.

gcloud compute instances add-tags [INSTANCE-NAME] \
    --zone [ZONE] \
    --tags [TAGS]

자세한 내용은 gcloud 문서를 참조하세요.

태그 삭제

Console

  1. VM 인스턴스 페이지로 이동합니다.
    VM 인스턴스 페이지로 이동
  2. 인스턴스 이름을 클릭합니다.
  3. VM 인스턴스 세부정보 페이지에서 수정을 클릭합니다.
  4. 네트워크 태그 섹션에서 삭제(X)를 클릭하여 태그를 삭제합니다.
  5. 저장을 클릭합니다.

gcloud

태그를 인스턴스에서 삭제하려면 다음 gcloud 명령어를 사용합니다. [INSTANCE-NAME]은 인스턴스의 이름으로, [ZONE]은 해당 영역으로, [TAGS]는 삭제할 태그의 목록을 쉼표로 구분한 목록으로 변경합니다.

gcloud compute instances remove-tags [INSTANCE-NAME] \
    --zone [ZONE] \
    --tags [TAGS]

자세한 내용은 gcloud 문서를 참조하세요.

직접 API 요청

직접 API 요청으로 인스턴스와 연결된 네트워크 태그를 설정할 수 있습니다. Cloud Console이나 gcloud 명령어를 사용하는 경우와는 달리 직접 API 요청으로 태그를 업데이트할 때는 기존 태그가 유지되지 않습니다. 따라서 이 방법으로 태그를 업데이트할 때는 항상 인스턴스와 연결해야 하는 태그의 전체 집합을 지정해야 합니다.

직접 API 요청을 사용하여 태그를 업데이트하는 방법은 다음과 같습니다.

  1. 태그와 연결된 최신 디지털 지문을 확인합니다. 디지털 지문은 동시에 실행되는 다른 API 요청과의 충돌을 방지하는 데 사용됩니다. 인스턴스의 네트워크 태그를 업데이트하는 과정은 인스턴스 메타데이터를 업데이트하는 과정과 비슷합니다.

    인스턴스에 대한 GET 요청을 수행합니다. 예를 들면 다음과 같습니다.

    GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance
    

    응답에서 tags.fingerprint 속성을 찾습니다.

    200 OK
    {
    ...
    "tags": {
     "items": [
     "http-server",
     "db-client"
     ],
     "fingerprint": "MW8EqhxILtc="
    },
    ...
    }
    

    다음 예시와 같이 gcloud 명령어를 사용하여 fingerprint를 가져올 수도 있습니다.

    gcloud compute instances describe [INSTANCE-NAME] \
       --zone [ZONE] \
       --format="get(tags.fingerprint)"
  2. instance().setTags 메서드에 POST 요청을 전송합니다. 요청 본문에는 fingerprint 값과 함께 인스턴스에 연결해야 하는 모든 태그가 포함되어야 합니다.

    요청 예시:

    POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance/setTags
    {
     "items": [
      "http-server",
      "db-client",
      "allow-internet-access"
      ],
     "fingerprint": "MW8EqhxILtc="
    }
    

    응답 예시:

    200 OK
    {
          "kind": "compute#operation",
          "id": "9251830049681941507",
          "name": "operation-1442414898862-51fde63aa57b1-422323e0-c439fb04",
          "zone": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f",
          "operationType": "setTags",
          "targetLink": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/example-instance",
          "targetId": "4392196237934605253",
          "status": "PENDING",
          "user": "user@example.com",
          "progress": 0,
    ...
    }
    

다음 단계