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.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus terlebih dahulu login ke gcloud CLI dengan identitas gabungan Anda.
-
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
- Tinjau Ringkasan penyiapan untuk VM Manager.
- Tinjau kuota OS Config.
- Siapkan lingkungan Terraform Anda.
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:
- Service Usage Admin (
roles/serviceusage.serviceUsageAdmin) - Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1)
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:
- Buat peran khusus tingkat organisasi yang mencakup
serviceusage.services.enabledancompute.projects.setCommonInstanceMetadata. - 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_execyang menjalankan perintah Google Cloud CLI (sepertigcloud 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:
- Lakukan inisialisasi Terraform. Jalankan
terraform initmenggunakan backend lokal sementara dan tidak persisten. - Temukan project target. Buat daftar project target saat ini berdasarkan kriteria cakupan dinamis Anda.
- Impor resource yang ada. Jalankan
terraform importuntuk menarik resourcegoogle_project_service,google_compute_project_metadata_item, dangoogle_os_config_os_policy_assignmentyang ada ke dalam status lokal. - Terapkan konfigurasi. Jalankan perintah Terraform standar (
terraform plandanterraform apply), dengan meneruskan daftar project yang ditemukan ke deklarasi Anda. - 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
- Melihat status VM Manager untuk organisasi Anda menggunakan Inventaris Aset Cloud dan BigQuery.
- Membuat penetapan kebijakan OS.
- Membuat tugas patch.
- Memecahkan masalah VM Manager.