게스트 정책 만들기(기존)


게스트 정책을 사용하여 Linux 및 Windows 가상 머신(VM) 인스턴스에서 일관된 소프트웨어 구성을 유지합니다.

VM 집합에 게스트 정책을 설정하려면 다음 단계를 완료하세요.

  1. 사용자에게 필요한 권한을 할당합니다.
  2. VM을 설정합니다.
  3. 게스트 정책 JSON 또는 YAML 파일을 구성합니다.
  4. 게스트 정책을 만듭니다.

시작하기 전에

  • OS 구성 할당량을 검토합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    gcloud

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

      gcloud init
    2. Set a default region and zone.
    3. REST

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

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

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

제한사항

  • 대상 VM의 경우 에이전트가 서비스에 체크인할 때마다 게스트 정책이 업데이트됩니다. 이 체크인은 10~15분마다 발생합니다.
  • 이러한 기존 OS 게스트 정책에는 규정 준수 대시 보드, 통지 또는 알림 서비스가 없습니다. OS 구성 에이전트를 실행하지 않는 VM은 실패를 보고하지 않습니다. 최상의 결과를 얻으려면 OS 인벤토리 관리 서비스 또는 기타 규정 준수 모니터링 도구와 함께 이 기능을 사용하세요.
  • 특정 이름의 소프트웨어 레시피는 게스트 정책을 만들 때 한 번만 실행됩니다. 소프트웨어 레시피를 다시 실행하려면 다음을 수행해야 합니다.

    1. 소프트웨어 레시피 이름을 바꿉니다.
    2. 게스트 정책을 삭제하고 이름이 변경된 소프트웨어 레시피를 사용하여 다시 만듭니다.

권한

게스트 정책을 사용하여 VM에 소프트웨어 패키지를 설치하고 관리할 수 있으므로 게스트 정책을 만들고 관리하는 것은 VM에 대한 원격 코드 실행 액세스 권한을 부여하는 것과 같습니다.

게스트 정책을 설정할 때 IAM 권한은 정책 리소스에 대한 액세스를 제어하는 데 사용되며 활동은 감사 로깅됩니다. 하지만 사용자는 여전히 VM에서 코드를 실행할 수 있으므로 이로 인한 잠재적인 보안 위험이 존재합니다. 이 문제를 완화하려면 각 사용자에게 필요한 액세스 권한만 제공하는 것이 좋습니다.

프로젝트 소유자는 정책을 만들고 관리할 수 있는 전체 액세스 권한을 갖습니다. 다른 모든 사용자에게는 권한 부여가 필요합니다. 다음 세분화된 역할 중 하나를 부여할 수 있습니다.

  • GuestPolicy 관리자(roles/osconfig.guestPolicyAdmin): 게스트 정책 생성, 삭제, 업데이트, 가져오기, 나열 권한이 포함됩니다.
  • GuestPolicy 편집자(roles/osconfig.guestPolicyEditor): 게스트 정책 가져오기, 업데이트, 나열 권한이 포함됩니다.
  • GuestPolicy 뷰어(roles/osconfig.guestPolicyViewer): 게스트 정책을 가져오고 나열하기 위한 읽기 전용 액세스 권한이 포함됩니다.

예를 들어 게스트 정책에 대한 사용자 관리자 액세스 권한을 부여하려면 다음 명령어를 실행합니다.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:USER_ID@gmail.com \
    --role roles/osconfig.guestPolicyAdmin

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • USER_ID: 사용자의 Google Workspace 사용자 이름입니다.

VM 설정

게스트 정책을 사용하려면 VM Manager를 설정해야 합니다.

게스트 정책 yaml 또는 JSON 파일 구성

JSON 또는 YAML 파일을 사용하여 게스트 정책 사양을 제공해야 합니다. 샘플 구성을 보려면 게스트 정책 YAML 파일 예시를 참조하세요.

YAML 또는 JSON 파일에는 다음 두 가지 기본 섹션이 있습니다.

할당

프로젝트의 모든 VM에 게스트 정책을 할당하거나 JSON 또는 YAML 파일의 assignment 키를 사용하여 특정 VM 그룹을 타겟팅할 수 있습니다.

예를 들어 다음 특성 중 하나를 사용하여 VM 그룹을 타겟팅할 수 있습니다.

  • 인스턴스 이름. 예시 1을 참조하세요.
  • 인스턴스 이름 프리픽스. 예시 2를 참조하세요.
  • 인스턴스 라벨. 예시 3을 참조하세요.
  • 영역. 예시 4를 참조하세요.
  • OS 이름, 버전, 아키텍처가 포함 된 운영체제 정보. 예시 5를 참조하세요. os-invenory describe 명령어를 사용하여 VM의 OS 이름, 버전, 아키텍처를 확인할 수 있습니다.

운영체제 정보를 사용하여 게스트 정책을 할당하려면 OS 구성 에이전트가 VM의 게스트 속성 엔드포인트로 운영체제 정보를 보내야 합니다. 개인정보 보호를 위해 VM의 운영체제 정보는 기본적으로 사용할 수 없습니다. 운영체제 정보별로 VM을 그룹화하려면 게스트 속성 및 OS 인벤토리 관리 서비스가 사용 설정되어 있는지 확인해야 합니다. 이러한 서비스를 사용 설정하려면 VM 설정을 참조하세요.

게스트 정책 구성은 할당과 일치하는 모든 새 VM에 자동으로 적용됩니다.

필수 구성

필수 구성은 다음 작업 중 하나 또는 조합을 사용하여 수행할 수 있습니다.

  • 소프트웨어 패키지를 설치, 삭제, 자동 업데이트합니다. 예시 1을 참조하세요.
  • 소프트웨어 패키지 저장소를 구성합니다. 예시 1 또는 예시 3을 참조하세요.
  • 소프트웨어 레시피를 사용하여 소프트웨어를 설치합니다.

게스트 정책 YAML 파일 예시

예시 1

my-instance-1my-instance-2 VM 인스턴스에서 최신 상태로 유지되어야 하는 my-package 패키지를 설치합니다.

assignment:
  instances:
  - zones/us-east1-c/instances/my-instance-1
  - zones/us-east1-c/instances/my-instance-2
packages:
- name: "my-package"
  desiredState: UPDATED

패키지의 게스트 정책을 할당하는 방법에 대한 자세한 내용은 패키지 JSON 표현 참조 문서를 확인하세요.

예시 2

test-instance- 또는 dev-instance- 인스턴스 이름 프리픽스 중 하나가 있는 모든 VM 인스턴스에 yum 패키지 관리자를 사용하여 Cloud Monitoring 에이전트를 설치합니다.

assignment:
  instanceNamePrefixes:
  - "test-instance-"
  - "dev-instance-"
packages:
- name: "stackdriver-agent"
  desiredState: INSTALLED
  manager: YUM
packageRepositories:
- yum:
    id: google-cloud-monitoring
    displayName: "Google Cloud Monitoring Agent Repository"
    baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el7-x86_64-all
    gpgKeys:
    - https://packages.cloud.google.com/yum/doc/yum-key.gpg
    - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

패키지 저장소의 게스트 정책 할당에 대한 자세한 내용은 PackageRepository JSON 표현 참조 문서를 확인하세요.

예시 3

my-package를 설치하고 bad-package-1bad-package-2를 특정 라벨 집합이 있는 인스턴스에서 삭제합니다. 또한 apt 및 ym 패키지 관리자를 위한 저장소를 추가합니다.

assignment:
  # Assign to VM instances where `(label.color=red AND label.env=test) OR (label.color=blue AND label.env=test)`
  groupLabels:
  - labels:
      color: red
      env: test
  - labels:
      color: blue
      env: test
packages:
- name: "my-package"
  desiredState: INSTALLED
- name: "bad-package-1"
  desiredState: REMOVED
- name: "bad-package-2"
  desiredState: REMOVED
  manager: APT  # Only apply this to systems with APT.
packageRepositories:
- apt:  # Only apply this to systems with APT.
    uri: "https://packages.cloud.google.com/apt"
    archiveType: DEB
    distribution: cloud-sdk-stretch
    components:
    - main
- yum:  # Only apply this to systems with YUM.
    id: google-cloud-sdk
    displayName: "Google Cloud SDK"
    baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64
    gpgKeys:
    - https://packages.cloud.google.com/yum/doc/yum-key.gpg
    - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  • 패키지의 게스트 정책을 할당하는 방법에 대한 자세한 내용은 패키지 JSON 표현 참조 문서를 확인하세요.
  • 패키지 저장소의 게스트 정책 할당에 대한 자세한 내용은 PackageRepository JSON 표현 참조 문서를 확인하세요.

예시 4

Cloud Storage에 호스팅된 MSI의 소프트웨어를 us-east1-bus-east1-d의 모든 인스턴스에 설치합니다.

assignment:
  zones:
  - us-east1-b
  - us-east1-d
recipes:
- name: "swr-msi-gcs"
  desiredState: INSTALLED
  artifacts:
  - id: "the-msi"
    gcs:
      bucket: "my-bucket"
      object: "executable.msi"  # full URI gs://my-bucket/executable.msi#nnnnn
      generation: 1546030865175603
  installSteps:
  - msiInstallation:
      artifactId: "the-msi"

레시피 정책 구성에 대한 자세한 내용은 SoftwareRecipe JSON 표현 참조 문서를 확인하세요.

예시 5

다음 요구사항을 충족하는 모든 VM 인스턴스에 인라인 스크립트를 실행하여 소프트웨어를 설치합니다.

  • 운영체제: Red Hat Enterprise Linux 7
  • 라벨: color=red
assignment:
  osTypes:
  - osShortName: rhel
    osVersion: "7"
  groupLabels:
  - labels:
      color: red
recipes:
- name: recipe-runscript
  desiredState: INSTALLED
  installSteps:
  - scriptRun:
      script: |-
        #!/bin/bash
        touch /TOUCH_FILE

레시피 정책 구성에 대한 자세한 내용은 SoftwareRecipe JSON 표현 참조 문서를 확인하세요.

예시 6

인스턴스 이름 프리픽스가 test-instance-인 실행 설치 프로그램을 사용하여 모든 Windows 인스턴스에 애플리케이션을 설치합니다.

assignment:
  instanceNamePrefixes:
  - "test-instance-"
  osTypes:
  - osShortName: WINDOWS
recipes:
- name: windows-install-exe-example
  desiredState: INSTALLED
  artifacts:
  - id: installer
    gcs:
      bucket: my-bucket
      generation: '1597013478912389'
      object: MyApp.Installer.x64.exe
  installSteps:
  - fileExec:
      artifactId: installer
      args:
      - /S # Installation must be silent

레시피 정책 구성에 대한 자세한 내용은 SoftwareRecipe JSON 표현 참조 문서를 확인하세요.

게스트 정책 만들기

게스트 정책을 만들 때 게스트 정책의 이름은 다음과 같은 이름 지정 요구사항을 충족해야 합니다.

  • 소문자, 숫자, 하이픈만 포함합니다.
  • 문자로 시작합니다.
  • 숫자 또는 문자로 끝납니다.
  • 1~63자(영문 기준)
  • 각 정책 ID는 프로젝트 내에서 고유해야 합니다.

다음 방법 중 하나를 사용하여 게스트 정책을 만듭니다.

gcloud

os-config guest-policies create 명령어를 사용하여 게스트 정책을 만듭니다.

gcloud beta compute os-config guest-policies create POLICY_ID \
    --file=FILE

다음을 바꿉니다.

  • POLICY_ID: 만들려는 게스트 정책의 이름입니다.
  • FILE: 게스트 정책 사양이 포함된 JSON 또는 YAML 파일입니다. 샘플 구성을 보려면 게스트 정책 YAML 파일 예시를 참조하세요.

REST

API에서 projects.guestPolicies.create 메서드에 대한 POST 요청을 만듭니다.

POST https://osconfig.googleapis.com/v1beta/projects/PROJECT_ID/guestPolicies?guestPolicyId=POLICY_ID

{
 For more information, see Guest policy JSON
}

다음을 바꿉니다.

  • PROJECT_ID: 프로젝트 ID입니다.
  • POLICY_ID: 게스트 정책의 이름입니다.

샘플 구성을 보려면 게스트 정책 YAML 파일 예시를 참조하세요.

문제 해결

게스트 정책 문제를 해결하려면 게스트 정책 디버깅을 참조하세요.

다음 단계