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 beban kerja mereka.
Rekomendasi 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 admin untuk menghapus akses yang tidak perlu ke resource Google Cloud dan mengubah ukuran instance Compute Engine untuk penggunaan resource yang lebih efisien.
Setiap rekomendasi menyertakan tindakan yang disarankan dan dampaknya. Setelah meninjau rekomendasi untuk dampak yang diidentifikasi serta pertimbangan lain yang spesifik 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 Infrastructure as Code (IaC).
IaC memungkinkan Anda mengotomatiskan pembuatan resource Google Cloud.Anda harus terus memperbarui repositori IaC dan merutekan perubahan yang dilakukan ke organisasi Google Cloud melalui repositori tersebut. Strategi IaC di organisasi umumnya terbukti bermanfaat jika diterapkan dengan cermat dan berfungsi sebagai satu versi yang terpercaya untuk infrastruktur cloud Anda. Memperbarui repositori IaC Anda sangat penting untuk mencegah perbedaan antara versi infrastruktur yang ditampilkan repositori IaC dan yang Anda miliki di organisasi.
Rekomendasi IAM
Di antara praktik utama lainnya, praktik yang umum adalah prinsip keamanan hak istimewa minimum dan pertimbangan yang cermat tentang cara perubahan pada organisasi Anda diluncurkan dan disinkronkan dengan repositori IaC Anda.
Rekomendasi ukuran untuk VM
Rekomendasi ukuran membantu Anda menurunkan biaya dengan memberikan saran untuk mengubah ukuran jenis mesin instance agar menggunakan resource instance secara lebih efisien
Tutorial ini menjelaskan cara merancang dan membuat pipeline otomatisasi untuk menerapkan rekomendasi Policy Intelligence secara terprogram. Sebagai bagian dari pipeline otomatisasi ini, Anda akan mempelajari cara membuat repositori IaC selalu terbaru dengan perubahan yang Anda putuskan untuk dilakukan pada organisasi Google Cloud, berdasarkan rekomendasi ukuran VM dan binding kebijakan IAM yang disediakan Recommender.
Tutorial ini menggunakan Hashicorp Terraform sebagai alat IaC, tetapi pola arsitektur dan komponen yang digunakan dalam pipeline otomatisasi yang dijelaskan dapat dimanfaatkan meskipun Anda menggunakan alat manajemen IaC yang berbeda seperti Deployment Manager. Anda harus memodifikasi codebase open source yang tersedia dengan tutorial ini agar sesuai dengan implementasi IaC tertentu.
Panduan ini ditujukan untuk arsitek, pemilik produk, dan developer yang mungkin bertanggung jawab atas administrasi, keamanan, dan perencanaan infrastruktur Google Cloud mereka.
Arsitektur pipeline otomatisasi
Diagram berikut menunjukkan komponen yang Anda gunakan dalam pipeline otomatisasi ini.
Tugas Cloud Scheduler terjadwal menjalankan layanan Recommender Parser. Layanan ini memanggil Recommender API untuk mengambil rekomendasi Recommender untuk project yang Anda tentukan. Kemudian, alat ini mengurai rekomendasi IAM dan ukuran VM ini untuk memetakan rekomendasi tersebut ke konfigurasi yang Anda miliki dalam manifes Terraform. Layanan ini akan memperbarui manifes IaC Anda untuk mencerminkan rekomendasi ini. Tindakan ini akan membuat permintaan pull dengan perubahan sehingga Anda dapat meninjau update. Setelah Anda meninjau dan menggabungkan permintaan pull, tugas Cloud Build akan meluncurkan perubahan pada infrastruktur Anda di organisasi Google Cloud Anda.
Beberapa layanan Google Cloud tambahan digunakan dalam pipeline untuk tujuan melacak rekomendasi yang diproses, membuat notifikasi saat build selesai, dan menyimpan status Terraform. Anda akan mempelajari layanan ini lebih lanjut selama tutorial ini.
Daftar berikut menjelaskan tujuan komponen dan persyaratan kontrol akses:
- Platform Intelligence Recommenders
- 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 Rekomendasi untuk memilih peran yang paling sesuai dan berlaku untuk akun layanan yang Anda gunakan untuk menjalankan layanan parser rekomendasi.
- Cloud Scheduler
Tujuan: Cloud Scheduler memicu layanan Recommender Parser. Cloud Scheduler memungkinkan Anda menyiapkan beberapa tugas yang memanggil sebanyak mungkin instance layanan parser yang Anda butuhkan. Setiap pemanggilan harus meneruskan input berikut
- Daftar project yang rekomendasinya harus diproses
- Jenis Rekomendasi
- Nama repositori IaC
Kontrol akses: Buat atau identifikasi akun layanan Google Cloud yang akan digunakan untuk panggilan dari Cloud Scheduler ke layanan Recommender Parser Anda.
Berikan peran Agen Layanan Cloud Scheduler ke akun layanan agar 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 terautentikasi untuk tugas penjadwal untuk mengetahui detailnya.
- Layanan Cloud Run
Tujuan:: Layanan parser perekomendasikan adalah tempat semua logika pemrosesan berada. API ini memiliki beberapa rute, yang masing-masing memiliki tujuan tertentu:
- Mengurai 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 sesuai rekomendasi kecerdasan kebijakan.
Kontrol akses: Akun layanan Cloud Build harus memiliki kumpulan izin yang tepat untuk berinteraksi dengan resource dalam 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 dibuat ke cabang master, tugas Cloud Build akan dipicu untuk menjalankan kumpulan tugas yang telah dikonfigurasi sebelumnya.
Kontrol akses: Anda harus membuat kunci SSH untuk mengaktifkan akses ke repositori IaC.
Selain itu, Anda perlu membuat Token Akses Pribadi untuk mendorong commit ke GitHub.
- Firestore
Firestore adalah database dokumen NoSQL yang skalabel dan terkelola sepenuhnya yang digunakan dalam arsitektur ini untuk mempertahankan informasi yang terkait dengan ID Rekomendasi yang diuraikan oleh layanan Recommender Parser, beserta detail yang sesuai terkait commit Git.
Detail yang dipertahankan di Firestore memainkan peran penting dalam loop masukan yang merupakan bagian dari pipeline menyeluruh. Setelah mengambil rekomendasi yang dihasilkan oleh Recommender API dan sebelum memproses rekomendasi, layanan akan menandai status rekomendasi menjadi
CLAIMED
. Setelah rekomendasi berhasil diterapkan, layanan akan membuat kueri database untuk mengambil ID rekomendasi yang telah berhasil diterapkan oleh tugas Cloud Build dan mengubah status rekomendasi menjadiSUCCEEDED
. Jika Tugas Cloud Build gagal, status rekomendasi akan diubah menjadiFAILED
.Kontrol akses: Lihat Peran Firestore untuk mengetahui detailnya. Layanan parser rekomendasi 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 dibuat secara otomatis untuk Anda saat mengaktifkan Cloud Build API di project.
Kontrol akses: Langganan push dapat dikonfigurasi untuk memberikan header autentikasi agar layanan dapat memberikan otorisasi pada permintaan. Baca Menggunakan Langganan Push untuk mengetahui detail selengkapnya.
Tujuan
- Buat 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 membuat pipeline ini.
- Pahami asumsi dan praktik terbaik yang perlu Anda perhatikan untuk membuat pipeline ini
- Menguji pipeline
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang 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.
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 variasi 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 dapat menyebabkan gangguan.
- 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 mengasumsikan konfigurasi deklaratif variabel Terraform dalam file tfvars.
- Pemberi rekomendasi membuat rekomendasi IAM jika sebagian izin untuk peran belum digunakan selama 60 hari dan rekomendasi ukuran VM mengikuti pola yang serupa. Untuk tujuan tutorial ini, contoh payload rekomendasi 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 membuat peningkatan spesifik yang diperlukan pada alur penguraian agar sesuai dengan struktur direktori dan penggunaan modul Anda.
Versi saat ini dari layanan parser pemberi rekomendasi open source selaras dengan batasan umum berikut dari rekomendasi IAM:
- Rekomendasi hanya dapat dibuat untuk binding kebijakan IAM yang:
- Di tingkat project
- Terkait dengan akun pengguna dan akun layanan yang dikelola pengguna
- Rekomendasi IAM hanya mendukung peran dasar dan peran bawaan. Peran kustom dan binding bersyarat tidak dapat dievaluasi atau direkomendasikan.
- Peran yang direkomendasikan hanya berisi sebagian izin peran saat ini. Tidak ada izin baru yang diperkenalkan oleh peran yang direkomendasikan.
Prasyarat
- Pilih atau buat dua project Google Cloud.
- Project build yang menghosting dan menjalankan pipeline otomatisasi.
- Project pengujian yang menghosting resource Google Cloud yang digunakan untuk menguji pipeline otomatisasi.
-
Make sure that billing is enabled for your Google Cloud project.
- Di project test, aktifkan Recommender dan Compute Engine API.
- Di project build, aktifkan Cloud Run, Firestore, Pub/Sub, dan Cloud Scheduler, IAM, serta CloudResourceManager API.
Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Lihat Pembersihan untuk mengetahui detail selengkapnya.
Menyiapkan lingkungan Anda
- Di konsol Google Cloud, pilih project
build
Anda. Di konsol Google Cloud, 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 diinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Perlu waktu beberapa detik untuk melakukan inisialisasi sesi.
Gunakan Cloud Shell untuk semua perintah terminal dalam tutorial ini.
Buat variabel lingkungan untuk menyimpan nomor project untuk project
build
Anda menggunakan perintah di bawah:export BUILD_PROJECT_ID=$DEVSHELL_PROJECT_ID
Buat variabel lingkungan untuk menyimpan nomor project untuk project
test
Anda . Salin project ID pengujian secara manual dan ganti PROJECT-ID dengan project ID tersebut,export TEST_PROJECT_ID=PROJECT-ID
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.
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
Tetapkan project
build
sebagai project default:gcloud config set project $BUILD_PROJECT_ID
Buat variabel lingkungan bernama
BUILD_PROJECT_NUMBER
untukbuild
nomor project Andaexport BUILD_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
Clone repositori GitHub untuk tutorial ini:
Membuat Bucket untuk Status Terraform
Buat bucket Cloud Storage di project build Anda 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
Membuat repositori GitHub untuk digunakan sebagai repositori IaC contoh
Buat repositori GitHub pribadi baru. Repositori IAC-REPO-NAME ini berfungsi sebagai repositori IaC untuk tujuan tutorial ini
Pada langkah-langkah berikut, Anda akan mengirim file di subdirektori
sample-iac
repositori yang di-clone ke akun GitHub Anda.Di Cloud Shell, salin direktori
sample-iac
ke direktori rumah Anda. Anda akan menggunakan direktori ini untuk membuat repositori lokal baru dan mendorongnya ke GitHub.cp -r recommender-iac-pipeline-nodejs-tutorial/sample-iac $HOME
Buka direktori baru
cd $HOME/sample-iac
Lakukan inisialisasi repositori di komputer lokal Anda.
git init
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
Ganti placeholder dalam file di repositori ini dengan
test
project 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
Tambahkan, commit, dan kirim ke GitHub.
git add . git commit -m "First Commit" git push origin master
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.
Buat kunci SSH untuk repositori GitHub Anda.
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"
Saat Anda diminta untuk "Masukkan file tempat menyimpan kunci", tekan Enter. Tindakan ini akan menerima lokasi file default.
Saat diminta memasukkan frasa sandi, tekan Enter.
Catat direktori SSH-KEYS-DIR tempat Anda menyimpan kunci SSH yang didownload. Secara default, lokasinya adalah
$HOME/.ssh/
Salin kunci publik SSH yang Anda buat ke repositori GitHub sebagai Kunci Deployment.
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
Di akun GitHub Anda, buka repositori IAC-REPO-NAME
Klik Setelan > Deploy Kunci.
Klik Tambahkan Kunci Deployment, lalu tempel kunci publik SSH yang Anda salin. Pilih Judul untuk kunci.
Centang kotak "Izinkan akses tulis"
Klik Simpan.
Kembali ke sesi Cloud Shell
Buat file
known_hosts
untuk GitHub. Dalam sesi Cloud Shell Anda, jalankan perintah:ssh-keyscan github.com >> ~/.ssh/known_hosts
Buat bucket Cloud Storage di project
build
, lalu upload kunci SSH dan fileknown_hosts
ke dalamnya. 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
Buat Token Akses Pribadi untuk GitHub. Token ini digunakan saat melakukan operasi Git menggunakan panggilan API yang dibuat oleh layanan parser rekomendasi untuk membuat permintaan pull, check-in manifes IaC yang diperbarui.
Di akun GitHub Anda, di pojok kanan atas halaman mana pun, klik foto profil Anda, lalu klik Setelan.
Di sidebar kiri, klik Setelan developer.
Di sidebar kiri, klik Token akses pribadi
Klik Buat token baru.
Beri token Anda nama deskriptif.
Pilih cakupan sebagai repo.
Klik Generate Token.
Salin token ke papan klip Anda.
Dalam sesi Cloud Shell, buat variabel lingkungan.
export GITHUB_PAT=personal-access-token-you-copied
Siapkan Cloud Build
Hubungkan repositori Git IAC-REPO-NAME Anda untuk berintegrasi dengan Cloud Build.
- Buka halaman Aplikasi Cloud Build di GitHub Marketplace.
- Scroll ke bawah, lalu klik Setup with Google Cloud Build di bagian bawah halaman.
- Jika diminta, Login ke GitHub.
- Pilih Hanya pilih repositori. Gunakan menu drop-down Select repositories untuk hanya mengaktifkan akses ke IAC-REPO-NAME di aplikasi Cloud Build.
- Klik Instal.
Login ke Google Cloud
Halaman Otorisasi akan ditampilkan, tempat Anda diminta untuk mengizinkan aplikasi Google Cloud Build terhubung ke Google Cloud.
Klik otorisasikan Google Cloud Build dengan GoogleCloudBuild. Anda akan dialihkan ke konsol Google Cloud.
Pilih project Google Cloud Anda.
Centang kotak izin, lalu klik Berikutnya.
Di halaman Select repository yang muncul, pilih repositori GitHub IAC-REPO-NAME
Klik Connect repository.
Klik Create a Trigger. Tindakan ini akan membuat definisi pemicu untuk Anda.
Klik Buat untuk menyimpan pemicu build Anda.
Untuk mengetahui informasi selengkapnya, lihat Menjalankan build di GitHub.
Direktori yang Anda salin memiliki file
cloudbuild.yaml
. File konfigurasi ini menguraikan langkah-langkah yang dieksekusi tugas Cloud Build saat dipicu.steps: - name: hashicorp/terraform:0.12.0 args: ['init'] - name: hashicorp/terraform:0.12.0 args: ['apply', '-auto-approve']
Tambahkan izin ke akun layanan Cloud Build Anda agar 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
Buka halaman Pemicu Build di Konsol Google Cloud.
Pilih project
build
, klik Open.Perbarui definisi pemicu:
- Klik menu , lalu klik Edit.
- Untuk Konfigurasi, pilih opsi Cloud Build
configuration file (yaml or json) dan ketik
cloudbuild.yaml
di kolom teks. - Klik Simpan.
Untuk menguji pemicu build secara manual, klik Run pada entri pemicu di daftar pemicu.
Pastikan instance Compute Engine bernama
tf-compute-1
dan akun layanan bernamaTerraform Recommender Test
dibuat di project pengujian Anda oleh tugas Cloud Build yang Anda jalankan di langkah sebelumnya
Men-deploy layanan Cloud Run parser rekomendasi
Di Cloud Shell, Ubah direktori ke direktori yang dibuat dengan meng-clone repositori
cd $HOME/recommender-iac-pipeline-nodejs-tutorial/parser-service
Konfigurasikan Google Cloud untuk menggunakan region default untuk layanan Cloud Run. Dalam tutorial ini, Anda menggunakan region us-central1, tetapi Anda dapat memilih region yang didukung yang berbeda jika mau.
gcloud config set run/region us-central1
Direktori
parser-service
memiliki subdirektori stub yang memiliki beberapa contoh JSON payload untuk Anda gunakan dalam menguji layanan parser rekomendasi. 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
Jalankan perintah berikut untuk membuat variabel lingkungan bagi image Docker Anda.
export IMAGE=gcr.io/$BUILD_PROJECT_ID/recommender-parser:1.0
Build image dan upload ke Container Registry
gcloud builds submit --tag $IMAGE .
Buat akun layanan untuk layanan parser rekomendasi agar dapat berinteraksi dengan layanan Google Cloud lainnya 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
Layanan parser rekomendasi 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
Berikan akses akun layanan layanan parser rekomendasi 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
Deploy layanan Cloud Run, yang disebut recommender-parser, dengan menjalankan perintah. Ganti GITHUB-ACCOUNT dengan nama pengguna akun GitHub Anda, bukan email. Terima 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
- Di konsol Google Cloud, di project
build
, buka halaman Firestore. - Saat diminta untuk memilih mode, klik Pilih Mode Native.
- Pilih
us-east1
sebagai lokasi default. - 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
atauFAILED
sebagaimana mestinya. Ini adalah langkah utama yang membuat pipeline idempotent dengan memastikan bahwa rekomendasi tidak diproses secara tidak lengkap atau beberapa kali.
Menyiapkan tugas Cloud Scheduler
Buat akun layanan yang digunakan tugas Cloud Scheduler untuk menjalankan layanan parser rekomendasi.
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
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
Dapatkan URL layanan perekomendasikan 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 ukuran VM.
Buat variabel untuk endpoint yang dipanggil tugas Cloud Scheduler. Ganti RECOMMENDER-SERVICE-URL dengan URL layanan perekomendasikan 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
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 membuatnya seperti yang diuraikan di bawah:
repo
: Ini adalah nama repositori GitHub Anda IAC-REPO-NAME yang Anda buat di Membuat repositori GitHub.projects
: Daftar / array project ID Google Cloud yang dipetakan ke repositori GitHub IaC ini. Dalam tutorial ini, projecttest
Anda.stub
: Pemberi rekomendasi membuat rekomendasi IAM saat sebagian izin untuk peran belum digunakan selama 60 hari dan rekomendasi ukuran VM mengikuti pola yang serupa. Untuk tujuan menguji pipeline ini sesuai permintaan,stub
dapat diteruskan sebagaitrue
sehingga pipeline diuji menggunakan contoh payload Rekomendasi 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 yang disebut cloud-builds yang dibuat secara otomatis saat Anda mengaktifkan Cloud Build API di project build.
Jalankan perintah berikut untuk memverifikasi bahwa topik cloud-builds ada di project
build
Anda:gcloud pubsub topics describe cloud-builds
Jika topik sudah 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 notifikasi build, guna membuat topik secara manual.
Buat akun layanan yang digunakan Pub/Sub untuk memanggil endpoint layanan parser rekomendasi.
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
Akun layanan Pub/Sub harus dikaitkan dengan peran yang diperlukan agar dapat memublikasikan pesan dan memanggil layanan parser rekomendasi.
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
Tambahkan akun layanan
recommender-ci-subscription-sa
yang Anda buat ke layanan parser rekomendasi sebagai anggota dengan peraninvoker
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
Buka Pub/Sub di konsol Google Cloud.
Klik topik cloud-builds.
Klik Buat Langganan.
Untuk ID Langganan, ketik
recommender-service-build-events
.Untuk Delivery Type, pilih Push.
Untuk Endpoint, ketik URL layanan perekomendasikan Anda yang ditambahkan dengan
/ci
.Centang Enable Authentication.
- Pilih akun layanan
recommender-ci-subscription-sa
yang Anda buat. - Klik Berikan sebagai respons terhadap pesan perintah.
- Pilih akun layanan
Pilih Batas waktu konfirmasi sebagai 60 detik.
Biarkan setelan default lainnya.
Klik Create.
Menguji pipeline
Pemberi rekomendasi membuat rekomendasi IAM saat sebagian izin untuk suatu peran belum digunakan selama 60 hari. Rekomendasi ukuran VM
mengikuti pola yang serupa. Untuk tujuan menguji pipeline ini
sesuai permintaan, Anda akan menggunakan contoh payload JSON rekomendasi
yang disediakan di subdirektori stub
yang disediakan di repositori yang Anda clone untuk
tutorial ini. Hal ini memungkinkan Anda menguji pipeline, dengan mengecualikan panggilan API yang
dilakukan parser rekomendasi ke endpoint Recommender API untuk
memperbarui status rekomendasi yang telah berhasil diterapkan.
Atau, jika memiliki rekomendasi aktif dalam project Google Cloud, Anda dapat menguji pipeline secara menyeluruh tanpa perlu menggunakan stub. Hasil yang diuraikan di bawah ini relevan dengan saat Anda menggunakan payload contoh untuk menguji pipeline. Namun, langkah-langkah untuk menguji pipeline ini tanpa sampel tetap sama.
Di konsol Google Cloud, buka project pengujian Anda dan tinjau resource yang dibuat. Anda harus memiliki hal berikut:
- Instance Compute Engine yang disebut
tf-compute-1
dengan Jenis Mesing1-small
. - Akun layanan bernama
Terraform Recommender Test
dengan peraneditor
untuk project pengujian Anda.
- Instance Compute Engine yang disebut
Di halaman konsol Cloud Scheduler di project
build
, klik Run now untuk tugas recommender-iam-scheduler.Klik tugas untuk melihat log. Anda juga dapat melihat log layanan parser rekomendasi untuk mendapatkan tampilan mendetail tentang langkah-langkah yang dijalankan oleh layanan.
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 membentuk permintaan pull ini dan klik Merge Pull Request jika Anda puas dengan perubahan pada manifes IaC.Commit baru ke cabang master dibuat saat Anda menggabungkan permintaan pull. Tindakan ini akan memicu tugas Cloud Build yang meluncurkan modifikasi ke resource Google Cloud di project
test
Anda. Tunggu beberapa saat hingga tugas Cloud Build selesai, Anda dapat meninjau statusnya di konsol Google CloudSetelah tugas selesai, buka project pengujian Anda. Contoh payload yang diberikan membuat perubahan berikut pada resource dalam project pengujian Anda.
- Akun layanan Pengujian Terraform yang sebelumnya memiliki peran
editor
saat di-deploy, diubah menjadiviewer
.
- Akun layanan Pengujian Terraform yang sebelumnya memiliki peran
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- 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 di dokumentasi.