Menggunakan Rekomendasi untuk Infrastructure as Code


Ringkasan

Google Cloud Policy Intelligence membantu perusahaan memahami dan mengelola kebijakan mereka untuk mengurangi risiko. Dengan memberikan lebih banyak visibilitas dan otomatisasi, pelanggan dapat meningkatkan keamanan tanpa menambah workload mereka.

Recommender memungkinkan Anda mengambil rekomendasi untuk resource Google Cloud , sehingga membantu Anda meningkatkan keamanan cloud, menghemat biaya, dan lainnya. Untuk mengetahui daftar rekomendasi yang didukung, lihat dokumentasi Pemberi Rekomendasi. Tutorial ini menjelaskan penggunaan rekomendasi ukuran untuk instance VM dan rekomendasi Identity and Access Management (IAM). Pemberi Rekomendasi menggunakan machine learning untuk memberikan rekomendasi kepada administrator terkait penghapusan akses yang tidak perlu ke Google Cloud resource dan pengubahan ukuran instance Compute Engine untuk penggunaan resource yang lebih efisien.

Setiap rekomendasi mencakup tindakan yang disarankan dan dampaknya. Setelah meninjau rekomendasi untuk dampak yang teridentifikasi serta pertimbangan lain yang khusus untuk lingkungan Anda, Anda dapat memilih rekomendasi yang ingin diterapkan. Anda dapat menerapkan rekomendasi secara manual dari konsol Google Cloud atau menerapkannya secara terprogram dengan mengintegrasikannya ke dalam pipeline Infrastruktur sebagai Kode (IaC).

IaC memungkinkan Anda mengotomatiskan pembuatan resource Google Cloud .Anda harus terus memperbarui repositori IaC dan merutekan perubahan yang dilakukan pada organisasiGoogle Cloud melalui repositori tersebut. Strategi IaC di organisasi umumnya terbukti bermanfaat jika diterapkan dengan cermat dan berfungsi sebagai satu-satunya versi yang terpercaya untuk infrastruktur cloud Anda. Memastikan repositori IaC Anda selalu diperbarui sangat penting untuk mencegah perbedaan antara versi infrastruktur yang tercermin dalam repositori IaC Anda dan yang Anda miliki di organisasi.

Rekomendasi IAM

Di antara praktik terbaik lainnya, salah satu praktik yang umum adalah prinsip keamanan hak istimewa paling rendah dan pertimbangan yang cermat tentang cara perubahan pada organisasi Anda di-deploy dan disinkronkan dengan repositori IaC Anda.

Rekomendasi ukuran untuk VM

Rekomendasi penyesuaian ukuran membantu Anda menurunkan biaya dengan memberikan saran untuk mengubah ukuran jenis mesin instance agar menggunakan resource instance dengan lebih efisien

Tutorial ini menjelaskan cara merancang dan membangun pipeline otomatisasi untuk menerapkan rekomendasi Policy Intelligence secara terprogram. Sebagai bagian dari pipeline otomatisasi ini, Anda akan mempelajari cara menjaga agar repositori IaC Anda tetap terbaru dengan perubahan yang Anda putuskan untuk dilakukan pada organisasi Anda, berdasarkan rekomendasi ukuran VM dan pengikatan kebijakan IAM yang disediakan Recommender. Google Cloud

Tutorial ini menggunakan Hashicorp Terraform sebagai alat IaC, tetapi pola dan komponen arsitektur yang digunakan dalam pipeline otomatisasi yang dijelaskan dapat dimanfaatkan meskipun Anda menggunakan alat pengelolaan IaC yang berbeda seperti Deployment Manager. Anda harus mengubah codebase open source yang tersedia dalam tutorial ini agar sesuai dengan penerapan IaC spesifik Anda.

Panduan ini ditujukan bagi arsitek, pemilik produk, dan developer yang mungkin bertanggung jawab atas perencanaan administrasi, keamanan, dan infrastrukturGoogle Cloudmereka.

Arsitektur pipeline otomatisasi

Diagram berikut menunjukkan komponen yang Anda gunakan dalam pipeline otomatisasi ini.

komponen dalam pipeline otomatisasi

Tugas Cloud Scheduler terjadwal menjalankan layanan Parser Recommender. Layanan memanggil Recommender API untuk mengambil rekomendasi Recommender untuk project yang Anda tentukan. Kemudian, alat ini akan mem-parsing rekomendasi ukuran VM dan IAM ini untuk memetakannya ke konfigurasi yang Anda miliki di manifes Terraform. Layanan ini memperbarui manifes IaC Anda untuk mencerminkan rekomendasi ini. Fitur ini membuat permintaan pull dengan perubahan sehingga Anda dapat meninjau pembaruan. Setelah Anda meninjau dan menggabungkan permintaan pull, tugas Cloud Build akan meluncurkan perubahan ke infrastruktur Anda di organisasiGoogle Cloud Anda.

Beberapa layanan tambahan Google Cloud digunakan dalam pipeline untuk tujuan melacak rekomendasi yang diproses, membuat notifikasi saat penyelesaian build dan menyimpan status Terraform. Anda akan mempelajari layanan ini lebih lanjut selama tutorial ini.

Daftar berikut menjelaskan tujuan komponen dan persyaratan kontrol akses:

Pemberi Rekomendasi Platform Intelligence
Tujuan: Membuat rekomendasi keamanan dan ukuran VM

Kontrol akses: Akun layanan Google Cloud harus memiliki izin IAM yang diperlukan untuk mengambil rekomendasi menggunakan Recommender API.

Tinjau peran dan izin Recommender untuk memilih peran yang paling sesuai yang berlaku untuk akun layanan yang Anda gunakan untuk menjalankan layanan recommender-parser.

Cloud Scheduler

Tujuan: Cloud Scheduler memicu layanan Recommender Parser. Cloud Scheduler memungkinkan Anda menyiapkan beberapa tugas yang memanggil instance layanan parser sebanyak yang Anda butuhkan. Setiap pemanggilan perlu meneruskan input berikut

  • Daftar project yang rekomendasinya harus diproses
  • Jenis Rekomendasi
  • Nama repositori IaC

Kontrol akses: Buat atau identifikasi Google Cloud akun layanan yang akan digunakan untuk panggilan dari Cloud Scheduler ke layanan Recommender Parser Anda.

Beri akun layanan peran Agen Layanan Cloud Scheduler agar akun layanan dapat menjalankan tugas Cloud Scheduler. Selain itu, berikan peran Cloud Run Invoker ke akun layanan karena akun tersebut memanggil layanan Cloud Run

Lihat dokumentasi tentang cara mengonfigurasi akses yang diautentikasi untuk tugas penjadwal untuk mengetahui detailnya.

Layanan Cloud Run

Tujuan:: Layanan parser-rekomendasi adalah tempat semua logika pemrosesan berada. Aplikasi ini memiliki beberapa rute, yang masing-masing memiliki tujuan tertentu:

  • Mem-parsing rekomendasi untuk setiap jenis rekomendasi.
  • Memperbarui status rekomendasi yang sedang diproses

Kontrol akses: Gunakan IAM untuk mengelola akses ke layanan ini

Selain itu, tetapkan layanan ke akun layanan khusus. Hal ini memastikan bahwa hanya layanan yang dapat memanggil layanan lain seperti Firestore.

Hashicorp Terraform

Tujuan: Terraform 0.12 adalah alat IaC.

Builder Cloud Build untuk Terraform digunakan untuk memanggil perintah Terraform dan akun layanan Cloud Build digunakan untuk tujuan tersebut.

Cloud Build

Tujuan: Google Cloud Build mengotomatiskan deployment infrastruktur berdasarkan perubahan yang dilakukan pada manifes IaC per rekomendasi kecerdasan kebijakan.

Kontrol akses: Akun layanan Cloud Build harus memiliki set izin yang tepat untuk berinteraksi dengan resource di project pengujian Anda.

Lihat dokumentasi untuk mengonfigurasi akun layanan Cloud Build.

GitHub

Tujuan: Repositori IaC menggunakan GitHub untuk kontrol sumber. Repositori IaC di GitHub terintegrasi dengan Cloud Build. Saat commit dilakukan ke cabang master, tugas Cloud Build dipicu untuk menjalankan serangkaian tugas yang telah dikonfigurasi sebelumnya.

Kontrol akses: Anda harus membuat kunci SSH untuk mengaktifkan akses ke repositori IaC Anda.

Selain itu, Anda perlu membuat Token Akses Pribadi untuk mengirimkan commit ke GitHub.

Firestore

Firestore adalah database dokumen NoSQL yang skalabel dan terkelola sepenuhnya yang digunakan dalam arsitektur ini untuk menyimpan informasi terkait ID Rekomendasi yang diuraikan oleh layanan Pengurai Recommender, beserta detail terkait yang relevan dengan commit Git.

Detail yang dipertahankan di Firestore memainkan peran penting dalam loop umpan balik yang merupakan bagian dari pipeline end-to-end. Setelah mengambil rekomendasi yang dihasilkan oleh Recommender API dan sebelum memproses rekomendasi, layanan menandai status rekomendasi menjadi CLAIMED. Setelah rekomendasi berhasil diterapkan, layanan mengirimkan kueri ke database untuk mengambil ID rekomendasi yang telah berhasil diterapkan oleh tugas Cloud Build dan mengubah status rekomendasi menjadi SUCCEEDED. Jika Tugas Cloud Build gagal, status rekomendasi akan diubah menjadi FAILED.

Kontrol akses: Lihat Peran Firestore untuk mengetahui detailnya. Layanan recommender-parser membaca data dari Firestore dan memerlukan peran roles/datastore.user untuk melakukannya.

Pub/Sub

Tujuan: Cloud Build memublikasikan pesan di topik Pub/Sub saat status build Anda berubah, seperti saat build dibuat, saat build bertransisi ke status yang berfungsi, dan saat build selesai.

Topik Pub/Sub tempat Cloud Build memublikasikan pesan disebut cloud-builds, dan topik ini dibuat secara otomatis untuk Anda saat Anda mengaktifkan Cloud Build API di project Anda.

Kontrol akses: Langganan push dapat dikonfigurasi untuk memberikan header autentikasi agar layanan dapat mengizinkan permintaan. Lihat Menggunakan Langganan Push untuk mengetahui detail selengkapnya.

Tujuan

  • Bangun pipeline otomatisasi untuk
    • Memantau rekomendasi Policy Intelligence platform secara proaktif
    • Mengurai rekomendasi dan menerapkan update ke repositori IaC yang ada
  • Pelajari cara menggunakan serangkaian layanan Google Cloud ,Hashicorp Terraform, dan GitHub untuk membangun pipeline ini.
  • Pahami asumsi dan praktik terbaik yang perlu Anda perhatikan untuk membangun pipeline ini
  • Menguji pipeline

Biaya

Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:

  • Cloud Run
  • Cloud Build
  • Compute Engine
  • Cloud Storage
  • Firestore
  • Pub/Sub
  • Cloud Scheduler
  • Recommender

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga.

Pengguna Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Tutorial ini mengasumsikan bahwa Anda memiliki akun GitHub, dan sudah memahami Git, Node.js, Terraform, dan Docker.

Catatan Rilis dan Asumsi

Ada banyak variabilitas dalam cara penggunaan alat dan manifes IaC.

Tinjau informasi berikut untuk menentukan cara tutorial ini dapat sesuai dengan pipeline IaC Anda dan jenis perubahan yang mungkin diperlukan.

  • Pipeline ini menggunakan Terraform ver. 0.12. Perubahan signifikan pada sintaksis konfigurasi HCL atau perubahan pada struktur file status Terraform dapat menyebabkan masalah yang mengganggu.
  • Pipeline ini mengasumsikan bahwa struktur direktori IaC tidak bertingkat dan satu repositori IaC mengelola resource di satu atau beberapa project Google Cloud .
  • Variabel Terraform yang diteruskan sebagai variabel lingkungan, argumen command line tidak didukung. Prototipe ini mengasumsikan konfigurasi deklaratif variabel Terraform dalam file tfvars.
  • Pemberi rekomendasi membuat rekomendasi IAM saat sebagian izin untuk suatu peran belum digunakan selama 60 hari dan rekomendasi penetapan ukuran VM mengikuti pola yang serupa. Untuk tujuan tutorial ini, payload rekomendasi contoh telah disediakan yang dapat digunakan untuk menguji pipeline.
  • Loop dalam Terraform tidak didukung dalam rilis ini
  • Modul Terraform tidak didukung. Codebase bersifat open source dan diasumsikan bahwa Anda akan melakukan peningkatan spesifik yang diperlukan pada alur parsing agar sesuai dengan struktur direktori dan penggunaan modul Anda.

Versi layanan parser pemberi rekomendasi open source saat ini selaras dengan batasan umum berikut dari rekomendasi IAM:

Prasyarat

  1. Pilih atau buat dua Google Cloud project.

    Buka halaman pemilih project

    • Project build yang menghosting dan menjalankan pipeline otomatisasi.
    • Project pengujian yang menghosting Google Cloud resource yang digunakan untuk menguji pipeline otomatisasi.
  2. Make sure that billing is enabled for your Google Cloud project.

  3. Di project test, aktifkan Recommender dan Compute Engine API.

    Enable the APIs

  4. Di project build, aktifkan Cloud Run, Firestore, Pub/Sub dan Cloud Scheduler, IAM, serta CloudResourceManager API.

    Enable the APIs

Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Lihat Pembersihan untuk mengetahui detail selengkapnya.

Menyiapkan lingkungan Anda

  1. Di Google Cloud console, pilih project build Anda.
  2. Di konsol Google Cloud , buka Cloud Shell.

    Buka Cloud Shell

    Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

    Gunakan Cloud Shell untuk semua perintah terminal dalam tutorial ini.

  3. Buat variabel lingkungan untuk menyimpan nomor project untuk project build Anda menggunakan perintah di bawah:

    export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
    
  4. Buat variabel lingkungan untuk menyimpan nomor project untuk project test Anda . Salin ID project pengujian secara manual dan ganti PROJECT-ID dengan ID tersebut,

    export TEST_PROJECT_ID=PROJECT-ID
  5. Anda akan menetapkan setelan default untuk nilai yang digunakan di seluruh tutorial, seperti region dan zona. Dalam tutorial ini, Anda menggunakan us-central1 sebagai region default dan us-central1-b sebagai zona default.

  6. Tetapkan region dan zona default untuk tutorial ini dengan menjalankan perintah berikut:

    gcloud config set compute/zone us-central1-b --project $BUILD_PROJECT_ID
    gcloud config set compute/zone us-central1-b --project $TEST_PROJECT_ID
    
  7. Tetapkan project build Anda sebagai project default:

    gcloud config set project $BUILD_PROJECT_ID
    
  8. Buat variabel lingkungan bernamaBUILD_PROJECT_NUMBER untuk nomor projectbuild Anda

    export BUILD_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
    
  9. Clone repositori GitHub untuk tutorial ini:

Buat Bucket untuk Status Terraform

Buat bucket Cloud Storage di project build untuk menyimpan file status Terraform.

gcloud storage buckets create gs://recommender-tf-state-$BUILD_PROJECT_ID \
  --project=${BUILD_PROJECT_ID} --location=us-central1

Membuat repositori GitHub

Buat repositori GitHub untuk berfungsi sebagai repositori IaC contoh

  1. Buat repositori GitHub pribadi baru. Repositori IAC-REPO-NAME ini berfungsi sebagai repositori IaC Anda untuk tujuan tutorial ini

  2. Pada langkah-langkah berikut, Anda akan mengirimkan file di subdirektori sample-iac repositori yang di-clone ke akun GitHub Anda.

    1. Di Cloud Shell, salin direktori sample-iac ke direktori utama Anda. Anda akan menggunakan direktori ini untuk membuat repositori lokal baru dan mengirimkannya ke GitHub.

      cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
      
    2. Buka direktori baru

      cd $HOME/sample-iac
      
    3. Lakukan inisialisasi repositori di komputer lokal Anda.

      git init
      
    4. Tambahkan IAC-REPO-NAME sebagai repositori jarak jauh, ganti IAC-REPO-NAME dan GITHUB-ACCOUNT dengan nilai yang sesuai

      git remote add origin https://github.com/GITHUB-ACCOUNT/IAC-REPO-NAME
    5. Ganti placeholder dalam file di repositori ini dengantestproject ID dan nama bucket Cloud Storage Terraform Anda.

      sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./terraform.tfvars
      
      sed -i "s|__STATE_BUCKET_NAME__|recommender-tf-state-$BUILD_PROJECT_ID|g" ./backend.tf
      
    6. Tambahkan, commit, dan kirim ke GitHub.

      git add .
      git commit -m "First Commit"
      git push origin master
      
    7. Login ke akun GitHub Anda saat diminta.

Membuat kunci SSH untuk repositori Anda

Siapkan autentikasi kunci SSH dengan repositori IaC Anda di GitHub dan upload kunci ke Cloud Storage.

  1. Buat kunci SSH untuk repositori GitHub Anda.

    1. Buat pasangan kunci SSH. Ganti your_email@example.com dengan alamat email GitHub Anda. Dalam Cloud Shell:

      ssh-keygen -t rsa -b 4096 -m PEM -C "your_email@example.com"
    2. Saat Anda diminta untuk "Enter a file in which to save the key", tekan Enter. Ini menerima lokasi file default.

    3. Saat diminta untuk memasukkan frasa sandi, tekan Enter.

  2. Catat direktori SSH-KEYS-DIR tempat Anda menyimpan kunci SSH yang didownload. Secara default, lokasinya adalah$HOME/.ssh/

  3. Salin kunci publik SSH yang Anda buat ke repositori GitHub Anda sebagai Deploy Key.

    1. Salin kunci publik SSH yang Anda buat di Cloud Shell. Ganti SSH-KEYS-DIR dengan jalur direktori Anda.

      cat SSH-KEYS-DIR/id_rsa.pub
    2. Di akun GitHub Anda, buka repositori IAC-REPO-NAME

    3. Klik Settings > Deploy Keys.

    4. Klik Add Deploy Key dan tempelkan kunci publik SSH yang Anda salin. Pilih Judul untuk kunci.

    5. Centang kotak "Izinkan akses tulis"

    6. Klik Simpan.

  4. Kembali ke sesi Cloud Shell Anda

  5. Buat fileknown_hosts untuk GitHub. Dalam sesi Cloud Shell Anda, jalankan perintah:

    ssh-keyscan github.com >> ~/.ssh/known_hosts
    
  6. Buat bucket Cloud Storage di projectbuild Anda, lalu upload kunci SSH dan file known_hosts ke bucket tersebut. Ganti SSH-KEYS-DIR dengan jalur ke direktori tempat Anda membuat kunci SSH.

    gcloud storage buckets create gs://github-keys-$BUILD_PROJECT_ID --project=${BUILD_PROJECT_ID} --location=us-central1
    
    gcloud storage cp SSH-KEYS-DIR/id_rsa* gs://github-keys-$BUILD_PROJECT_ID
    gcloud storage cp SSH-KEYS-DIR/known_hosts gs://github-keys-$BUILD_PROJECT_ID
  7. Buat Token Akses Pribadi untuk GitHub. Token ini digunakan saat melakukan operasi Git menggunakan panggilan API yang dilakukan oleh layanan recommender-parser untuk membuat permintaan pull, check-in manifes IaC yang diperbarui.

    1. Di akun GitHub Anda, di pojok kanan atas halaman mana pun, klik foto profil Anda, lalu klik Settings.

    2. Di sidebar kiri, klik Setelan developer.

    3. Di sidebar kiri, klik Personal access tokens.

    4. Klik Buat token baru.

    5. Beri nama deskriptif untuk token Anda.

    6. Pilih cakupan sebagai repo.

    7. Klik Generate Token.

    8. Salin token ke papan klip Anda.

    9. Dalam sesi Cloud Shell Anda, buat variabel lingkungan.

      export GITHUB_PAT=personal-access-token-you-copied

Siapkan Cloud Build

  1. Hubungkan repositori Git IAC-REPO-NAME Anda untuk berintegrasi dengan Cloud Build.

    1. Buka halaman Aplikasi Cloud Build di GitHub Marketplace.
    2. Scroll ke bawah, lalu klik Setup dengan Google Cloud Build di bagian bawah halaman.
    3. Jika diminta, Login ke GitHub.
    4. Pilih Hanya pilih repositori. Gunakan menu drop-down Select repositories untuk hanya mengaktifkan akses ke IAC-REPO-NAME Anda di aplikasi Cloud Build.
    5. Klik Instal.
    6. Login ke Google Cloud.

      Halaman Otorisasi akan ditampilkan dan Anda akan diminta untuk mengizinkan aplikasi Google Cloud Build terhubung ke Google Cloud.

    7. Klik otorisasikan Google Cloud Build dengan GoogleCloudBuild. Anda akan dialihkan ke konsol Google Cloud .

    8. Pilih project Google Cloud Anda.

    9. Aktifkan kotak centang izin, lalu klik Berikutnya.

    10. Di halaman Select repository yang muncul, pilih repositori GitHub IAC-REPO-NAME

    11. Klik Connect repository.

    12. Klik Create a Trigger. Tindakan ini akan membuat definisi pemicu untuk Anda.

    13. Klik Buat untuk menyimpan pemicu build Anda.

    Untuk mengetahui informasi selengkapnya, lihat Menjalankan build di GitHub.

  2. Direktori yang Anda salin memiliki file cloudbuild.yaml. File konfigurasi ini menguraikan langkah-langkah yang dijalankan tugas Cloud Build saat dipicu.

    steps:
    - name: hashicorp/terraform:0.12.0
      args: ['init']
    - name: hashicorp/terraform:0.12.0
      args: ['apply', '-auto-approve']
    
  3. Tambahkan izin ke akun layanan Cloud Build Anda agar akun tersebut dapat membuat akun layanan, mengaitkan peran, dan virtual machine (instance Compute Engine) di project pengujian

    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role roles/compute.admin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role roles/iam.serviceAccountAdmin \
      --project $TEST_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
    --member serviceAccount:$BUILD_PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
    --role roles/iam.securityAdmin \
    --project $TEST_PROJECT_ID
    
  4. Buka halaman Pemicu Build di Google Cloud console.

  5. Pilih project build, lalu klik Open.

  6. Perbarui definisi pemicu:

    1. Klik menu , lalu klik Edit.
    2. Untuk Konfigurasi, pilih opsi File konfigurasi Cloud Build (yaml atau json) dan ketik cloudbuild.yaml di kolom teks.
    3. Klik Simpan.
  7. Untuk menguji pemicu build secara manual, klik Run pada entri pemicu di daftar pemicu.

  8. Pastikan instance Compute Engine bernama tf-compute-1 dan akun layanan bernama Terraform Recommender Test dibuat di project pengujian Anda oleh tugas Cloud Build yang Anda jalankan di langkah sebelumnya

Men-deploy layanan Cloud Run recommender-parser

  1. Di Cloud Shell, ubah direktori ke direktori yang dibuat dengan meng-clone repositori

    cd $HOME/recommender-iac-pipeline-nodejs-tutorial/parser-service
    
  2. Konfigurasi Google Cloud untuk menggunakan region default bagi layanan Cloud Run. Dalam tutorial ini, Anda menggunakan region us-central1, tetapi Anda dapat memilih region lain yang didukung jika mau.

    gcloud config set run/region us-central1
    
  3. Direktori parser-service memiliki subdirektori stub yang memiliki beberapa JSON payload contoh untuk Anda uji dengan layanan recommender-parser. Jalankan perintah sed berikut untuk mengganti placeholder PROJECT_ID dalam JSON ini dengan project ID pengujian Anda.

    sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/iam.json
    sed -i "s|__PROJECT_ID__|${TEST_PROJECT_ID}|g" ./stub/vm.json
    
  4. Jalankan perintah berikut untuk membuat variabel lingkungan bagi image Docker Anda.

    export IMAGE=gcr.io/$BUILD_PROJECT_ID/recommender-parser:1.0
    
  5. Bangun image dan upload ke Container Registry

    gcloud builds submit --tag $IMAGE .
    
  6. Buat akun layanan untuk layanan recommender-parser agar dapat berinteraksi dengan layanan Google Cloud lain dalam pipeline. Sebaiknya berikan izin terperinci ke layanan Cloud Run Anda. Lihat Identitas layanan Cloud Run untuk mengetahui detail selengkapnya.

    gcloud beta iam service-accounts create recommender-parser-sa \
      --description "Service account that the recommender-parser service uses to invoke other Google Cloud services" \
      --display-name "recommender-parser-sa" \
      --project $BUILD_PROJECT_ID
    
  7. Layanan recommender-parser perlu mengakses kunci SSH GitHub dan status Terraform yang Anda upload ke bucket Cloud Storage yang dibuat sebelumnya. Tambahkan akun layanan sebagai anggota ke bucket Cloud Storage.

    gcloud storage buckets add-iam-policy-binding gs://github-keys-$BUILD_PROJECT_ID \
      --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/storage.objectUser
    
    gcloud storage buckets add-iam-policy-binding gs://recommender-tf-state-$BUILD_PROJECT_ID \
      --member=serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/storage.objectUser
    
  8. Beri akun layanan recommender-parser akses ke Firestore, Recommender, dan Service Usage API.

    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/datastore.user
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.iamAdmin
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.iamViewer
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/recommender.computeAdmin
    
    gcloud projects add-iam-policy-binding $TEST_PROJECT_ID \
      --member serviceAccount:recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/serviceusage.serviceUsageConsumer
    
  9. Deploy layanan Cloud Run, yang disebut recommender-parser, dengan menjalankan perintah. Ganti GITHUB-ACCOUNT dengan nama pengguna akun GitHub Anda, bukan email. Setujui perintah sistem apa pun.

    gcloud run deploy \
     --image=${IMAGE} \
     --no-allow-unauthenticated \
     --region us-central1 \
     --platform managed \
     --service-account recommender-parser-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
     --set-env-vars="GITHUB_ACCOUNT=github.com:GITHUB-ACCOUNT,GITHUB_PAT=${GITHUB_PAT},SSH_KEYS_BUCKET=github-keys-${BUILD_PROJECT_ID},TERRAFORM_STATE_BUCKET=recommender-tf-state-$BUILD_PROJECT_ID" \
     --project $BUILD_PROJECT_ID \
     recommender-parser

Menyiapkan Firestore

  1. Di Google Cloud console, di project build, buka halaman Firestore.
  2. Saat diminta untuk memilih mode, klik Pilih Mode Native.
  3. Pilihus-east1 sebagai lokasi default.
  4. Klik Create database.

Layananrecommender-parser menulis dokumen ke database ini untuk tujuan berikut:

  • Untuk melacak rekomendasi yang telah diambil dari Recommender API
  • Panggil Recommender API setelah rekomendasi diproses untuk memperbarui status setiap rekomendasi yang diproses menjadi SUCCEEDED atau FAILED sebagaimana mestinya. Ini adalah langkah penting yang membuat pipeline menjadi idempoten dengan memastikan bahwa rekomendasi tidak diproses secara tidak lengkap atau beberapa kali.

Menyiapkan tugas Cloud Scheduler

  1. Buat akun layanan yang digunakan tugas Cloud Scheduler untuk menjalankan layanan recommender-parser.

    gcloud beta iam service-accounts create recommender-scheduler-sa \
      --description "Service Account used by Cloud Scheduler to invoke the recommender-parser service" \
      --display-name "recommender-scheduler-sa" \
      --project $BUILD_PROJECT_ID
    
  2. Berikan peran run/invoker akun layanan agar dapat memanggil layanan Cloud Run.

    gcloud beta run services add-iam-policy-binding recommender-parser \
    --member=serviceAccount:recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/run.invoker \
    --region=us-central1
    
  3. Dapatkan URL recommender-service Anda:

    gcloud beta run services list --platform managed --project $BUILD_PROJECT_ID
    

    Tugas Cloud Scheduler Anda memanggil rute /recommendation/iam layanan recommender-parser untuk mengurai rekomendasi IAM dan rute /recommender/vm untuk mengurai rekomendasi penskalaan VM.

  4. Buat variabel untuk endpoint yang dipanggil tugas Cloud Scheduler. Ganti RECOMMENDER-SERVICE-URL dengan URL recommender-service yang Anda salin pada langkah sebelumnya.

    export RECOMMENDER_ROUTE_TO_INVOKE_IAM=RECOMMENDER-SERVICE-URL/recommendation/iam

    URL Anda akan terlihat seperti contoh URL ini setelah menambahkan informasi rute:

    RECOMMENDER-SERVICE-URL/recommendation/iam
    
  5. Buat tugas Cloud Scheduler bernama recommender-iam-scheduler.

    • Ubah zona waktu yang dipilih berdasarkan lokasi Anda.
    • Ganti IAC-REPO-NAME dengan nama repositori GitHub yang Anda buat.

    Isi pesan memerlukan tiga input dan Anda harus menyusunnya seperti yang diuraikan di bawah:

    • repo: Ini adalah nama repositori GitHub IAC-REPO-NAME yang Anda buat di Membuat repositori GitHub.

    • projects: Daftar / array ID project Google Cloud yang dipetakan ke repositori GitHub IaC ini. Dalam tutorial ini, projectnya adalah project test Anda.

    • stub: Pemberi rekomendasi membuat rekomendasi IAM saat sebagian izin untuk suatu peran belum digunakan selama 60 hari dan rekomendasi penskalaan VM mengikuti pola yang serupa. Untuk tujuan pengujian pipeline ini sesuai permintaan, stub dapat diteruskan sebagai true sehingga pipeline diuji menggunakan payload Recommender contoh yang disediakan di repositori yang Anda clone untuk tutorial ini.

    gcloud beta scheduler jobs create http recommender-iam-scheduler \
      --project $BUILD_PROJECT_ID \
      --time-zone "America/Los_Angeles" \
      --schedule="0 */3 * * *" \
      --uri=$RECOMMENDER_ROUTE_TO_INVOKE_IAM \
      --description="Scheduler job to invoke recommendation pipeline" \
      --oidc-service-account-email="recommender-scheduler-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com" \
      --headers="Content-Type=application/json" \
      --http-method="POST" \
      --message-body="{ \"repo\": \"IAC-REPO-NAME\", \"projects\": [\"$TEST_PROJECT_ID\"], \"location\": \"global\", \"stub\": true }"

Langkah tambahan

Cloud Build memublikasikan informasi build ke topik Pub/Sub bernama cloud-builds yang dibuat secara otomatis saat Anda mengaktifkan Cloud Build API di project build.

  1. Jalankan perintah berikut untuk memverifikasi bahwa topik cloud-builds ada di project build Anda:

    gcloud pubsub topics describe cloud-builds
    

    Jika topik ada, Anda akan melihat output berikut, dengan BUILD-PROJECT-ID adalah ID project build Anda:

    name: projects/BUILD-PROJECT-ID/topics/cloud-builds
    

    Jika Anda menerima pesan error yang menyatakan bahwa resource tidak ditemukan, ikuti petunjuk untuk berlangganan untuk membuat notifikasi build, guna membuat topik secara manual.

  2. Buat akun layanan yang digunakan Pub/Sub untuk memanggil endpoint layanan recommender-parser.

    gcloud beta iam service-accounts create recommender-ci-subscription-sa \
      --description "Service Account used by Cloud Pub/Sub to push Cloud Build events to the recommender-parser service" \
      --display-name "recommender-ci-subscription-sa" \
      --project $BUILD_PROJECT_ID
    
  3. Akun layanan Pub/Sub harus dikaitkan dengan peran yang diperlukan agar dapat memublikasikan pesan dan memanggil layanan recommender-parser.

    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/pubsub.publisher \
      --project $BUILD_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/pubsub.subscriber \
      --project $BUILD_PROJECT_ID
    
    gcloud projects add-iam-policy-binding $BUILD_PROJECT_ID \
      --member serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role roles/run.invoker \
      --project $BUILD_PROJECT_ID
    
  4. Tambahkan akun layanan recommender-ci-subscription-sa yang Anda buat ke layanan recommender-parser sebagai anggota dengan peran invoker

    gcloud beta run services add-iam-policy-binding recommender-parser \
      --member=serviceAccount:recommender-ci-subscription-sa@$BUILD_PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/run.invoker --region=us-central1
    
  5. Buka Pub/Sub di konsol Google Cloud .

  6. Klik topik cloud-builds.

  7. Klik Buat Langganan.

  8. Untuk ID Langganan, ketik recommender-service-build-events.

  9. Untuk Delivery Type, pilih Push.

  10. Untuk Endpoint, ketik URL recommender-service Anda yang ditambahkan dengan /ci.

  11. Centang Aktifkan Autentikasi.

    1. Pilih akun layanan recommender-ci-subscription-sayang Anda buat.
    2. Klik Izinkan sebagai respons terhadap pesan perintah.
  12. Pilih Batas waktu konfirmasi 60 detik.

  13. Biarkan setelan default lainnya.

  14. Klik Buat.

Menguji pipeline

Pemberi rekomendasi membuat rekomendasi IAM jika sebagian izin untuk suatu peran belum digunakan selama 60 hari. Rekomendasi ukuran VM mengikuti pola yang serupa. Untuk tujuan pengujian pipeline ini sesuai permintaan, Anda akan menggunakan payload JSON rekomendasi contoh yang disediakan di subdirektori stub yang disediakan di repositori yang Anda clone untuk tutorial ini. Dengan demikian, Anda dapat menguji pipeline, kecuali panggilan API yang dilakukan recommender-parser ke endpoint Recommender API untuk memperbarui status rekomendasi yang berhasil diterapkan.

Atau, jika Anda memiliki rekomendasi aktif di project Google Cloud, Anda dapat menguji pipeline secara menyeluruh tanpa perlu menggunakan stub. Hasil yang diuraikan di bawah ini relevan saat Anda menggunakan payload contoh untuk menguji pipeline. Namun, langkah-langkah untuk menguji pipeline ini tanpa sampel tetap sama.

  1. Di konsol Google Cloud , buka project pengujian Anda dan tinjau resource yang dibuat. Anda harus memiliki hal berikut:

    1. Instance Compute Engine bernama tf-compute-1 dengan Jenis Mesin g1-small.
    2. Akun layanan bernama Terraform Recommender Test dengan peran editor untuk project pengujian Anda.
  2. Di halaman konsol Cloud Scheduler di project build, klik Run now untuk tugas recommender-iam-scheduler.

  3. Klik tugas untuk melihat log. Anda juga dapat melihat log layanan recommender-parser untuk mendapatkan tampilan mendetail tentang langkah-langkah yang dijalankan oleh layanan.

  4. Setelah layanan selesai berjalan, buka repositori IAC-REPO-NAME GitHub Anda. Layanan recommender-parser akan membuat permintaan pull untuk Anda. Tinjau manifes IaC yang diubah yang terdiri dari pull request ini, lalu klik Merge Pull Request jika Anda puas dengan perubahan pada manifes IaC Anda.

  5. Commit baru ke cabang master dibuat saat Anda menggabungkan permintaan pull. Tindakan ini akan memicu tugas Cloud Build yang men-deploy modifikasi ke resource Google Cloud di project test Anda. Tunggu beberapa saat hingga tugas Cloud Build selesai. Anda dapat meninjau statusnya di konsol Google Cloud

  6. Setelah tugas selesai, buka project pengujian Anda. Payload contoh yang diberikan membuat perubahan berikut pada resource di project pengujian Anda.

    • Akun layanan Terraform Test yang sebelumnya memiliki peran editor saat di-deploy, diubah menjadi viewer.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus kedua project yang Anda buat.

Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.

Untuk menghapus project:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Langkah berikutnya

  • Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.
  • Pelajari lebih lanjut Google Cloud Policy Intelligence dalam dokumentasi.