VM 메타데이터 정보


가상 머신(VM) 인스턴스는 메타데이터 서버에 메타데이터를 저장합니다. VM은 추가 승인 없이 메타데이터 서버 API에 자동으로 액세스할 수 있습니다. Compute Engine은 디렉터리에서 VM 및 프로젝트의 메타데이터 키와 값을 유지보수합니다. 각 디렉터리에는 키-값 쌍 형식으로 메타데이터 항목이 저장됩니다. 일부 디렉터리에는 하위 디렉터리가 포함됩니다.

이 문서에서는 VM 메타데이터에 대한 개요를 제공하고 VM 메타데이터의 유형 및 속성에 대해 설명합니다.

VM 메타데이터 사용

다음 섹션에서는 메타데이터 항목을 사용하여 VM을 관리할 수 있는 몇 가지 시나리오에 대해 설명합니다.

시작 및 종료 스크립트

특히 메타데이터 서버를 시작 및 종료 스크립트와 함께 사용하면 유용합니다. 메타데이터 서버를 프로그래매틱 방식으로 사용하여 추가 승인 없이 인스턴스에 대한 고유한 정보를 가져올 수 있기 때문입니다.

예를 들어 VM의 외부 IP에 대한 메타데이터 키-값 쌍을 가져오는 시작 스크립트를 작성하고 스크립트에서 IP를 사용하여 데이터베이스를 설정할 수 있습니다. Compute Engine 사전 정의된 메타데이터 키는 모든 VM에서 동일하므로 각 VM에 대해 키를 업데이트할 필요 없이 스크립트를 재사용할 수 있습니다. 따라서 덜 불안정한 애플리케이션 코드를 작성할 수 있습니다.

호스트 유지보수

메타데이터 서버는 maintenance-event 키를 사용하여 scheduling/ 메타데이터 디렉터리에 있는 VM의 예약 옵션에 대한 정보를 제공합니다. 이러한 메타데이터 값을 사용하여 유지보수 이벤트가 발생하려고 할 때 해당 이벤트에 대해 환경을 준비할 수 있도록 알림을 받을 수 있습니다. 자세한 내용은 라이브 마이그레이션 알림 받기를 참조하세요.

게스트 속성

게스트 속성은 애플리케이션이 VM에서 실행되는 동안 쓸 수 있는 특정 유형의 커스텀 메타데이터입니다. 게스트 속성은 자주 변경되지 않는 소량의 데이터가 필요한 경우에만 사용합니다. 게스트 속성에 대한 자세한 내용은 게스트 속성 설정 및 쿼리를 참조하세요.

파트너 속성

파트너 속성은 특정 유형의 인스턴스 메타데이터입니다. Google Cloud 서비스는 파트너 속성을 사용하여 네임스페이스를 만들어 여기에 인스턴스 메타데이터 항목을 정의합니다. 인스턴스 메타데이터 항목의 값을 설정, 업데이트, 삭제, 확인하여 해당 서비스를 구성할 수 있습니다.

예를 들어 Compute Engine에 관리형 워크로드 ID를 사용하는 경우 서비스 네임스페이스의 메타데이터 항목에서 구성 세부정보를 지정할 수 있습니다.

메타데이터 보안 고려사항

메타데이터 서버에서 정보를 가져오도록 요청할 경우 요청과 이후의 메타데이터 응답은 VM을 실행하는 물리적 호스트에 그대로 있습니다.

하지만 메타데이터 URL을 쿼리할 수 있는 모든 프로세스에서 메타데이터 서버의 모든 값에 액세스할 수 있습니다. 여기에는 서버에 작성하는 모든 커스텀 메타데이터 값, 클라이언트 인증서, 비공개 키가 포함됩니다. 메타데이터 서버에 민감한 값을 쓰거나 타사 프로세스를 실행할 때 주의하는 것이 좋습니다. 메타데이터 서버에 액세스할 수 없는 프로세스 모두 샌드박스 처리해야 합니다.

메타데이터 서버 엔드포인트

다음 엔드포인트에서 메타데이터 서버에 액세스할 수 있습니다.

  • http 엔드포인트: http://metadata.google.internal/computeMetadata/v1. 보안 VM을 포함한 모든 VM에서 액세스할 수 있습니다.
  • https 엔드포인트: https://metadata.google.internal/computeMetadata/v1. 보안 VM에서만 액세스할 수 있습니다.

HTTPS 메타데이터 서버 엔드포인트

HTTPS 메타데이터 서버 엔드포인트(https://metadata.google.internal/computeMetadata/v1)는 메타데이터 서버와 VM 간의 정보 전송 보안을 강화합니다. 보안 VM에서만 이 엔드포인트를 사용할 수 있습니다.

HTTPS 메타데이터 서버 엔드포인트 사용 시 이점

https 엔드포인트를 사용하여 메타데이터 서버를 쿼리하면 다음과 같은 이점이 있습니다.

  • 보안 개선: 민감한 메타데이터에 대한 무단 액세스를 방지하는 데 도움이 됩니다. 이를 통해 공격자가 다음 작업을 수행하지 못하도록 합니다.

    • 메타데이터 서버를 스푸핑하거나 명의 도용하여 VM에 액세스
    • 민감한 메타데이터가 VM에 도달하기 전에 이를 보거나 조작
  • 비용 절감: 보안 침해와 관련된 비용을 방지할 수 있습니다.

절차 진행 방식

게스트 환경이 설치된 보안 VM의 경우 VM에서 다음 프로세스가 실행됩니다.

  1. VM이 부팅되면 Compute Engine에서 다음을 완료합니다.

    1. Compute Engine에서 다음과 같이 세 가지 인증서를 만듭니다.

      • 자체 서명 루트 인증서: VM용으로 생성된 고유한 인증서입니다.
      • 서버 ID 인증서: 메타데이터 서버 인증서입니다.
      • 클라이언트 ID 인증서: 클라이언트 인증서입니다. 이 인증서는 메타데이터 서버에 캐시되지 않으며 게스트 환경에서 클라이언트 인증서 엔드포인트를 호출할 때마다 다시 생성됩니다.

        클라이언트 ID 및 루트 인증서 스토리지 위치는 인증서 저장 위치를 참조하세요.

    2. Compute Engine은 Google에서 생성한 UEFI 변수를 사용하여 루트 인증서 공개 부분을 VM의 게스트 환경으로 전송합니다. 그러면 이 루트 인증서가 VM에 저장됩니다.

  2. 게스트 환경은 주기적으로 클라이언트 ID 인증서를 요청합니다. 이 경우 게스트 에이전트는 메타데이터 서버에서 이 인증서를 다운로드하고 해당 VM의 루트 인증서를 사용하여 유효성을 검사합니다.

HTTPS 메타데이터 서버 엔드포인트를 쿼리하면 메타데이터 서버와 VM에서 이 쿼리가 승인되었는지 확인하는 데 사용하는 클라이언트 ID 인증서를 지정합니다.

인증서 저장 위치

다음 섹션에는 Compute Engine에서 생성된 루트 및 클라이언트 ID 인증서 스토리지 위치가 나와 있습니다.

루트 인증서

CentOS/RHEL/Rocky

CentOS, Red Hat Enterprise Linux(RHEL), Rocky Linux VM의 루트 인증서는 다음 위치에 저장됩니다.

  • /run/google-mds-mtls/root.crt
  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Debian/Ubuntu

Debian 및 Ubuntu VM의 루트 인증서는 다음 위치에 저장됩니다.

  • /run/google-mds-mtls/root.crt
  • /etc/ssl/certs/ca-certificates.crt

Fedora

Fedora VM의 루트 인증서는 다음 위치에 저장됩니다.

  • /run/google-mds-mtls/root.crt
  • /etc/pki/tls/certs/ca-bundle.crt

SLES

SUSE Linux Enterprise Server(SLES) VM의 루트 인증서는 다음 위치에 저장됩니다.

  • /run/google-mds-mtls/root.crt
  • /etc/ssl/ca-bundle.pem

Windows

Windows VM의 루트 인증서는 다음 위치에 저장됩니다.

  • C:\ProgramData\Google\ComputeEngine\mds-mtls-root.crt
  • Cert:\LocalMachine\Root
클라이언트 ID 인증서

클라이언트 ID 인증서는 VM에서 실행 중인 모든 프로세스에 액세스할 수 있습니다. 이는 모든 프로세스가 http 엔드포인트와 마찬가지로 https 엔드포인트를 사용하여 메타데이터 서버에 액세스할 수 있도록 하기 위해 필요합니다. 자세한 내용은 메타데이터 보안 고려사항을 참조하세요.

Linux

Linux VM의 클라이언트 ID 인증서는 다음 위치에 저장됩니다.

/run/google-mds-mtls/client.key

Windows

Windows VM의 클라이언트 ID 인증서는 다음 위치에 저장됩니다.

  • C:\ProgramData\Google\ComputeEngine\mds-mtls-client.key
  • Cert:\LocalMachine\My

사전 정의 및 커스텀 메타데이터 키

각 메타데이터 항목은 메타데이터 서버에 키-값 쌍으로 저장됩니다. 메타데이터 키는 대소문자를 구분합니다. 키는 사전 정의된 또는 커스텀 메타데이터 키일 수 있습니다.

사전 정의된 메타데이터 키

사전 정의된 메타데이터 키는 Compute Engine에서 생성된 메타데이터 키입니다. VM을 만들면 Compute Engine이 VM 인스턴스 ID 또는 프로젝트 ID와 같이 해당 VM에서 이러한 일부 키에 대해 메타데이터 값을 자동으로 설정합니다. Compute Engine이 값을 자동으로 설정하지 않는 사전 정의된 키의 경우 시스템 구성에 따라 제공되는 값 집합 중에서 선택할 수 있습니다. 예를 들어 특정 VM에 대해 OS 로그인을 사용 설정하려면 enable-oslogin 사전 정의된 키의 값을 해당 VM에 대해 TRUE로 설정하면 됩니다. 해당 VM에 대해 OS 로그인을 사용 중지하려면 키 값을 FALSE로 설정하면 됩니다.이러한 키의 값만 업데이트할 수 있고 키 자체는 업데이트할 수 없습니다.

사전 정의된 메타데이터 키 관련 정보와 이러한 키 목록은 사전 정의된 메타데이터 키를 참조하세요.

커스텀 메타데이터 키

커스텀 메타데이터를 사용하면 개별 VM 또는 프로젝트에서 자체 메타데이터 키-값 쌍을 만들고 사용할 수 있습니다. 새 커스텀 메타데이터 키를 추가하고 기존 키의 값을 업데이트하고 필요하지 않은 커스텀 메타데이터 항목을 삭제할 수 있습니다. 커스텀 메타데이터 설정은 프로젝트에서 VM에 임의의 값을 전달하는 데 유용합니다. 또한 시작종료 스크립트를 만드는 데에도 유용합니다.

VM에 대해 커스텀 메타데이터를 추가, 업데이트, 삭제하는 방법은 커스텀 메타데이터 구성을 참조하세요.

메타데이터 유형

VM 메타데이터 항목은 개별 VM 또는 프로젝트와 관련된 정보를 제공할 수 있습니다. 메타데이터는 메타데이터를 설정한 범위에 따라 프로젝트, 영역, 인스턴스 메타데이터로 구분됩니다.

프로젝트 메타데이터

프로젝트 메타데이터는 프로젝트 범위에서 정의되며 프로젝트의 모든 VM에 적용되는 정보를 제공합니다. 이 메타데이터를 설정하면 메타데이터 항목이 해당 프로젝트의 모든 VM에 전파됩니다.

사전 정의 및 커스텀 메타데이터 키를 둘 다 사용하여 프로젝트 메타데이터를 설정할 수 있습니다. 사전 정의된 프로젝트 메타데이터 키커스텀 프로젝트 전역 메타데이터 설정 방법을 자세히 알아보세요.

영역별 메타데이터

영역 메타데이터는 프로젝트 내의 영역 범위에 정의되며 해당 프로젝트의 특정 영역에 있는 VM에 대한 정보를 제공합니다. 영역 메타데이터를 설정하면 메타데이터 항목이 해당 프로젝트의 구성된 영역에 있는 모든 VM에 전파됩니다. 프로젝트 메타데이터와 비교할 때 영역 메타데이터는 결함 격리에 도움이 되고 우수한 신뢰성을 제공합니다.

Compute Engine은 영역 메타데이터에 사전 정의된 키를 제공하지 않습니다. 영역 메타데이터를 설정하려면 자체 커스텀 메타데이터 키를 만들어야 합니다. 커스텀 영역 메타데이터 설정 방법을 자세히 알아보세요.

인스턴스 메타데이터

인스턴스 메타데이터는 특정 VM 인스턴스에 대한 정보를 제공합니다. 각 VM 인스턴스에 대해 인스턴스 메타데이터를 개별적으로 설정합니다.

사전 정의 및 커스텀 메타데이터 키를 모두 사용해서 인스턴스 메타데이터를 설정할 수 있습니다. 사전 정의된 인스턴스 메타데이터 키 및 커스텀 인스턴스 메타데이터 설정 방법에 대해 자세히 알아보세요.

메타데이터 정렬 방법

Compute Engine은 VM 및 프로젝트에 대한 메타데이터 키와 값을 디렉터리 목록으로 저장하고 유지보수합니다. 메타데이터 유형에 따라 Compute Engine은 다음 디렉터리 중 하나에 메타데이터 항목을 저장합니다.

메타데이터 유형 디렉터리
프로젝트 전체 및 프로젝트 영역 메타데이터
  • http 엔드포인트:
    http://metadata.google.internal/computeMetadata/v1/project
  • https 엔드포인트(미리보기):
    https://metadata.google.internal/computeMetadata/v1/project
인스턴스 메타데이터
  • http 엔드포인트:
    http://metadata.google.internal/computeMetadata/v1/instance
  • https 엔드포인트:
    https://metadata.google.internal/computeMetadata/v1/instance

각 디렉터리에는 키-값 쌍의 형식으로 메타데이터 항목이 저장됩니다. 또한 일부 메타데이터 항목은 다른 메타데이터 키가 있는 디렉터리입니다. 디렉터리로 작동하는 메타데이터 항목은 메타데이터 키 이름에서 후행 슬래시(/)로 표시됩니다. 예를 들어 /project/attributes/는 다른 메타데이터 키가 포함된 project/ 디렉터리 아래의 디렉터리입니다. 자체 메타데이터 디렉터리 목록을 만들려면 커스텀 메타데이터 항목을 만들 때 메타데이터 키 이름에 후행 슬래시(/)를 사용해야 합니다.

프로젝트 및 영역 메타데이터 항목은 같은 project/ 디렉터리에 저장됩니다. 프로젝트 수준과 영역 수준에서 VM의 동일한 커스텀 메타데이터 키에 서로 다른 값을 설정하면 이러한 키의 영역 메타데이터 값이 해당 영역에 있는 프로젝트 메타데이터 값보다 우선 적용됩니다.

  • 이미 프로젝트 메타데이터 값이 있는 메타데이터 키에 영역 메타데이터 값을 추가하면 Compute Engine에서 지정된 영역에 있는 VM의 프로젝트 메타데이터 값을 재정의하고 /project 디렉터리를 영역 값으로 업데이트합니다.
  • 이미 영역 메타데이터 값이 있는 메타데이터 키에 새로운 프로젝트 전체 메타데이터 값을 추가하면 아무 것도 변경되지 않습니다. Compute Engine은 특정 영역의 /project 디렉터리에 영역 메타데이터 값을 보관합니다.
  • 특정 영역의 커스텀 메타데이터 키에 영역 메타데이터 값을 지정하지 않았지만 키에 프로젝트 메타데이터 값이 있으면 VM에 해당 영역의 프로젝트 메타데이터 값이 계속 포함됩니다.

예를 들어 key-1=value-1의 프로젝트 전역 메타데이터 쌍을 정의한다고 가정해 보세요. 또한 us-central1-a 영역에 대해서만 key-1=zonal-value-1의 영역 메타데이터 쌍을 정의한다고 가정해 보세요. 프로젝트의 us-central1-a 영역에 있는 모든 VM에 key-1=zonal-value1이 메타데이터 쌍으로 상속됩니다. 메타데이터 쌍은 key-1에 영역 메타데이터를 설정하지 않은 다른 영역의 모든 VM에 대한 key-1=value-1을 유지됩니다.

다음 단계