Menggunakan IAM untuk membatasi akses Cloud Deploy

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

Dokumen ini menjelaskan beberapa fitur IAM, dan memberikan petunjuk untuk melindungi pengiriman aplikasi Anda yang dikelola menggunakan Cloud Deploy. Berikut beberapa cara spesifik yang dapat Anda gunakan 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 adalah kumpulan binding dan metadata. Binding peran memberikan satu peran kepada satu atau beberapa akun utama (pengguna, grup, atau akun layanan), ditambah kondisi khusus konteks yang mengontrol apakah binding akan diterapkan.

Untuk mengetahui informasi selengkapnya tentang kebijakan IAM, lihat Memahami kebijakan.

Tentang kondisi IAM

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

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 diminta. Kemudian, Anda dapat membandingkannya dengan resource atau resource yang dapat diakses oleh akun utama.

Memberikan akses terperinci menggunakan fitur IAM lanjutan

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

Prosedur di bagian ini memberikan akses ke resource tertentu (target, pipeline pengiriman). Anda juga dapat memberikan akses di tingkat 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 kepada 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 ke grup atau 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
    

Memberikan akses untuk mengonfigurasi target tertentu

Untuk memberikan akses akun 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), tentukan target yang aksesnya diberikan.

Akses ke target tertentu memberi akun utama kemampuan untuk memperbarui 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 ke grup, tetapi Anda juga dapat memberikan peran ke pengguna atau 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 bahwa sudah ada kebijakan yang mengikat peran ke akun 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 menggunakan pasangan kunci:nilai, dengan kunci adalah expression dan nilainya adalah ekspresi CEL. Ekspresi ini mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean.

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

    Ekspresi menggunakan atribut API clouddeploy.googleapis.com/rolloutTarget, yang adalah target yang dipromosikan oleh akun utama. Ekspresi membandingkannya dengan target yang akses promosinya diberikan kepada akun utama.

  2. Tetapkan 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 akun utama untuk menyetujui peluncuran untuk 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 menggunakan pasangan kunci:nilai, dengan kunci adalah expression dan nilainya adalah ekspresi CEL. Ekspresi mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean.

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

    Ekspresi menggunakan atribut API clouddeploy.googleapis.com/rolloutTarget, yang adalah target peluncuran, dan membandingkannya dengan target yang diperlukan untuk memberikan akses persetujuan kepada akun utama. Atribut clouddeploy.googleapis.com/rolloutTarget adalah satu-satunya atribut API yang didukung Cloud Deploy.

  2. Tetapkan 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 jangka waktu tertentu

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

  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 menggunakan pasangan kunci:nilai, dengan kunci adalah expression dan nilainya adalah ekspresi CEL. Ekspresi mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean. Ekspresi ini memeriksa apakah waktu permintaan terjadi pada hari 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. Tetapkan 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 akun utama untuk menyetujui peluncuran, dan menyertakan kondisi yang menentukan periode waktu selama binding berlaku

  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 menggunakan pasangan kunci:nilai, dengan kunci adalah expression dan nilainya adalah ekspresi CEL yang mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean. Ekspresi ini memeriksa apakah waktu permintaan terjadi pada hari 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. Tetapkan 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 ulang tugas, berdasarkan jenis tugas

Binding di bagian ini memberikan izin akun utama untuk mencoba ulang 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 menggunakan pasangan kunci:nilai, dengan kunci adalah expression dan nilainya adalah ekspresi CEL. Ekspresi mereferensikan kumpulan atribut kontekstual tentang permintaan dan dievaluasi menjadi boolean.

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

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

  2. Tetapkan 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