Konfigurasi antrean aman

Halaman ini memberikan saran untuk mengamankan pembuatan dan konfigurasi antrean. Kuncinya adalah membatasi metode pengelolaan antrean untuk sekelompok kecil orang atau entitas. Untuk organisasi besar, Anda mungkin perlu menggunakan akun layanan untuk menjalankan software yang menerapkan konfigurasi antrean yang tepat.

Ide umumnya adalah memisahkan pengguna dan entitas lainnya ke dalam tiga kategori:

  1. Admin Antrean - Pengguna dalam grup ini memiliki izin untuk memanggil metode pengelolaan antrean Cloud Tasks, atau mengupload file queue.yaml. Grup ini dibatasi untuk sekelompok pengguna yang sangat kecil sehingga dapat mengurangi risiko konfigurasi antrean yang rusak, terutama dengan tidak sengaja menggabungkan metode pengelolaan antrean queue.yaml dan Cloud Tasks.
  2. Cloud Tasks Workers - Pengguna dalam grup ini memiliki izin untuk melakukan interaksi umum dengan Cloud Tasks seperti mengantrekan dan menghapus antrean tugas. Mereka tidak diizinkan untuk memanggil metode pengelolaan antrean Cloud Tasks.
  3. App Engine Deployers - Untuk project yang memiliki aplikasi App Engine, pengguna dalam grup ini memiliki izin untuk men-deploy aplikasi. Mereka tidak diizinkan untuk mengupload file queue.yaml atau melakukan panggilan Cloud Tasks API, sehingga memungkinkan admin antrean menerapkan kebijakan yang sesuai.

Dalam skema ini, pengguna yang merupakan admin antrean juga tidak boleh menjadi pekerja Cloud Tasks, karena hal itu akan mengacaukan tujuan pemisahan.

Jika project Anda menggunakan metode pengelolaan antrean Cloud Tasks secara eksklusif, mungkin juga admin antrean tidak boleh menjadi deployer App Engine, karena hal ini akan memungkinkan file queue.yaml yang salah diupload.

Project dan organisasi kecil

Project dan organisasi kecil dapat menetapkan peran Identity and Access Management (IAM) langsung kepada pengguna untuk menempatkan mereka ke dalam grup di atas. Hal ini masuk akal untuk tim yang lebih memilih kesederhanaan konfigurasi atau yang membuat perubahan konfigurasi antrean atau deployment aplikasi App Engine secara manual.

Tambahkan pengguna ke grup ini sebagai berikut:

Admin Antrean

  1. Sebagai admin project, berikan peran cloudtasks.queueAdmin kepada pengguna yang diizinkan untuk melakukan panggilan API pengelolaan antrean Cloud Tasks atau mengupload file queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/cloudtasks.queueAdmin

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • EMAIL: email untuk pengguna anggota
  2. Sebagai pengguna dengan peran cloudtasks.queueAdmin, dengan mengikuti praktik terbaik di atas, pilih salah satu metode berikut untuk mengubah konfigurasi antrean.

    1. Gunakan Cloud Tasks API untuk mengubah konfigurasi antrean.

    2. Upload queue.yaml dengan gcloud:

      gcloud app deploy queue.yaml

Cloud Tasks Worker

Karena sering kali ada banyak pengguna yang diizinkan untuk berinteraksi dengan Cloud Tasks, Anda dapat menetapkan peran ke Akun Layanan, bukan ke pengguna individual. Jenis penggunaan ini umum di produksi. Untuk mengetahui informasi selengkapnya, lihat Project dan organisasi besar.

  1. Sebagai admin project, berikan peran kepada pengguna yang diizinkan untuk berinteraksi dengan Cloud Tasks, tetapi tidak mengubah konfigurasi antrean:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Ganti PROJECT_ID dengan ID project Anda.

Sebagai pengguna dengan satu atau beberapa peran yang diberikan di atas, Anda dapat berinteraksi dengan Cloud Tasks API.

App Engine Deployer

  1. Sebagai admin project, berikan peran kepada pengguna yang diizinkan untuk men-deploy aplikasi App Engine, tetapi tidak diizinkan untuk mengubah konfigurasi antrean atau berinteraksi dengan tugas:

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member user:EMAIL \
    --role roles/storage.admin

    Ganti kode berikut:

    • PROJECT_ID: ID project Anda
    • EMAIL: email untuk pengguna anggota
  2. Sebagai pengguna dengan peran yang diberikan di atas, deploy aplikasi App Engine.

    gcloud app deploy app.yaml

Project dan organisasi besar

Project dan organisasi besar dapat menggunakan Akun Layanan untuk memisahkan tugas dan tanggung jawab. Hal ini masuk akal bagi tim dengan infrastruktur yang kompleks untuk mengubah konfigurasi antrean dan mungkin juga men-deploy aplikasi App Engine.

Untuk mengikuti prinsip hak istimewa terendah dan menyederhanakan pengelolaan akses, petunjuk ini menggunakan peniruan identitas akun layanan. Untuk mempelajari pola ini lebih lanjut, lihat Menggunakan peniruan akun layanan dalam dokumentasi autentikasi Google Cloud.

Berikut adalah petunjuk untuk menyiapkan akun layanan ini.

Admin Antrean

  1. Sebagai admin project, buat akun layanan.

    gcloud iam service-accounts create queue-admin \
    --display-name "Queue Admin"
  2. Berikan peran cloudtasks.queueAdmin ke akun layanan agar dapat mengupload file queue.yaml dan melakukan panggilan API pengelolaan antrean Cloud Tasks.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:queue-admin@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.queueAdmin

    Ganti PROJECT_ID dengan ID project Anda.

  3. Izinkan peniruan identitas akun layanan "Queue Admin" yang Anda buat secara selektif.

    Ini biasanya adalah sekelompok kecil akun utama yang bertindak sebagai administrator antrean. Berikan akun utama ini peran iam.serviceAccountTokenCreator di akun layanan "Queue Admin" yang Anda buat. Untuk mempelajari caranya, lihat bagian Memberikan atau mencabut satu peran dalam dokumentasi IAM.

  4. Dengan mengikuti praktik terbaik yang dijelaskan dalam artikel Menggunakan Pengelolaan Antrean atau queue.yaml, pilih salah satu metode berikut untuk mengubah konfigurasi antrean:

    • Gunakan Cloud Tasks untuk mengubah konfigurasi antrean.

    • Mengupload queue.yaml dengan gcloud CLI

Cloud Tasks Worker

  1. Sebagai admin project, buat akun layanan.

    gcloud iam service-accounts create cloud-tasks-worker \
    --display-name "Cloud Tasks Worker"
  2. Berikan peran ke akun layanan agar dapat berinteraksi dengan Cloud Tasks, tetapi tidak mengubah konfigurasi antrean.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.viewer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.enqueuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.dequeuer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskRunner
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/cloudtasks.taskDeleter

    Ganti PROJECT_ID dengan ID project Anda.

  3. Izinkan peniruan identitas akun layanan "Cloud Tasks Worker" secara selektif yang Anda buat.

    Untuk akun utama yang berinteraksi dengan Cloud Tasks, berikan peran iam.serviceAccountTokenCreator di akun layanan "Cloud Tasks Worker" yang Anda buat. Untuk mempelajari caranya, lihat Memberikan atau mencabut satu peran dalam dokumentasi IAM.

App Engine Deployer

  1. Sebagai admin project, buat akun layanan.

    gcloud iam service-accounts create app-engine-deployer \
    --display-name "App Engine Deployer"
  2. Berikan peran ke akun layanan agar dapat men-deploy aplikasi App Engine, tetapi bukan queue.yaml.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.deployer
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/appengine.serviceAdmin
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:app-engine-deployer@PROJECT_ID.iam.gserviceaccount.com \
    --role roles/storage.admin

    Ganti PROJECT_ID dengan ID project Anda.

  3. Izinkan peniruan identitas akun layanan "App Engine Deployer" secara selektif yang telah Anda buat.

    Untuk akun utama yang men-deploy layanan App Engine, berikan peran iam.serviceAccountTokenCreator di akun layanan "App Engine Deployer" yang Anda buat. Untuk mempelajari cara melakukannya, lihat bagian Memberikan atau mencabut satu peran dalam dokumentasi IAM.

Membatasi akses ke satu antrean

Jika memiliki beberapa antrean dalam project dan ingin membatasi akses ke setiap antrean, Anda dapat menggunakan kebijakan IAM di tingkat antrean, bukan tingkat project. Untuk membatasi akses menurut antrean, gunakan perintah gcloud tasks queues add-iam-policy-binding. Contoh:

  gcloud tasks queues add-iam-policy-binding QUEUE_NAME --location=LOCATION \
  --member=serviceAccount:cloud-tasks-worker@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/cloudtasks.enqueuer

Ganti kode berikut:

  • QUEUE_NAME: nama antrean Anda
  • LOCATION: lokasi antrean Anda
  • PROJECT_ID: ID project Anda

Langkah selanjutnya