게스트 정책 만들기

게스트 정책을 사용하여 여러 VM 인스턴스에서 일관된 소프트웨어 구성을 유지합니다.

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

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

시작하기 전에

지원되는 운영체제

  • Debian 9 및 10
  • Ubuntu 16.04 및 18.04+
  • CentOS 6, 7, 8
  • Red Hat Enterprise Linux(RHEL) 6, 7, 8
  • Windows Server 2012R2, 2016, 2019, 반기 출시 버전 1803, 1809, 1903
  • SUSE Enterprise Linux Server(SLES) 12 및 15, openSUSE Leap 15

제한사항

  • 게스트 정책에 의해 타겟팅된 모든 인스턴스는 에이전트가 서비스에 체크인할 때마다 업데이트됩니다. 이 체크인은 10~15분마다 발생합니다.
  • 이 베타에는 규정 준수 대시 보드와 알림 서비스가 없습니다. OS 구성 에이전트를 실행하지 않는 VM은 실패를 보고하지 않습니다. 최상의 결과를 얻으려면 OS 인벤토리 관리 서비스 또는 기타 규정 준수 모니터링 도구와 함께 이 기능을 사용하세요.

권한

게스트 정책을 사용하여 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: 사용자의 G Suite 사용자 이름입니다.

VM 설정

OS 설정 관리 서비스를 사용하려면 OS Config 서비스 API를 설정하고 OS Config 에이전트를 설치해야 합니다. 자세한 안내는 OS 구성 설정을 참조하세요.

게스트 정책 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의 운영체제 정보는 기본적으로 사용할 수 없습니다. 운영체제 정보별로 그룹화하려면 게스트 속성 및 OS 인벤토리 관리 서비스가 사용 설정되어 있는지 확인해야 합니다. 이러한 서비스를 사용 설정하려면 VM 설정을 참조하세요.

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

필수 구성

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

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

게스트 정책 YAML 파일 예시

예시 1

VM 인스턴스 my-instance-1my-instance-2에서 최신 상태로 유지해야 하는 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 표현 참조 문서를 참조하세요.

게스트 정책 만들기

gcloud 명령줄 도구 또는 Cloud OS Config API를 사용하여 게스트 정책을 만들 수 있습니다.

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

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

gcloud 명령줄 도구 및 Cloud OS Config API에서 게스트 정책의 이름을 policy-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 파일 예시를 참조하세요.

API

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 파일 예시를 참조하세요.

다음 단계