네트워크 태그 구성

네트워크 태그는 Compute Engine 가상 머신(VM) 인스턴스에 추가할 수 있는 텍스트 속성입니다. 태그를 사용하여 특정 VM 인스턴스에 방화벽 규칙경로를 적용할 수 있습니다.

VM 인스턴스나 인스턴스 템플릿에만 네트워크 태그를 추가할 수 있습니다. 다른 GCP 리소스에는 태그를 지정할 수 없습니다. 새 인스턴스를 만들 때 인스턴스에 네트워크 태그를 할당할 수도 있으며, 이후 언제든지 할당된 태그를 수정할 수도 있습니다. 인스턴스를 중지하지 않고도 네트워크 태그를 수정할 수 있습니다.

사양

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

권한

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

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

한도

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

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

방화벽 규칙 및 경로

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

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

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

방화벽 규칙의 대상

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

대상 태그는 규칙이 적용되는 GCP VM을 정의합니다. 네트워크 태그가 일치하는 인스턴스의 기본 내부 IP 주소에 규칙이 적용됩니다.

수신 방화벽 규칙과 송신 방화벽 규칙 모두에 대상이 있습니다.

  • 수신 규칙은 VPC 네트워크로 들어오는 트래픽에 적용됩니다. 수신 규칙의 대상은 GCP의 대상 VM입니다.

  • 송신 규칙은 VPC 네트워크에서 나가는 트래픽에 적용됩니다. 송신 규칙의 대상은 GCP의 소스 VM입니다.

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

수신 방화벽 규칙에 대한 소스 필터

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

수신 방화벽 규칙의 소스 태그는 네트워크 태그가 일치하는 인스턴스의 기본 내부 IP 주소에서 들어오는 트래픽의 소스를 정의합니다.

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

경로와의 상호작용

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

태그 추가 및 삭제

태그 추가

콘솔

  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 문서를 참조하세요.

태그 삭제

콘솔

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

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

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

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

    GET https://www.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://www.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,
    ...
    }
    

다음 단계

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

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