OS 정책 할당 만들기


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

시작하기 전에

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

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

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

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    Terraform

    로컬 개발 환경에서 이 페이지의 Terraform 샘플을 사용하려면 gcloud CLI를 설치 및 초기화한 다음 사용자 인증 정보로 애플리케이션 기본 사용자 인증 정보를 설정하세요.

    1. Google Cloud CLI를 설치합니다.
    2. gcloud CLI를 초기화하려면 다음 명령어를 실행합니다.

      gcloud init
    3. Google 계정의 로컬 인증 사용자 인증 정보를 만듭니다.

      gcloud auth application-default login

    자세한 내용은 로컬 개발 환경의 인증 설정를 참조하세요.

    REST

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

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

      gcloud init

지원되는 운영체제

OS 정책을 지원하는 운영체제와 버전의 전체 목록은 운영체제 세부정보를 참조하세요.

권한

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

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

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

  • OSPolicyAssignment 관리자(roles/osconfig.osPolicyAssignmentAdmin): OS 정책 할당을 만들고, 삭제하고, 업데이트하고, 가져오고, 나열할 수 있는 권한이 포함됩니다.
  • OSPolicyAssignment 편집자(roles/osconfig.osPolicyAssignmentEditor): OS 정책 할당을 업데이트하고, 가져오고, 나열할 수 있는 권한이 포함됩니다.
  • OSPolicyAssignment 뷰어(roles/osconfig.osPolicyAssignmentViewer): OS 정책 할당을 가져오고 나열할 수 있는 읽기 전용 액세스 권한이 포함됩니다.

권한 설정 명령어 예시

OS 정책 할당을 위해 사용자에게 관리자 액세스 권한을 부여하려면 다음 명령어를 실행합니다.

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

다음을 바꿉니다.

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

OS 정책 할당 만들기

OS 정책 할당을 만들고 출시하려면 다음 단계를 완료하세요.

  1. VM Manager 설정
  2. 사용자에게 필요한 권한을 할당합니다.
  3. OS 정책 및 OS 정책 할당을 검토합니다.
  4. OS 정책 리소스를 만듭니다.
  5. OS 정책 할당을 만들고 출시하려면 다음 방법 중 하나를 사용합니다.

    콘솔

    OS 정책 할당을 만들고 출시하려면 다음 단계를 완료하세요.

    1. 로컬 클라이언트에서 OS 정책을 만들거나 다운로드합니다. JSON 또는 YAML 파일이어야 합니다. OS 정책 만들기 또는 샘플 OS 정책 보기에 대한 자세한 내용은 OS 정책을 참조하세요.
    2. Google Cloud 콘솔에서 OS 정책 페이지로 이동합니다.

      OS 정책으로 이동

    3. OS 정책 할당 만들기를 클릭합니다.

    4. 할당 ID 섹션에서 OS 정책 할당의 이름을 입력합니다. 리소스 이름 지정 규칙을 참조합니다.

    5. OS 정책 섹션에서 OS 정책 파일을 업로드합니다.

    6. 대상 VM 인스턴스 섹션에서 대상 VM을 지정합니다.

      • 정책을 적용할 VM이 포함된 영역을 선택하세요.
      • OS 제품군을 선택하세요.
      • 선택사항: 포함 및 제외 라벨을 지정하여 VM을 추가로 필터링할 수 있습니다.

      예를 들어 테스트 환경에서 모든 Ubuntu VM을 선택하고, 다음을 지정하여 Google Kubernetes Engine을 실행 중인 VM을 제외할 수 있습니다.

      • OS 제품군: ubuntu
      • 포함: env:test, env:staging
      • 제외: goog-gke-node

      대상 VM을 선택합니다.

    7. 출시 계획을 지정합니다.

      • 웨이브 크기(중단 예산이라고도 함)를 지정합니다. 예를 들면 10%입니다.
      • 대기 시간을 지정합니다. 예를 들면 15분입니다.

        출시 구성

    8. 출시 시작을 클릭합니다.

    gcloud

    영역에 OS 정책 할당을 만들고 출시하려면 다음 단계를 완료하세요.

    1. JSON 또는 YAML 형식으로 OS 정책 할당 리소스를 만듭니다. 이 파일은 VM에 적용할 OS 정책, 정책을 적용할 대상 VM, OS 정책을 적용할 출시 속도를 정의합니다. 이 파일 및 샘플 할당에 대한 자세한 내용은 OS 정책 할당을 참조하세요.

    2. os-config os-policy-assignments create 명령어를 사용하여 지정된 위치에 OS 정책 할당을 만들고 출시합니다.

      gcloud compute os-config os-policy-assignments create OS_POLICY_ASSIGNMENT_ID \
         --location=ZONE \
         --file=OS_POLICY_ASSIGNMENT_FILE \
         --async
      

      다음을 바꿉니다.

      • OS_POLICY_ASSIGNMENT_ID: OS 정책 할당의 이름입니다. 리소스 이름 지정 규칙을 참조하세요.
      • ZONE: OS 정책 할당을 만들 영역입니다.
      • OS_POLICY_ASSIGNMENT_FILE: 이전 단계에서 만든 OS 정책 할당 파일의 절대 경로입니다.

      예시

      gcloud compute os-config os-policy-assignments create my-os-policy-assignment \
          --location=asia-south1-a \
          --file=/downloads/assignment-config.yaml \
          --async
      

      출력은 다음과 비슷합니다.

      Create request issued for: [my-os-policy-assignment]
      Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.
      
    3. 작업에 대해 정규화된 리소스 이름을 기록해 둡니다. 이전 예시에서 정규화된 이름은 다음과 같습니다.

      projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa
      

      출시 세부정보를 가져오거나 출시를 취소하기 위해 이 정규화된 리소스 이름을 사용할 수 있습니다. 출시를 참조하세요.

    Terraform

    OS 정책 할당을 만들려면 google_os_config_os_policy_assignment 리소스를 사용합니다.

    다음 예시는 Apache 웹 서버가 CentOS VM에서 실행 중인지 확인합니다.

    resource "google_os_config_os_policy_assignment" "my_os_policy_assignment" {
    
      name        = "my-os-policy-assignment"
      location    = "us-west1-a"
      description = "An OS policy assignment that verifies if the Apache web server is running on CentOS VMs."
    
      instance_filter {
        # filter to select VMs
        all = false
    
        exclusion_labels {
          labels = {
            label-one = "goog-gke-node"
          }
        }
    
        inclusion_labels {
          labels = {
            env = "test",
          }
        }
    
        inventories {
          os_short_name = "centos"
          os_version    = "7*"
        }
      }
    
      os_policies {
        #list of OS policies to be applied to VMs
        id   = "apache-always-up-policy"
        mode = "ENFORCEMENT"
    
        resource_groups { #list of resource groups for the policy
          resources {
            id = "ensure-apache-is-up"
    
            exec {
              validate {
                interpreter = "SHELL"
                script      = "if systemctl is-active --quiet httpd; then exit 100; else exit 101; fi"
              }
    
              enforce {
                interpreter = "SHELL"
                script      = "systemctl start httpd && exit 100"
              }
            }
          }
    
          inventory_filters {
            os_short_name = "centos"
            os_version    = "7*"
          }
        }
    
        allow_no_resource_group_match = false #OS policy compliance status
        description                   = "An OS policy that verifies if the Apache web server is running on Linux VMs."
      }
    
      rollout {
        #define rollout parameters
        disruption_budget {
          fixed = 1
        }
        min_wait_duration = "3.5s"
      }
    }

    Terraform 구성을 적용하거나 삭제하는 방법은 기본 Terraform 명령어를 참조하세요.

    REST

    로컬 클라이언트에 OS 정책 할당을 만들려면 다음 단계를 완료하세요.

    1. OS 정책 할당 만들기 JSON 파일이어야 합니다. OS 정책 할당 만들기 또는 샘플 OS 정책 할당 보기에 대한 자세한 내용은 OS 정책 할당을 참조하세요.

      샘플 YAML OS 정책 할당을 사용하려면 이를 JSON으로 변환해야 합니다.

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

      요청 본문에서 이전 단계의 OS 정책 할당 사양을 붙여넣습니다.

      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
       JSON_OS_POLICY
      }
      

      다음을 바꿉니다.

      • PROJECT_ID: 프로젝트 ID입니다.
      • OS_POLICY_ASSIGNMENT_ID: OS 정책 할당의 이름입니다.
      • JSON_OS_POLICY: 이전 단계에서 만든 OS 정책 할당 사양. JSON 형식이어야 합니다. 매개변수 및 형식에 대한 자세한 내용은 Resource: OSPolicyAssignment를 참조하세요.
      • ZONE: OS 정책 할당을 만들 영역입니다.

      예시

      예를 들어 샘플 OS 정책 할당을 사용하여 선택한 VM에 모니터링 및 로깅 에이전트를 설치하는 Google Cloud Observability에 OS 정책 할당을 만들려면 다음 단계를 완료합니다.

      1. 샘플을 JSON으로 변환합니다.
      2. 다음과 같이 요청을 수행합니다.
      POST https://osconfig.googleapis.com/v1/projects/PROJECT_ID/locations/ZONE/OSPolicyAssignments?osPolicyAssignmentId=OS_POLICY_ASSIGNMENT_ID
      
      {
        "osPolicies": [
          {
            "id": "setup-repo-and-install-package-policy",
            "mode": "ENFORCEMENT",
            "resourceGroups": [
              {
                "resources": [
                  {
                    "id": "setup-repo",
                    "repository": {
                      "yum": {
                        "id": "google-cloud-monitoring",
                        "displayName": "Google Cloud Monitoring Agent Repository",
                        "baseUrl": "https://packages.cloud.google.com/yum/repos/google-cloud-monitoring-el8-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"
                        ]
                      }
                    }
                  },
                  {
                    "id": "install-pkg",
                    "pkg": {
                      "desiredState": "INSTALLED",
                      "yum": {
                        "name": "stackdriver-agent"
                      }
                    }
                  }
                ]
              }
            ]
          }
        ],
        "instanceFilter": {
          "inclusionLabels": [
            {
              "labels": {
                "used_for": "testing"
              }
            }
          ]
        },
        "rollout": {
          "disruptionBudget": {
            "fixed": 10
          },
          "minWaitDuration": {
            "seconds": 300
          }
        }
      }
      

출시

OS 정책 할당은 출시 속도에 따라 배포됩니다. 즉, VM 집합을 대상으로 하는 할당은 점진적으로 배포될 수 있으며, 모든 VM에 즉시 적용되지 않습니다. 변경사항이 점진적으로 출시되어 새로운 변경사항으로 인해 회귀가 발생할 때 이를 개입해서 출시를 취소할 수 있는 기회를 제공합니다.

API에 대한 메서드 호출을 완료하는 데 시간이 오래 걸릴 수 있으면 API에서 장기 실행 작업(LRO)이 반환됩니다. LRO에 대한 자세한 내용은 장기 실행 작업을 참조하세요.

OS Config API는 사용자가 OS 정책 할당을 만들거나, 업데이트, 삭제할 때마다 LRO를 만듭니다. 각 LRO는 작업 리소스를 반환합니다. 이 작업 리소스는 다음과 비슷합니다.

Create request issued for: [my-os-policy-assignment]
Check operation [projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa] for status.

각 만들기, 업데이트, 삭제 작업은 또한 새로운 OS 정책 할당 버전을 생성합니다. OS 정책 할당의 버전을 보려면 OS 정책 할당 버전 나열을 참조하세요.

Google Cloud CLI를 사용하여 출시 세부정보를 가져오거나 출시를 취소할 수 있습니다.

출시 세부정보 가져오기

출시의 세부정보를 가져오려면 os-config os-policy-assignments operations describe 명령어를 사용합니다.

gcloud compute os-config os-policy-assignments operations describe FULLY_QUALIFIED_OPERATION_NAME

FULLY_QUALIFIED_OPERATION_NAME을 생성, 업데이트, 삭제 작업에서 반환되는 작업의 정규화된 리소스 이름으로 바꿉니다.

예시

gcloud compute os-config os-policy-assignments operations describe \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

출력 예시

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignmentOperationMetadata
  apiMethod: CREATE
  osPolicyAssignment: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment@cfb78790-41d8-40d1-b8a1-1eaf6011b909
  rolloutStartTime: '2021-04-15T00:53:52.963569Z'
  rolloutState: SUCCEEDED
  rolloutUpdateTime: '2021-04-15T00:53:53.094041Z'
name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/cfb78790-41d8-40d1-b8a1-1eaf6011b909
response:
  '@type': type.googleapis.com/google.cloud.osconfig.$$api-version$$.OSPolicyAssignment
  baseline: true
  description: My test policy
  instanceFilter:
    inclusionLabels:
    - labels:
        label-key-not-targeting-instances: label-value-not-targeting-instances
  name: projects/3841234882888/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment
  osPolicies:
  - id: q-test-policy
    mode: ENFORCEMENT
    resourceGroups:
    - osFilter:
        osShortName: centos
        osVersion: '7'
      resources:
      - id: add-repo
        repository:
          yum:
            baseUrl: https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el7-x86_64-all

출시 취소

콘솔

  1. Google Cloud 콘솔에서 OS 정책 페이지로 이동합니다.

    OS 정책으로 이동

  2. OS 정책 할당 탭을 클릭합니다.

  3. 출시를 취소하려는 OS 정책 할당에서 작업() > 출시 취소를 클릭합니다.

  4. 출시 취소를 클릭합니다.

gcloud

출시를 취소하려면 gcloud compute os-config os-policy-assignments operations cancel 명령어를 사용합니다.

gcloud compute os-config os-policy-assignments operations cancel FULLY_QUALIFIED_OPERATION_NAME

FULLY_QUALIFIED_OPERATION_NAME을 생성, 업데이트, 삭제 작업에서 반환되는 작업의 정규화된 리소스 이름으로 바꿉니다.

예시

gcloud compute os-config os-policy-assignments operations cancel \
    projects/384123488288/locations/asia-south1-a/osPolicyAssignments/my-os-policy-assignment/operations/fb2011d6-61de-46f1-afdb-bc96bdb3fbaa

명령어가 성공하면 출력이 반환되지 않습니다.

다음 단계