Menggunakan IAM untuk membatasi akses Cloud Deploy

Seperti halnya semua produk Google Cloud, Identity and Access Management melindungi Cloud Deploy dengan mengontrol pengguna dan akun layanan terautentikasi yang dapat melakukan tindakan yang mana.

Dokumen ini menjelaskan beberapa fitur IAM, dan memberikan petunjuk untuk melindungi pengiriman aplikasi Anda yang dikelola menggunakan Cloud Deploy. Berikut adalah beberapa cara khusus untuk membatasi akses ke tindakan dan resource di Cloud Deploy:

Sebelum memulai

Tentang fitur lanjutan IAM

Selain peran dan izin, Cloud Deploy menggunakan fitur IAM berikut untuk memberikan kontrol tersebut:

Tentang kebijakan IAM

Kebijakan IAM merupakan kumpulan binding dan metadata. Peran binding memberikan satu peran ke satu atau beberapa akun utama (pengguna, grup, atau akun layanan), ditambah conditions spesifik per konteks yang mengontrol apakah binding diterapkan atau tidak.

Untuk mengetahui informasi selengkapnya tentang kebijakan IAM, baca artikel Memahami kebijakan.

Tentang kondisi IAM

Dengan kondisi IAM, Anda dapat mengontrol akses ke resource dan tindakan Cloud Deploy berdasarkan kondisi yang dikomputasi saat runtime. Misalnya, Anda dapat membatasi promosi untuk target tertentu sehingga hanya diizinkan selama jangka waktu tertentu.

Tentang atribut API

Saat membuat kondisi IAM, Anda dapat mereferensikan atribut API untuk mendapatkan informasi runtime tentang permintaan. Misalnya, Anda dapat menggunakan atribut API untuk mendapatkan nama resource yang menjadi tujuan permintaan. Kemudian, Anda dapat membandingkannya dengan resource atau resource yang dapat diakses akun utama.

Memberikan akses terperinci menggunakan fitur IAM lanjutan

Fitur IAM lanjutan ini memungkinkan Anda mengontrol akses ke resource dan jenis resource tertentu dalam kondisi tertentu.

Prosedur di bagian ini memberikan akses ke resource tertentu (target, pipeline pengiriman). Anda juga dapat memberikan akses di level project, yang memengaruhi semua pipeline pengiriman atau semua target dalam project tersebut. Untuk menetapkan kebijakan IAM untuk project, gunakan perintah gcloud projects set-iam-policy:

gcloud projects set-iam-policy PROJECT_ID POLICY_FILE

Memberikan akses ke pipeline pengiriman tertentu

Anda dapat memberikan izin pada akun utama untuk membuat, mengubah, dan menghapus semua pipeline pengiriman, hanya dengan memberikan peran yang sesuai. Namun, terkadang Anda mungkin ingin memberikan akses ini kepada akun utama untuk satu atau beberapa pipeline tertentu.

Untuk melakukannya, gunakan binding peran untuk mengikat peran roles/clouddeploy.developer dengan akun utama tersebut, lalu saat menerapkan kebijakan (dengan setIamPolicy), Anda menentukan pipeline pengiriman mana yang aksesnya diberikan.

Untuk memberikan akses ke pipeline pengiriman tertentu:

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.developer
      members:
      - user:fatima@example.com
    

    Contoh di atas memberikan peran kepada pengguna, tetapi Anda juga dapat memberikan peran tersebut ke grup atau ke akun layanan.

  2. Panggil perintah berikut untuk menerapkan file kebijakan ke pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy --delivery-pipeline=PIPELINE_NAME --region=REGION POLICY_FILE
    

Berikan akses untuk mengonfigurasi target tertentu

Untuk memberikan akses utama ke target tertentu, Anda dapat menggunakan binding peran. Untuk melakukannya, ikat peran roles/clouddeploy.operator dengan akun utama tersebut, lalu saat menerapkan kebijakan (dengan setIamPolicy), Anda menentukan target yang akan diberikan akses.

Akses ke target tertentu memberi akun utama kemampuan untuk mengupdate dan menghapus target tersebut.

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - group:cd_operators@example.com
    

    Contoh di atas memberikan peran kepada grup, tetapi Anda juga dapat memberikan peran tersebut kepada pengguna atau ke akun layanan.

  2. Panggil perintah berikut untuk menerapkan file kebijakan ke target tertentu:

    gcloud deploy targets set-iam-policy TARGET --region=REGION POLICY_FILE
    

Memberikan izin untuk mempromosikan rilis ke target tertentu

Prosedur ini mengasumsikan sudah ada kebijakan yang mengikat peran ke utama. Di sini, kita menambahkan kondisi yang menentukan target:

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    Dalam binding peran ini, condition mengambil pasangan key:value, dengan kuncinya adalah expression dan nilainya adalah ekspresi CEL. Ekspresi ini merujuk pada kumpulan atribut kontekstual tentang permintaan dan dievaluasi ke boolean.

    Dalam hal ini, ekspresi dievaluasi, saat akun utama mencoba mempromosikan rilis, untuk mengonfirmasi bahwa target promosi cocok dengan target dalam ekspresi.

    Ekspresi ini menggunakan atribut API clouddeploy.com/rolloutTarget, yang merupakan target yang coba dipromosikan oleh akun utama. Ekspresi ini membandingkan dengan target yang utama diberikan akses promosi.

  2. Menetapkan binding untuk pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Jika ingin menetapkan binding ini untuk semua pipeline pengiriman, Anda dapat menetapkannya di level project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk menyetujui peluncuran ke target tertentu

Binding di bagian ini memberikan izin utama untuk menyetujui peluncuran pipeline, dan menyertakan kondisi yang menerapkan izin untuk target prod.

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/rolloutTarget", "") == "prod"
        title: Deploy to prod
    

    Dalam binding peran ini, condition mengambil pasangan key:value, dengan kuncinya adalah expression dan nilainya adalah ekspresi CEL. Ekspresi ini merujuk pada kumpulan atribut kontekstual tentang permintaan dan dievaluasi ke boolean.

    Dalam hal ini, ekspresi dievaluasi, saat akun utama mencoba menyetujui peluncuran, untuk mengonfirmasi bahwa target cocok dengan target dalam ekspresi.

    Ekspresi ini menggunakan atribut API clouddeploy.com/rolloutTarget, yang merupakan target peluncuran, dan membandingkannya dengan target yang utamanya diberi akses persetujuan. Atribut clouddeploy.googleapis.com/rolloutTarget adalah satu-satunya atribut API yang didukung Cloud Deploy.

  2. Menetapkan binding untuk pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Jika ingin menetapkan binding ini untuk semua pipeline pengiriman, Anda dapat menetapkannya di level project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk mempromosikan rilis selama periode waktu tertentu

Binding di bagian ini memberikan izin utama untuk mempromosikan rilis untuk pipeline, dan menyertakan kondisi yang menentukan jangka waktu selama binding diterapkan.

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Promote during safe window
    

    Dalam binding peran ini, condition mengambil pasangan key:value, dengan kuncinya adalah expression dan nilainya adalah ekspresi CEL. Ekspresi ini merujuk pada kumpulan atribut kontekstual tentang permintaan dan dievaluasi ke boolean. Ekspresi ini memeriksa apakah waktu permintaan terjadi dari Senin hingga Jumat.

    Dalam hal ini, ekspresi dievaluasi, saat akun utama mencoba mempromosikan rilis, untuk mengonfirmasi bahwa target promosi cocok dengan target dalam ekspresi.

  2. Menetapkan binding untuk pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Jika ingin menetapkan binding ini untuk semua pipeline pengiriman, Anda dapat menetapkannya di level project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk menyetujui peluncuran selama jangka waktu tertentu

Binding di bagian ini memberikan izin utama untuk menyetujui peluncuran, dan menyertakan kondisi yang menentukan jangka waktu selama binding diterapkan

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.approver
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: request.time.getDayOfWeek("America/Los_Angeles") > 0 && request.time.getDayOfWeek("America/Los_Angeles") < 6
        title: Approve during safe window
    

    Dalam binding peran ini, condition mengambil key:value pair dengan kuncinya adalah expression dan nilainya adalah ekspresi CEL yang mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi ke boolean. Ekspresi ini memeriksa apakah waktu permintaan terjadi dari Senin hingga Jumat.

    Dalam hal ini, ekspresi dievaluasi, saat akun utama mencoba menyetujui peluncuran, untuk mengonfirmasi bahwa target peluncuran cocok dengan target dalam ekspresi.

  2. Menetapkan binding untuk pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Jika ingin menetapkan binding ini untuk semua pipeline pengiriman, Anda dapat menetapkannya di level project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk mencoba kembali tugas, berdasarkan jenis tugas

Binding di bagian ini memberikan izin utama untuk mencoba kembali tugas Cloud Deploy, berdasarkan jenis tugas

  1. Buat file kebijakan dengan binding berikut:

    bindings:
    - role: roles/clouddeploy.operator
      members:
      - serviceAccount:prod_operator@project-12345.iam.gserviceaccount.com
      condition:
        expression: api.getAttribute("clouddeploy.googleapis.com/jobType", "") == "deploy"
        title: Retry deploy job
    

    Dalam binding peran ini, condition mengambil pasangan key:value, dengan kuncinya adalah expression dan nilainya adalah ekspresi CEL. Ekspresi ini merujuk pada kumpulan atribut kontekstual tentang permintaan dan dievaluasi ke boolean.

    Dalam hal ini, ekspresi dievaluasi, saat akun utama mencoba mencoba kembali tugas, untuk mengonfirmasi bahwa jenis tugas cocok dengan jenis tugas dalam ekspresi.

    Ekspresi tersebut menggunakan atribut API clouddeploy.com/jobType, yang dapat berupa deploy atau verify.

  2. Menetapkan binding untuk pipeline pengiriman tertentu:

    gcloud deploy delivery-pipelines set-iam-policy PIPELINE_NAME --region=REGION POLICY_FILE
    

    Jika ingin menetapkan binding ini untuk semua pipeline pengiriman, Anda dapat menetapkannya di level project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE