Cloud Scheduler dapat memanggil target HTTP yang memerlukan autentikasi jika Anda telah menyiapkan akun layanan terkait yang memiliki kredensial yang sesuai.
Menyiapkan akun layanan
Jika Anda belum memiliki akun layanan yang ingin digunakan untuk tugas Cloud Scheduler dengan target HTTP, buat akun layanan baru. Perhatikan hal-hal berikut:
Akun layanan harus merupakan milik project tempat tugas Cloud Scheduler dibuat.
Jangan gunakan akun layanan Cloud Scheduler default (
service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
). Akun layanan yang dikelola Google ini, yang juga dikenal sebagai agen layanan, tidak dapat digunakan untuk tujuan ini.Jangan hapus akun layanan Cloud Scheduler default dari project Anda, atau peran
Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent)
-nya. Tindakan tersebut akan menghasilkan respons403
ke endpoint yang memerlukan autentikasi, meskipun akun layanan tugas Anda memiliki peran yang sesuai.
Jika target Anda berada dalam Google Cloud, berikan peran IAM yang diperlukan ke akun layanan Anda. Setiap layanan dalam Google Cloud memerlukan peran tertentu, dan layanan penerima akan otomatis memverifikasi token yang dihasilkan. Misalnya, untuk Cloud Run dan fungsi Cloud Functions generasi kedua, Anda harus menambahkan peran
Cloud Run Invoker
.Perlu diperhatikan bahwa untuk men-deploy resource dengan akun layanan yang dikelola pengguna, deployer harus memiliki izin
iam.serviceAccounts.actAs
untuk akun layanan tersebut. Jika membuat akun layanan, Anda akan otomatis diberi izin ini. Jika tidak, seseorang yang memiliki izin yang benar harus memberikan izin ini di akun layanan kepada Anda.Praktik terbaik: Pada langkah sebelumnya, jika Anda membuat akun layanan khusus untuk memanggil layanan yang ditargetkan tugas Cloud Scheduler, pertimbangkan untuk mengikuti prinsip hak istimewa terendah (praktik terbaik keamanan) dengan mengikat akun dan izin invoker-nya ke layanan target Anda. Anda dapat melakukannya menggunakan Konsol Google Cloud atau gcloud CLI:
Konsol
1. Buka konsol Google Cloud.
2. Pilih project Anda.
3. Buka halaman untuk jenis resource yang Anda panggil. Misalnya, jika Anda memanggil layanan Cloud Run, buka halaman yang mencantumkan layanan Cloud Run.
4. Pilih kotak centang di sebelah kiri layanan yang ingin Anda panggil. (Jangan mengklik layanan.)
5. Klik tab Izin. Jika panel informasi tidak terlihat, Anda mungkin perlu mengklik Show Info Panel, lalu klik Permissions.
6. Klik
Tambahkan akun utama.7. Di bagian Tambahkan akun utama, masukkan alamat email untuk akun layanan yang Anda buat.
8. Di bagian Tetapkan peran, pilih peran yang akan diberikan dari menu drop-down. Ikuti prinsip hak istimewa terendah dengan memilih peran yang hanya menyertakan izin yang diperlukan akun utama Anda.
9. Klik Simpan.
gcloud
Jalankan perintah
add-iam-policy-binding
:gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL --role=ROLE
Ganti:
RESOURCE_TYPE
: Jenis resource target Anda. Misalnya,run
untuk target Cloud Run.RESOURCE_ID
: ID untuk target Anda. Misalnya, nama layanan untuk target Cloud Run.PRINCIPAL
: ID untuk akun layanan Anda. Ini memiliki bentuk berikut:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS
. Misalnya,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
.ROLE
: Nama peran yang diperlukan layanan target Anda untuk pemanggilan. Misalnya,roles/run.invoker
untuk Cloud Run atau target Cloud Functions generasi kedua.
Contoh:
Target Cloud Run: Perintah berikut memberikan peran Cloud Run Invoker ke akun layanan
my-service-account@my-project.iam.gserviceaccount.com
untukmy-service
layanan Cloud Run:gcloud run add-iam-policy-binding my-service \ --member=my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker
Target Cloud Functions: Perintah berikut memberikan peran Cloud Run Invoker yang diperlukan oleh fungsi Cloud Functions generasi kedua ke akun layanan
my-service-account@my-project.iam.gserviceaccount.com
untukmy-gen2-function
fungsi Cloud Functions generasi kedua:gcloud functions add-iam-policy-binding my-gen2-function \ --member=my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invoker --gen2
Jika target Anda berada di luar Google Cloud, layanan penerima harus memverifikasi token secara manual.
Akun layanan Cloud Scheduler default disiapkan secara otomatis saat Anda mengaktifkan Cloud Scheduler API, kecuali jika Anda mengaktifkannya sebelum 19 Maret 2019. Dalam hal ini, Anda harus menambahkan peran
Cloud Scheduler Service Agent
secara manual. Hal ini bertujuan agar akun layanan klien dapat membuat token header atas nama akun layanan klien untuk melakukan autentikasi ke target Anda.Anda dapat memverifikasi bahwa akun layanan Cloud Scheduler default disiapkan di project Anda dan memiliki peran
Cloud Scheduler Service Agent
yang diberikan kepadanya dengan melihat akses project Anda saat ini. Perlu diperhatikan bahwa jika Anda menggunakan konsol Google Cloud untuk melihat akses project, pastikan untuk mencentang kotak Include Google-driven role Grants.
Membuat tugas penjadwal dengan autentikasi
Untuk membuat tugas yang menggunakan autentikasi, Anda harus menambahkan jenis token dan alamat email yang mengidentifikasi akun layanan klien ke permintaan create-job
:
Konsol
- Tentukan frekuensi seperti biasa.
- Tentukan HTTP sebagai jenis target.
- Tambahkan URL dan metode HTTP seperti biasa.
- Dalam daftar Auth header, pilih jenis token. Perlu diperhatikan bahwa OIDC
(token ID) umumnya digunakan kecuali untuk Google API yang dihosting di
*.googleapis.com
karena API ini memerlukan token akses OAuth. - Untuk Akun layanan, tentukan email akun layanan klien.
- Audience bersifat opsional dan membatasi penerima token OIDC; biasanya, URL target tugas (tanpa parameter URL apa pun). Jika tidak ditentukan, secara default, seluruh URL akan digunakan sebagai audiens (termasuk parameter permintaan).
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" --uri=URI \ --oidc-service-account-email=CLIENT_SERVICE_ACCOUNT_EMAIL
Ganti kode berikut:
JOB_ID
: nama untuk tugas. ID ini harus unik dalam project. Perlu diperhatikan bahwa Anda tidak dapat menggunakan kembali nama tugas dalam project meskipun Anda menghapus tugas terkaitnya.FREQUENCY
: interval tugas adalah seberapa sering tugas harus dijalankan, misalnya,every 3 hours
atauevery 10 mins
. String yang Anda berikan di sini dapat berupa string apa pun yang kompatibel dengan Crontab. (Meskipun kami tidak lagi merekomendasikan penggunaannya, sintaksis cron App Engine lama masih didukung untuk tugas yang ada.)URI
: URL endpoint yang sepenuhnya memenuhi syarat.--oidc-service-account-email
atau--oauth-service-account-email
: menentukan jenis token. Perlu diperhatikan bahwa OIDC umumnya digunakan kecuali untuk Google API yang dihosting di*.googleapis.com
karena API ini mengharapkan token OAuth.CLIENT_SERVICE_ACCOUNT_EMAIL
: email akun layanan klien.- Parameter opsional lainnya tersedia dan dijelaskan di referensi command line gcloud.
Memilih jenis token
Untuk mengautentikasi antara Cloud Scheduler dan target HTTP, Cloud Scheduler membuat token header berdasarkan akun layanan klien Anda, yang diidentifikasi oleh email-nya, lalu mengirimkannya ke target menggunakan HTTPS.
Anda dapat menggunakan token ID (OIDC)
atau token OAuth (akses). OIDC umumnya digunakan kecuali untuk Google API yang dihosting di *.googleapis.com
karena API ini memerlukan token OAuth.
Tambahkan peran Agen Layanan Cloud Scheduler ke akun layanan Cloud Scheduler Anda secara manual
Langkah ini hanya diperlukan jika salah satu kondisi berikut terpenuhi:
- Anda telah mengaktifkan Cloud Scheduler API sebelum 19 Maret 2019
- Anda menghapus peran Agen Layanan Cloud Scheduler dari akun layanan
Akun layanan Cloud Scheduler memerlukan peran Agen Layanan Cloud Scheduler. Tanpa peran ini, tugas Cloud Scheduler akan gagal. Anda dapat menambahkan peran Agen Layanan Cloud Scheduler ke akun layanan Cloud Scheduler dari Google Cloud Console atau menggunakan gcloud CLI:
Konsol
Di konsol Google Cloud, buka halaman Cloud Scheduler API.
Jika ada kolom Status dan statusnya tercantum sebagai Enabled, lanjutkan. Jika belum, klik Enable.
Di konsol Google Cloud, buka halaman Settings.
Temukan dan salin nomor project Anda.
Di Konsol Google Cloud, buka halaman IAM.
Klik Berikan akses. Panel Berikan akses akan terbuka.
Di kolom New principals, tambahkan alamat email dengan format:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Ganti
PROJECT_NUMBER
dengan nomor project Google Cloud Anda.Dalam daftar Select a role, telusuri dan pilih Cloud Scheduler Service Agent.
Klik Simpan.
gcloud
Pastikan Cloud Scheduler API diaktifkan untuk project Anda:
gcloud services list --enabled \ --filter=cloudscheduler.googleapis.com
Jika Anda melihat output berikut, berarti API telah diaktifkan:
NAME: cloudscheduler.googleapis.com TITLE: Cloud Scheduler API
Jika tidak (misalnya, jika Anda melihat
Listed 0 items.
), aktifkan API:gcloud services enable cloudscheduler.googleapis.com
Temukan nomor project Anda:
gcloud projects describe PROJECT_ID --format='table(projectNumber)'
Ganti
PROJECT_ID
dengan project ID Anda.Salin nomornya.
Berikan peran
Cloud Scheduler Service Agent
ke akun layanan Cloud Scheduler:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com \ --role roles/cloudscheduler.serviceAgent
Ganti kode berikut:
PROJECT_ID
: project ID AndaPROJECT_NUMBER
: nomor project yang sebelumnya Anda salin