Menggunakan autentikasi dengan target HTTP

Cloud Scheduler dapat memanggil target HTTP yang memerlukan autentikasi jika Anda telah menyiapkan akun layanan terkait yang memiliki kredensial yang sesuai.

Menyiapkan akun layanan

  1. 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 merupakan bagian dari project tempat tugas Cloud Scheduler dibuat.

    • Jangan gunakan agen layanan Cloud Scheduler (service-YOUR_PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com). Agen ini tidak dapat digunakan untuk tujuan ini.

    • Jangan mencabut peran Agen Layanan Cloud Scheduler (roles/cloudscheduler.serviceAgent) dari agen layanan Cloud Scheduler di project Anda. Tindakan ini akan menghasilkan respons 403 ke endpoint yang memerlukan autentikasi, meskipun akun layanan tugas Anda memiliki peran yang sesuai.

  2. 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 Run generasi kedua, Anda harus menambahkan peran Cloud Run Invoker.

    Perhatikan bahwa untuk men-deploy resource dengan akun layanan yang dikelola pengguna, deployer harus memiliki izin iam.serviceAccounts.actAs untuk akun layanan tersebut. Jika Anda yang membuat akun layanan, Anda akan otomatis diberi izin ini. Jika tidak, seseorang yang memiliki izin yang benar harus memberi Anda izin ini di akun layanan.

    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 pemanggilnya ke layanan target Anda. Anda dapat melakukannya menggunakan konsol Google Cloud atau gcloud CLI:

    Konsol

    1. Buka konsol Google Cloud.

    Buka Konsol

    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 Tampilkan Panel Info, lalu mengklik Izin.

    6. Klik Add principal.

    7. Di bagian Add principals, 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 oleh 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 target fungsi Cloud Run atau Cloud Run generasi kedua.

    Contoh:

    • Target Cloud Run: Perintah berikut memberikan peran Cloud Run Invoker ke akun layanan my-service-account@my-project.iam.gserviceaccount.com untuk layanan Cloud Run my-service:

      gcloud run add-iam-policy-binding my-service \
       --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
       --role=roles/run.invoker
      
    • Target fungsi Cloud Run: Perintah berikut memberikan peran Cloud Run Invoker yang diperlukan oleh fungsi Cloud Run generasi kedua ke akun layanan my-service-account@my-project.iam.gserviceaccount.com untuk fungsi Cloud Run generasi kedua my-gen2-function:

      gcloud functions add-iam-policy-binding my-gen2-function \
       --member=serviceAccount:my-service-account@my-project.iam.gserviceaccount.com \
       --role=roles/run.invoker --gen2
      
  3. Jika target Anda berada di luar Google Cloud, layanan penerima harus memverifikasi token secara manual.

  4. Akun layanan Cloud Scheduler default akan otomatis disiapkan saat Anda mengaktifkan Cloud Scheduler API, kecuali Anda mengaktifkannya sebelum 19 Maret 2019. Jika demikian, Anda harus menambahkan peran Cloud Scheduler Service Agent secara manual. Hal ini dilakukan agar dapat membuat token header atas nama akun layanan klien untuk mengautentikasi ke target Anda.

    Anda dapat memverifikasi bahwa akun layanan Cloud Scheduler default telah disiapkan di project Anda dan memiliki peran Cloud Scheduler Service Agent yang diberikan dengan melihat akses project Anda saat ini. Perhatikan bahwa jika Anda menggunakan konsol Google Cloud untuk melihat akses project, pastikan untuk memilih kotak centang Sertakan pemberian peran yang diberikan Google.

Membuat tugas penjadwal dengan autentikasi

Untuk membuat tugas yang menggunakan autentikasi, Anda perlu menambahkan jenis token dan alamat email yang mengidentifikasi akun layanan klien ke permintaan create-job Anda:

Konsol

  1. Tentukan frekuensi seperti biasa.
  2. Tentukan HTTP sebagai jenis target.
  3. Tambahkan URL dan metode HTTP seperti biasa.
  4. Dalam daftar Auth header, pilih jenis token. Perhatikan bahwa OIDC (token ID) umumnya digunakan kecuali untuk Google API yang dihosting di *.googleapis.com karena API ini memerlukan token akses OAuth.
  5. Untuk Akun layanan, tentukan email akun layanan klien.
  6. Audiens 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. Nama tersebut harus unik dalam project. Perhatikan bahwa Anda tidak dapat menggunakan kembali nama tugas dalam project meskipun menghapus tugas terkaitnya.
  • FREQUENCY: interval tugas adalah frekuensi tugas dijalankan, misalnya, every 3 hours atau every 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. Perhatikan bahwa OIDC umumnya digunakan kecuali untuk Google API yang dihosting di *.googleapis.com karena API ini memerlukan token OAuth.
  • CLIENT_SERVICE_ACCOUNT_EMAIL: email akun layanan klien.
  • Parameter opsional lainnya tersedia dan dijelaskan dalam 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 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 memerlukan token OAuth.

Menambahkan peran Agen Layanan Cloud Scheduler secara manual ke akun layanan Cloud Scheduler

Hal ini hanya diperlukan jika salah satu hal berikut berlaku:

  • Anda mengaktifkan Cloud Scheduler API sebelum 19 Maret 2019
  • Anda telah menghapus peran Cloud Scheduler Service Agent dari akun layanan Anda

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 konsol Google Cloud atau menggunakan gcloud CLI:

Konsol

  1. Di konsol Google Cloud, buka halaman Cloud Scheduler API.

    Buka Cloud Scheduler API

    Jika ada kolom Status dan statusnya tercantum sebagai Enabled, lanjutkan. Jika belum, klik Aktifkan.

  2. Di konsol Google Cloud, buka halaman Setelan.

    Buka Setelan

  3. Temukan dan salin nomor project Anda.

  4. Di konsol Google Cloud, buka halaman IAM.

    Buka IAM

  5. Klik Grant access. Panel Berikan akses akan terbuka.

  6. 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.

  7. Dalam daftar Select a role, telusuri dan pilih Cloud Scheduler Service Agent.

  8. Klik Simpan.

gcloud

  1. Pastikan Cloud Scheduler API diaktifkan untuk project Anda:

    gcloud services list --enabled \
     --filter=cloudscheduler.googleapis.com
    • Jika Anda melihat output berikut, 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
  2. Temukan nomor project Anda:

    gcloud projects describe PROJECT_ID --format='table(projectNumber)'
    

    Ganti PROJECT_ID dengan project ID Anda.

  3. Salin nomor.

  4. 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 Anda
    • PROJECT_NUMBER: nomor project yang sebelumnya Anda salin