Menyiapkan VM Manager di seluruh organisasi menggunakan Terraform

Untuk menerapkan konfigurasi sistem operasi yang konsisten dan mengotomatiskan kepatuhan di seluruh Google Cloud hierarki resource, gunakan Terraform untuk mengonfigurasi VM Manager di tingkat organisasi.

Dokumen ini menjelaskan cara menggunakan Terraform untuk mengaktifkan VM Manager (OS Config API) secara otomatis, menetapkan metadata instance umum, dan menetapkan kebijakan OS di semua project target dalam hierarki resource Anda.

Untuk mengetahui ringkasan resource Terraform yang tersedia untuk VM Manager, lihat Menyediakan resource VM Manager menggunakan Terraform.

Sebelum memulai

  • Siapkan autentikasi jika Anda belum melakukannya. Autentikasi memverifikasi identitas Anda untuk mengakses Google Cloud layanan dan API. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine dengan memilih salah satu opsi berikut:

    Untuk menggunakan contoh Terraform di halaman ini dalam lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Instal Google Cloud CLI.

    2. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus terlebih dahulu login ke gcloud CLI dengan identitas gabungan Anda.

    3. Jika Anda menggunakan shell lokal, buat kredensial autentikasi lokal untuk akun pengguna Anda:

      gcloud auth application-default login

      Anda tidak perlu melakukannya jika menggunakan Cloud Shell.

      Jika error autentikasi ditampilkan, dan Anda menggunakan penyedia identitas (IdP) eksternal, pastikan Anda telah login ke gcloud CLI dengan identitas gabungan Anda.

    Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Sebelum memulai

Izin IAM yang diperlukan

Untuk mengaktifkan VM Manager secara otomatis dan menetapkan kebijakan OS di beberapa project, akun utama atau akun layanan yang menjalankan Terraform memerlukan izin Identity and Access Management (IAM) tertentu.

Izin project target

Untuk mendapatkan izin yang diperlukan untuk mengaktifkan layanan VM Manager dan menetapkan metadata project, minta administrator untuk memberi Anda peran IAM berikut di setiap project target:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk mengaktifkan layanan VM Manager dan menetapkan metadata project. Untuk melihat izin yang benar-benar diperlukan, perluas bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk mengaktifkan layanan VM Manager dan menetapkan metadata project:

  • serviceusage.services.enable
  • compute.projects.setCommonInstanceMetadata

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Penyiapan akun layanan dan peran khusus

Google merekomendasikan agar Anda membuat akun layanan khusus untuk menjalankan otomatisasi Terraform terpusat.

Untuk memberikan izin yang diperlukan ke akun layanan ini di beberapa project, buat peran khusus IAM di tingkat organisasi:

  1. Buat peran khusus tingkat organisasi yang mencakup serviceusage.services.enable dan compute.projects.setCommonInstanceMetadata.
  2. Berikan peran khusus ke akun layanan Anda di cakupan terendah yang berlaku, seperti tingkat organisasi atau folder. Misalnya, jika semua project target Anda berada dalam folder tertentu, berikan peran di tingkat folder.

Mengaktifkan VM Manager menggunakan Terraform

Untuk mengaktifkan VM Manager dan menetapkan kebijakan OS di beberapa project, gunakan salah satu pendekatan otomatis berikut: blueprint project golden atau pengelolaan project terpusat.

Menggunakan blueprint project golden

Jika organisasi Anda menggunakan modul project Terraform standar (blueprint golden) atau mekanisme yang diterapkan secara terpusat untuk menyediakan project, tambahkan definisi resource berikut ke blueprint project Anda.

Untuk mengaktifkan VM Manager, sertakan resource layanan dan metadata berikut:

# Enable the OS Config API
resource "google_project_service" "osconfig" {
  service            = "osconfig.googleapis.com"
  disable_on_destroy = false
}

# Set project metadata to enable VM Manager
resource "google_compute_project_metadata_item" "enable_osconfig" {
  key   = "enable-osconfig"
  value = "TRUE"
}

Untuk men-deploy penetapan kebijakan OS di semua VM yang disediakan oleh blueprint, tambahkan resource penetapan kebijakan berikut:

resource "google_os_config_os_policy_assignment" "base_security_policy" {
  name        = "base-security-ospolicy"
  description = "Ensure baseline security agent is installed and operational"
  location    = var.zone

  os_policies {
    id   = "no-op-policy"
    mode = "ENFORCEMENT"

    resource_groups {
      resources {
        id = "sample"
        exec {
          validate {
            interpreter = "SHELL"
            script      = "exit 100"
          }
          enforce {
            interpreter = "SHELL"
            script      = "exit 100"
          }
        }
      }
    }
  }

  os_policies {
    id   = "install-security-agent"
    mode = "ENFORCEMENT"

    resource_groups {
      resources {
        id = "install-agent"
        pkg {
          desired_state = "INSTALLED"
          apt {
            name = "security-agent"
          }
          yum {
            name = "security-agent"
          }
        }
      }
    }
  }

  instance_filter {
    all = true
  }

  rollout {
    disruption_budget {
      percent = 10
    }
    min_wait_duration = "3.5s"
  }
}

Mengelola semua project secara terpusat

Jika memodifikasi blueprint project golden tidak berlaku, Anda dapat mengelola pengaktifan VM Manager dan penetapan kebijakan OS secara terpusat di beberapa project yang ada menggunakan argumen for_each Terraform.

Untuk mengaktifkan VM Manager di seluruh project target, gunakan argumen for_each untuk melakukan iterasi pada peta project Anda:

resource "google_project_service" "osconfig" {
  for_each           = var.target_projects
  project            = each.key
  service            = "osconfig.googleapis.com"
  disable_on_destroy = false
}

resource "google_compute_project_metadata_item" "enable_osconfig" {
  for_each = var.target_projects
  project  = each.key
  key      = "enable-osconfig"
  value    = "TRUE"
}

Untuk menetapkan kebijakan OS di seluruh project target, tentukan resource penetapan kebijakan dengan argumen for_each:

resource "google_os_config_os_policy_assignment" "observability_agent_policy" {
  for_each    = var.target_projects
  project     = each.key
  name        = "observability-agent-ospolicy"
  description = "Install Google Cloud Observability agent on CentOS VMs across target projects"
  location    = var.zone

  os_policies {
    id   = "setup-repo-and-install-package-policy"
    mode = "ENFORCEMENT"

    resource_groups {
      inventory_filters {
        os_short_name = "centos"
        os_version    = "8"
      }

      resources {
        id = "setup-repo"
        repository {
          yum {
            id           = "google-cloud-ops-agent"
            display_name = "Google Cloud Ops Agent Repository"
            base_url     = "https://packages.cloud.google.com/yum/repos/google-cloud-ops-agent-el8-x86_64-all"
            gpg_keys = [
              "https://packages.cloud.google.com/yum/doc/yum-key.gpg",
              "https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg",
            ]
          }
        }
      }

      resources {
        id = "install-pkg"
        pkg {
          desired_state = "INSTALLED"
          yum {
            name = "google-cloud-ops-agent"
          }
        }
      }
    }
  }

  instance_filter {
    all = true
  }

  rollout {
    disruption_budget {
      percent = 10
    }
    min_wait_duration = "3.5s"
  }
}

Tentukan project target

Anda dapat memberikan peta var.target_projects ke konfigurasi Terraform menggunakan cakupan tetap atau cakupan dinamis:

  • Cakupan tetap. Pertahankan daftar ID project eksplisit dalam variabel lokal atau file data eksternal. Cakupan tetap mengharuskan Anda memperbarui daftar setiap kali membuat atau menghapus project.
  • Cakupan dinamis. Temukan project target berdasarkan aturan hierarki resource (misalnya, semua project dalam organisasi atau folder). Anda dapat membuat kueri project menggunakan sumber data google_projects:

     data "google_projects" "in_folder" {
     filter = "parent.id:${local.folder_id}"
     }
    

    Untuk menangani pengecualian, filter project yang berisi label pengecualian tertentu. Anda juga dapat menjalankan skrip eksternal menggunakan local_exec yang menjalankan perintah Google Cloud CLI (seperti gcloud asset search-all-resources) untuk membuat daftar target dinamis.

Membuat alur kerja otomatis tanpa status

Jika Anda menggunakan cakupan dinamis, daftar project target akan terus berubah. Menggunakan file status Terraform persisten standar memerlukan upaya manual untuk mengimpor resource baru dan menghapus project yang dihapus dari status.

Untuk mengelola cakupan dinamis secara efisien, terapkan alur kerja otomatis tanpa status menggunakan Cloud Build:

  1. Lakukan inisialisasi Terraform. Jalankan terraform init menggunakan backend lokal sementara dan tidak persisten.
  2. Temukan project target. Buat daftar project target saat ini berdasarkan kriteria cakupan dinamis Anda.
  3. Impor resource yang ada. Jalankan terraform import untuk menarik resource google_project_service, google_compute_project_metadata_item, dan google_os_config_os_policy_assignment yang ada ke dalam status lokal.
  4. Terapkan konfigurasi. Jalankan perintah Terraform standar (terraform plan dan terraform apply), dengan meneruskan daftar project yang ditemukan ke deklarasi Anda.
  5. Simpan artefak yang dijalankan. Secara opsional, simpan output rencana, snapshot status, dan ringkasan salinan ke bucket Cloud Storage untuk audit.

Jadwalkan pipeline Cloud Build Anda untuk berjalan secara berkala (misalnya, harian atau mingguan) guna mendeteksi penyimpangan konfigurasi secara otomatis dan menerapkan kepatuhan di seluruh organisasi Anda.

Melihat status VM Manager tingkat organisasi

Setelah menyiapkan VM Manager di seluruh organisasi, Anda dapat melihat laporan status pengaktifan dan sistem operasi di semua project dalam hierarki Anda. Dengan mengekspor data Inventaris Aset Cloud ke BigQuery, Anda dapat menjalankan kueri SQL untuk memeriksa apakah VM Manager diaktifkan, memeriksa versi agen Konfigurasi OS, dan memeriksa detail sistem operasi di semua project dalam organisasi Anda.

Untuk mempelajari cara mengekspor data dan menjalankan kueri laporan status, lihat Melihat status VM Manager untuk organisasi Anda menggunakan Inventaris Aset Cloud dan BigQuery.

Langkah berikutnya