Cloud Scheduler dapat memanggil target HTTP yang memerlukan autentikasi jika Anda menyiapkan akun layanan terkait yang memiliki kredensial yang sesuai.
Menyiapkan akun layanan
Akun layanan biasanya digunakan oleh workload aplikasi atau komputasi dan diidentifikasi oleh alamat emailnya, yang bersifat unik untuk akun tersebut.
Aplikasi dapat menggunakan akun layanan untuk melakukan panggilan API yang diotorisasi dengan melakukan autentikasi sebagai akun layanan itu sendiri, dan mengakses semua resource yang memiliki izin akses akun layanan.
Cara paling umum untuk mengizinkan aplikasi melakukan autentikasi sebagai akun layanan adalah dengan memasang akun layanan ke resource yang menjalankan aplikasi. Kemudian, Anda dapat memberikan peran Identity and Access Management (IAM) ke akun layanan untuk mengizinkan akun layanan mengakses Google Cloud resource.
Jika Anda belum memiliki akun layanan yang ingin digunakan untuk tugas Cloud Scheduler dengan target HTTP, buat akun layanan baru. Perhatikan hal berikut:
Akun layanan harus milik project tempat tugas Cloud Scheduler dibuat.
Jangan gunakan agen layanan Cloud Scheduler (
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Agen layanan ini tidak dapat digunakan untuk tujuan ini.Jangan cabut peran Agen Layanan Cloud Scheduler (
roles/cloudscheduler.serviceAgent) dari agen layanan Cloud Scheduler di project Anda. Jika melakukannya, endpoint yang memerlukan autentikasi akan menampilkan respons403, meskipun akun layanan tugas Anda memiliki peran yang sesuai.
Jika target Anda berada di dalam Google Cloud, berikan peran IAM yang diperlukan ke akun layanan Anda. Setiap layanan di dalam Google Cloud memerlukan peran tertentu, dan layanan penerima akan otomatis memverifikasi token yang dibuat.
Misalnya, untuk Cloud Run dan fungsi Cloud Run versi terbaru, Anda harus memberikan peran Cloud Run Invoker (
roles/run.invoker), sedangkan untuk fungsi Cloud Run (generasi ke-1), Anda harus memberikan peran Cloud Functions Invoker (roles/cloudfunctions.invoker).Untuk mendapatkan izin yang diperlukan untuk melampirkan akun layanan ke resource, minta administrator untuk memberi Anda peran IAM Pengguna Akun Layanan (
roles/iam.serviceAccountUser) pada akun layanan. Peran yang telah ditetapkan ini berisi iziniam.serviceAccounts.actAs, yang diperlukan untuk melampirkan akun layanan ke resource. (Jika Anda yang membuat akun layanan, Anda akan otomatis diberi izin ini.)Pada langkah sebelumnya, jika Anda secara khusus membuat akun layanan untuk memanggil layanan yang ditargetkan oleh tugas Cloud Scheduler, Anda dapat mengikuti prinsip hak istimewa terendah dengan mengikat akun dan izin pemanggilnya ke layanan target:
Konsol
Di Google Cloud konsol, di halaman pemilih project, pilih Google Cloud project.
Buka halaman untuk jenis resource yang Anda panggil. Misalnya, jika Anda memanggil layanan Cloud Run, buka halaman yang mencantumkan layanan Cloud Run.
Pilih kotak centang di sebelah kiri layanan yang ingin Anda panggil. (Jangan mengklik layanan.)
Klik tab Permissions .
Jika panel informasi tidak terlihat, Anda mungkin perlu mengklik Show Info Panel > Permissions.
Klik Add principal.
Di kolom New principals, masukkan alamat email untuk akun layanan yang Anda buat.
Dari daftar Select a role, pilih peran yang akan diberikan.
Ikuti prinsip hak istimewa terendah dengan memilih peran yang hanya menyertakan izin yang diperlukan oleh akun utama Anda.
Klik Save.
gcloud
gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \ --member=PRINCIPAL \ --role=ROLEGanti kode berikut:
RESOURCE_TYPE: jenis resource target Anda. Misalnya,run servicesuntuk target layanan Cloud Run.RESOURCE_ID: ID untuk target Anda. Misalnya, nama layanan Cloud Run.PRINCIPAL: ID untuk akun layanan Anda. Ini memiliki format berikut:serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS. Misalnya,serviceAccount:my-service-account@my-project.iam.gserviceaccount.com.ROLE: nama peran yang diperlukan oleh layanan target Anda untuk pemanggilan. Misalnya,roles/run.invokeruntuk target layanan Cloud Run. Untuk target fungsi Cloud Run, sebaiknya gunakan perintahadd-invoker-policy-binding.
Contoh:
Gunakan perintah
gcloud run services add-iam-policy-bindinguntuk memberikan peran IAM Cloud Run Invoker (roles/run.invoker) ke akun layananmy-service-account@my-project.iam.gserviceaccount.comdi layanan Cloud Runmy-service:gcloud run services add-iam-policy-binding my-service \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \ --role=roles/run.invokerGunakan
gcloud functions add-invoker-policy-bindingperintah untuk memberikan peran yang sesuai ke akun layananmy-service-account@my-project.iam.gserviceaccount.comdi fungsi Cloud Runmy-cloud-function.Untuk fungsi Cloud Run versi terbaru, tindakan ini akan menambahkan Cloud Run Invoker (
roles/run.invoker) binding ke kebijakan IAM layanan Cloud Run yang mendasari fungsi yang ditentukan. Untuk fungsi Cloud Run (generasi ke-1), tindakan ini akan menambahkan Cloud Functions Invoker (roles/cloudfunctions.invoker) binding ke kebijakan IAM fungsi yang ditentukan:gcloud functions add-invoker-policy-binding my-cloud-function \ --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com
Untuk contoh penggunaan Terraform untuk membuat akun layanan dengan izin untuk memanggil layanan Cloud Run, lihat Membuat akun layanan untuk Cloud Scheduler.
Jika target Anda berada di luar Google Cloud, layanan penerima harus memverifikasi token secara manual.
Agen layanan Cloud Scheduler default akan otomatis disiapkan saat Anda mengaktifkan Cloud Scheduler API, kecuali jika Anda mengaktifkannya sebelum 19 Maret 2019. Dalam hal ini, Anda harusmemberikan peran Agen Layanan Cloud Scheduler. Hal ini agar agen layanan dapat membuat token header atas nama akun layanan Anda untuk melakukan autentikasi ke target Anda.
Membuat tugas Cloud Scheduler yang menggunakan autentikasi
Untuk melakukan autentikasi antara Cloud Scheduler dan target HTTP, Cloud Scheduler akan membuat token header berdasarkan akun layanan klien Anda, yang diidentifikasi berdasarkan emailnya, dan mengirimkannya, menggunakan HTTPS, ke target.
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 mengharapkan token OAuth.
Untuk membuat tugas Cloud Scheduler yang menggunakan autentikasi, Anda harus menambahkan jenis token dan alamat email yang mengidentifikasi akun layanan klien saat membuat tugas:
Konsol
Di Google Cloud konsol, buka halaman Cloud Scheduler.
Klik Create job.
Di kolom Name, masukkan nama untuk tugas Anda yang unik untuk project. Perlu diperhatikan bahwa Anda tidak dapat menggunakan kembali nama tugas dalam sebuah project meskipun menghapus tugas terkaitnya.
Dalam daftar Region, pilih region untuk tugas Anda.
Tentukan Frequency dan Timezone untuk tugas Anda. String yang Anda berikan di sini dapat berupa unix-cron yang kompatibel string.
Klik Continue.
Dalam daftar Target type, pilih HTTP.
Tentukan URL dan HTTP method.
Dalam daftar Auth header, pilih jenis token. Token OIDC umumnya digunakan kecuali untuk Google API yang dihosting di
*.googleapis.comkarena API ini mengharapkan token OAuth.Dalam daftar Service account, pilih email akun layanan Anda.
Secara opsional, tentukan Audience yang membatasi penerima untuk token OIDC; biasanya, URL target tugas tanpa parameter URL apa pun. Jika tidak ditentukan, seluruh URL akan digunakan sebagai audiens, termasuk parameter permintaan.
Konfigurasikan setelan opsional apa pun.
Klik Create.
gcloud
gcloud scheduler jobs create http JOB_ID \ --schedule="FREQUENCY" \ --uri=URI \ --oidc-service-account-email=SERVICE_ACCOUNT_EMAIL
Ganti kode berikut:
JOB_ID: nama untuk tugas yang unik untuk project. Perlu diperhatikan bahwa Anda tidak dapat menggunakan kembali nama tugas dalam sebuah project meskipun menghapus tugas terkaitnya.FREQUENCY: interval atau frekuensi tugas akan dijalankan; misalnya,every 3 hoursatauevery 10 mins. String yang Anda berikan di sini dapat berupa unix-cron yang kompatibel string.URI: URL endpoint yang sepenuhnya memenuhi syarat.SERVICE_ACCOUNT_EMAIL: email akun layanan Anda. Token OIDC umumnya digunakan kecuali untuk Google API yang dihosting di*.googleapis.comkarena API ini mengharapkan token OAuth. (Gunakan flag--oauth-service-account-emailsebagai gantinya untuk menentukan jenis token OAuth.)- Parameter opsional lainnya dijelaskan dalam referensi command line gcloud.
Memberikan peran Agen Layanan Cloud Scheduler
Beberapalayanan memerlukan akses ke resource Anda agar layanan tersebut dapat bertindak atas nama Anda. Google Cloud Untuk memenuhi kebutuhan ini, Google Cloud membuat dan mengelola akun layanan yang dikenal sebagai agen layanan dan yang dibuat serta diberi peran secara otomatis saat Anda mengaktifkan dan menggunakan Google Cloud layanan.
Agen layanan Cloud Scheduler memerlukan peran
Agen Layanan Cloud Scheduler
(roles/cloudscheduler.serviceAgent). Tanpa peran ini, tugas Cloud Scheduler akan gagal. Anda dapat memberikan peran secara manual ke agen layanan Cloud Scheduler yang memiliki alamat email dengan format berikut:
service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com
Anda hanya perlu memberikan peran secara manual jika salah satu hal berikut benar:
- Anda mengaktifkan Cloud Scheduler API sebelum 19 Maret 2019
- Anda menghapus peran Agen Layanan Cloud Scheduler dari agen layanan
Anda dapat memverifikasi bahwa agen layanan Cloud Scheduler telah disiapkan di project Anda dan bahwa agen layanan tersebut memiliki peran Agen Layanan Cloud Scheduler yang diberikan kepada agen layanan tersebut dengan melihat akses saat ini ke project Anda. Perhatikan bahwa jika Anda menggunakan Google Cloud konsol untuk melihat akses project, pastikan untuk mencentang kotak Include Google-provided role grants.
Untuk mempelajari cara memberikan peran ke agen layanan, lihat Membuat dan memberikan peran untuk agen layanan.
Langkah berikutnya
Pelajari cara melakukan autentikasi ke Cloud Scheduler secara terprogram.