Menggunakan IAM untuk membatasi akses Cloud Deploy

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

Dokumen ini menjelaskan beberapa fitur IAM, dan memberikan petunjuk untuk melindungi pengiriman aplikasi yang dikelola menggunakan Cloud Deploy. Berikut 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 menyediakan kontrol tersebut:

Tentang kebijakan IAM

Kebijakan IAM adalah kumpulan binding dan metadata. Binding peran memberikan satu peran ke satu atau beberapa akun utama (pengguna, grup, atau akun layanan), ditambah kondisi khusus konteks yang mengontrol apakah binding berlaku.

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 ke 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-policycommand:

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 Anda menerapkan kebijakan (dengan setIamPolicy), tentukan pipeline pengiriman yang diberikan aksesnya.

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 kepada 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 kepada akun utama ke target tertentu, Anda dapat menggunakan binding peran. Untuk melakukannya, ikat peran roles/clouddeploy.operator dengan akun utama tersebut, lalu saat Anda menerapkan kebijakan (dengan setIamPolicy), tentukan target yang diberikan aksesnya.

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 kepada grup, tetapi Anda juga dapat memberikan peran kepada 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 sebuah ekspresi CEL. Ekspresi ini mereferensikan sekumpulan atribut kontekstual tentang permintaan dan bernilai 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.googleapis.com/rolloutTarget, yang merupakan target yang ingin dipromosikan oleh akun utama. Ekspresi ini membandingkannya dengan target yang diberikan akses promosi 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 tingkat project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk menyetujui peluncuran ke target tertentu

Binding di bagian ini memberikan izin kepada 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 sebuah ekspresi CEL. Ekspresi ini mereferensikan sekumpulan atribut kontekstual tentang permintaan dan bernilai 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.googleapis.com/rolloutTarget, yang merupakan target peluncuran, dan membandingkannya dengan target yang diberikan 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 tingkat project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk mempromosikan rilis selama jangka waktu tertentu

Binding di bagian ini memberikan izin kepada akun utama untuk mempromosikan rilis untuk a pipeline, dan menyertakan kondisi yang menentukan jangka waktu berlakunya binding.

  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 sebuah ekspresi CEL. Ekspresi ini mereferensikan sekumpulan atribut kontekstual tentang permintaan dan bernilai 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 tingkat project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk menyetujui peluncuran selama jangka waktu tertentu

Binding di bagian ini memberikan izin kepada akun utama untuk menyetujui peluncuran, dan menyertakan kondisi yang menentukan jangka waktu berlakunya binding

  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 sekumpulan atribut kontekstual tentang permintaan dan bernilai 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 tingkat project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE
    

Memberikan izin untuk mencoba ulang tugas, berdasarkan jenis tugas

Binding di bagian ini memberikan izin kepada 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 sebuah ekspresi CEL. Ekspresi ini mereferensikan sekumpulan atribut kontekstual tentang permintaan dan bernilai boolean.

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

    Ekspresi ini 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 tingkat project:

    gcloud projects set-iam-policy PROJECT POLICY_FILE