Menggunakan autentikasi dengan target HTTP

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 aplikasi atau workload 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 izin aksesnya dimiliki akun layanan.

Cara paling umum untuk mengizinkan aplikasi melakukan autentikasi sebagai akun layanan adalah dengan melampirkan akun layanan ke resource yang menjalankan aplikasi. Kemudian, Anda dapat memberikan peran Identity and Access Management (IAM) ke akun layanan agar akun layanan dapat mengakses resource Google Cloud .

  1. Jika Anda belum memiliki akun layanan yang ingin digunakan untuk Cloud Scheduler dengan target HTTP, buat akun layanan baru. Perhatikan hal berikut:

    • Akun layanan harus menjadi bagian dari project tempat tugas Cloud Scheduler dibuat.

    • Jangan gunakan agen layanan Cloud Scheduler (service-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 secara otomatis memverifikasi token yang dihasilkan. Misalnya, untuk Cloud Run dan fungsi Cloud Run generasi kedua, Anda harus memberikan peran Cloud Run 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) di akun layanan. Peran bawaan ini berisi izin iam.serviceAccounts.actAs, yang diperlukan untuk melampirkan akun layanan ke resource. (Jika Anda membuat akun layanan, Anda akan otomatis diberi izin ini.)

    Pada langkah sebelumnya, jika Anda secara khusus membuat akun layanan untuk memanggil layanan yang menjadi target tugas Cloud Scheduler, Anda dapat mengikuti prinsip hak istimewa terendah dengan mengikat akun dan izin pemanggilnya ke layanan target Anda:

    Konsol

    1. Di konsol Google Cloud , pada halaman pemilih project, pilih projectGoogle Cloud .

      Buka pemilih project

    2. Buka halaman untuk jenis resource yang Anda panggil. Misalnya, jika Anda memanggil layanan Cloud Run, buka halaman yang mencantumkan layanan Cloud Run.

    3. Centang kotak di sebelah kiri layanan yang ingin Anda panggil. (Jangan mengklik layanan.)

    4. Klik tab Izin.

      Jika panel informasi tidak terlihat, Anda mungkin perlu mengklik Tampilkan Panel Info > Izin.

    5. Klik Tambahkan akun utama.

    6. Di kolom New principals, masukkan alamat email untuk akun layanan yang Anda buat.

    7. Dari daftar Pilih peran, pilih peran yang akan diberikan.

      Ikuti prinsip hak istimewa terendah dengan memilih peran yang hanya menyertakan izin yang diperlukan oleh akun utama Anda.

    8. Klik Simpan.

    gcloud

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL \
        --role=ROLE
    

    Ganti kode berikut:

    • 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. Hal 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.
    • Parameter opsional lainnya dijelaskan dalam referensi command line gcloud.

    Contoh:

    • Berikan peran IAM Cloud Run Invoker (roles/run.invoker) ke akun layanan my-service-account@my-project.iam.gserviceaccount.com di 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
      
    • Berikan peran IAM Cloud Run Invoker (roles/run.invoker) yang diperlukan oleh fungsi Cloud Run generasi kedua ke akun layanan my-service-account@my-project.iam.gserviceaccount.com di fungsi Cloud Run 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. Agen layanan Cloud Scheduler default otomatis disiapkan saat Anda mengaktifkan Cloud Scheduler API, kecuali jika Anda mengaktifkannya sebelum 19 Maret 2019, yang dalam hal ini Anda harus memberikan peran Agen Layanan Cloud Scheduler. Hal ini dilakukan agar 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 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 memerlukan 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

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

    Buka Cloud Scheduler

  2. Klik Buat tugas.

  3. 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 Anda menghapus tugas terkaitnya.

  4. Di daftar Region, pilih region untuk tugas Anda.

  5. Tentukan Frekuensi dan Zona Waktu untuk tugas Anda. String yang Anda berikan di sini dapat berupa string apa pun yang kompatibel dengan unix-cron.

  6. Klik Lanjutkan.

  7. Dalam daftar Jenis target, pilih HTTP.

  8. Tentukan URL dan metode HTTP.

  9. Dalam daftar Auth header, pilih jenis token. Token OIDC umumnya digunakan kecuali untuk Google API yang dihosting di *.googleapis.com karena API ini memerlukan token OAuth.

  10. Dalam daftar Service account, pilih email akun layanan Anda.

  11. Secara opsional, tentukan Audience yang membatasi penerima token OIDC; biasanya, URL target tugas tanpa parameter URL. Jika tidak ditentukan, seluruh URL akan digunakan sebagai audiens, termasuk parameter permintaan.

  12. Konfigurasi setelan opsional.

  13. Klik Buat.

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 tugas yang unik untuk project. Perlu diperhatikan bahwa Anda tidak dapat menggunakan kembali nama tugas dalam sebuah project meskipun Anda menghapus tugas terkaitnya.
  • FREQUENCY: interval atau seberapa sering tugas dijalankan; misalnya, every 3 hours atau every 10 mins. String yang Anda berikan di sini dapat berupa string apa pun yang kompatibel dengan unix-cron.
  • 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.com karena API ini memerlukan token OAuth. (Sebagai gantinya, gunakan flag --oauth-service-account-email untuk menentukan jenis token OAuth.)
  • Parameter opsional lainnya dijelaskan dalam referensi command line gcloud.

Memberikan peran Cloud Scheduler Service Agent

Beberapa layanan 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 layanan Google Cloud.

Agen layanan Cloud Scheduler memerlukan peran Cloud Scheduler Service Agent (roles/cloudscheduler.serviceAgent). Tanpa peran ini, tugas Cloud Scheduler akan gagal. Anda dapat memberikan peran secara manual kepada agen layanan Cloud Scheduler yang memiliki alamat email dengan format berikut:

service-PROJECT_NUMBER@gcp-sa-cloudscheduler.iam.gserviceaccount.com

Anda perlu memberikan peran secara manual hanya jika salah satu hal berikut berlaku:

  • 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 memiliki peran Agen Layanan Cloud Scheduler yang diberikan kepadanya dengan melihat akses project Anda saat ini. Perhatikan bahwa jika Anda menggunakan konsol Google Cloud untuk melihat akses project, pastikan Anda mencentang kotak Sertakan pemberian peran yang disediakan Google.

Untuk mempelajari cara memberikan peran kepada agen layanan Anda, lihat Membuat dan memberikan peran untuk agen layanan.

Langkah berikutnya

Pelajari cara melakukan autentikasi ke Cloud Scheduler secara terprogram.