Membuat dan menerapkan tingkat akses ke resource yang diamankan dengan IAP

Halaman ini menjelaskan cara membuat tingkat akses menggunakan Access Context Manager dan menerapkannya pada resource yang diamankan oleh Identity-Aware Proxy (IAP).

Ringkasan

Tingkat akses adalah kumpulan atribut yang ditetapkan ke permintaan berdasarkan asalnya. Dengan menggunakan informasi seperti jenis perangkat, alamat IP, dan identitas pengguna, Anda dapat menentukan tingkat akses yang akan diberikan. Misalnya, Anda dapat menetapkan tingkat "High_Trust" ke koneksi dari dalam jaringan perusahaan dan kepercayaan "Medium_Trust" ke perangkat eksternal yang menjalankan sistem operasi yang disetujui.

Informasi perangkat dikumpulkan dan direferensikan oleh tingkat akses setelah Anda menyiapkan Verifikasi Endpoint. Verifikasi Endpoint membuat inventaris semua perangkat perusahaan dan pribadi yang mengakses resource perusahaan Anda.

Tingkat akses diterapkan dengan menambahkannya sebagai kondisi Identity and Access Management (IAM) pada resource yang diamankan oleh IAP. IAP memungkinkan Anda menerapkan model kontrol akses tingkat resource yang terperinci, bukan menggunakan firewall tingkat jaringan. Misalnya, Anda dapat menentukan bahwa meskipun banyak resource tersedia untuk "Medium_Trust", resource tertentu yang lebih sensitif memerlukan tingkat "High_Trust".

Untuk mengetahui informasi selengkapnya, lihat Ringkasan Access Context Manager.

Sebelum memulai

Sebelum memulai, Anda harus melakukan hal berikut:

  • Mengamankan resource dengan IAP.
  • Menyiapkan Verifikasi Endpoint. Perhatikan bahwa hal ini hanya diperlukan jika Anda ingin membatasi akses ke resource berdasarkan informasi perangkat pengguna seperti status enkripsi penyimpanan.
  • Pastikan Anda memiliki salah satu peran berikut yang diberikan di project Anda.

    • Access Context Manager Admin
    • Access Context Manager Editor

Membuat tingkat akses

Proses berikut membuat tingkat akses.

Untuk contoh ini, asumsikan Anda ingin membuat tingkat akses yang memungkinkan grup auditor internal mengakses Google Cloud Observability untuk project. Semua perangkat untuk auditor diberi IP di subnet yang berkisar antara 203.0.113.0 dan 203.0.113.127. Anda juga ingin memastikan perangkat mereka dienkripsi. Anda tahu bahwa tidak akan ada perangkat yang ditetapkan ke subnet tersebut selain yang digunakan oleh auditor.

Konsol

  1. Buka halaman Access Context Manager di Google Cloud konsol.

    Buka halaman Access Context Manager

  2. Jika diminta, pilih organisasi Anda.

  3. Di bagian atas halaman Access Context Manager, klik New.

  4. Di panel New Access Level , di bagian Conditions , klik Add attribute , lalu klik Device Policy.

  5. Klik menu drop-down Storage encryption , lalu pilih Encrypted. Perhatikan bahwa aturan ini hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan.

  6. Klik Add attribute lagi, lalu pilih IP Subnetworks.

  7. Di kotak IP Subnetworks, masukkan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.

    Dalam contoh ini, untuk membatasi akses hanya ke auditor, Anda akan memasukkan 203.0.113.0/25 di kotak IP Subnetworks.

  8. Klik Simpan.

gcloud

  1. Buat file YAML untuk tingkat akses yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.

    Dalam contoh ini, untuk membatasi akses hanya ke auditor, masukkan hal berikut ke dalam file YAML:

    - ipSubnetworks:
        - 203.0.113.0/25
    - devicePolicy:
        allowedEncryptionStatuses
          - ENCRYPTED
    

    Untuk mengetahui daftar atribut tingkat akses dan format YAML-nya, lihat Atribut tingkat akses. Lihat contoh file YAML tingkat akses ini untuk mengetahui file YAML komprehensif dari semua atribut yang mungkin.

    Perhatikan bahwa aturan devicePolicy hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan.

  2. Simpan file. Dalam contoh ini, file diberi nama CONDITIONS.yaml.

  3. Buat tingkat akses.

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY_NAME

    Dengan:

    • NAME adalah nama unik untuk tingkat akses. Nama harus diawali dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.

    • TITLE adalah judul yang mudah dibaca. Judul harus unik untuk kebijakan.

    • POLICY_NAME adalah nama kebijakan akses organisasi Anda.

    Anda akan melihat output yang mirip dengan:

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. Buat isi permintaan untuk membuat AccessLevel resource yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blokCIDR dan kebijakan perangkat yang memerlukan penyimpanan terenkripsi.

    Dalam contoh ini, untuk membatasi akses hanya ke auditor, Anda akan memasukkan hal berikut ke dalam isi permintaan:

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         },
         {
         "devicePolicy": [
           "allowedEncryptionStatuses": [
             "ENCRYPTED"
           ]
         ]
         }
       ]
     }
    }

    Dengan:

    • NAME adalah nama unik untuk tingkat akses. Nama harus diawali dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.

    • TITLE adalah judul yang mudah dibaca. Judul harus unik untuk kebijakan.

  2. Buat tingkat akses dengan memanggil accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels

    Dengan:

    • POLICY_NAME adalah nama kebijakan akses organisasi Anda.

Menerapkan tingkat akses

Resource yang diamankan oleh IAP memiliki kebijakan IAM yang mengikat peran IAP ke resource.

Dengan menambahkan binding bersyarat IAM ke kebijakan IAM, akses ke resource Anda akan lebih dibatasi berdasarkan atribut permintaan. Atribut permintaan ini mencakup:

  • Tingkat akses
  • Host dan jalur URL
  • Tanggal dan waktu

Perhatikan bahwa nilai permintaan yang dibandingkan dengan request.host dan request.path yang ditentukan dalam binding bersyarat IAM harus sama persis. Misalnya, jika Anda membatasi akses ke jalur yang dimulai dengan /internal admin, seseorang dapat melewati pembatasan dengan membuka /internal%20admin. Lihat Menggunakan kondisi nama host dan jalur untuk mengetahui informasi selengkapnya.

Saat Anda menerapkan tingkat akses ke resource IAP, pastikan bahwa tingkat akses berada di tingkat organisasi, bukan di tingkat project atau folder. Langkah-langkah berikut menunjukkan cara menambahkan tingkat akses ke resource yang diamankan oleh IAP dengan memperbarui kebijakan IAM-nya.

Konsol

  1. Buka halaman IAP.

    Buka halaman IAP

  2. Centang kotak di samping resource yang izin IAM-nya ingin Anda perbarui.

  3. Di sisi kanan Panel info, klik Add principal.

  4. Di kotak New principal, masukkan akun utama yang ingin Anda tetapkan perannya.

  5. Di menu drop-down Select a role, pilih peran IAP-secured Web App User.

  6. Untuk menentukan tingkat akses yang ada, pilih tingkat akses tersebut dari menu drop-down Access levels. Anda harus memilih peran IAP-secured Web App User dan memiliki izin tingkat organisasi untuk melihat tingkat akses yang ada.

    Saat Anda menerapkan beberapa tingkat akses ke resource, pengguna akan diberi akses ke resource jika mereka memenuhi kondisi yang ditentukan di setidaknya salah satu tingkat akses yang Anda pilih (ini adalah logika ATAU pada tingkat akses dalam daftar). Jika Anda ingin pengguna memenuhi kondisi di lebih dari satu tingkat akses (logika DAN pada tingkat akses), buat tingkat akses yang berisi beberapa tingkat akses.

  7. Jika Anda ingin menambahkan lebih banyak peran ke akun utama, klik Add another role.

  8. Setelah selesai menambahkan peran, klik Save.

gcloud

Saat ini, Anda hanya dapat menggunakan gcloud CLI untuk menetapkan binding bersyarat tingkat project.

Untuk menetapkan binding bersyarat, edit file policy.yaml project Anda:

  1. Buka kebijakan IAM untuk aplikasi menggunakan perintah gcloud berikut:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml
  2. Edit file policy.yaml untuk menentukan hal berikut:

    • Pengguna dan grup yang ingin Anda terapkan kondisi IAM-nya.
    • Peran iap.httpsResourceAccessor untuk memberi mereka akses ke resource.
    • Kondisi IAM dengan tingkat akses Anda.

    Kondisi berikut memberikan akses kepada pengguna dan grup jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /.

    ...
    - members:
    - group:EXAMPLE_GROUP@GOOGLE.COM
    - user:EXAMPLE_USER@GOOGLE.COM
    role: roles/iap.httpsResourceAccessor
    condition:
        expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")
        title: CONDITION_TITLE
    ...
  3. Ikat kebijakan ke aplikasi menggunakan perintah set-iam-policy. none gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Untuk mengedit file policy.json aplikasi, ikuti proses untuk jenis aplikasi Anda. Lihat Mengelola akses ke resource yang diamankan oleh IAP untuk mengetahui informasi selengkapnya tentang penggunaan IAM API untuk mengelola kebijakan akses.

Sebelum Anda menyelesaikan langkah-langkah API khusus aplikasi, ekspor variabel berikut:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
 # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
 export JSON_NEW_POLICY=POLICY_FILE.JSON
 

App Engine

  1. Ekspor variabel App Engine berikut:

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Dapatkan kebijakan IAM untuk aplikasi App Engine menggunakan metode getIamPolicy. Bit data kosong di akhir mengubah permintaan curl menjadi POST, bukan GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy

  3. Tambahkan binding bersyarat IAM ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh Chrome Enterprise Premium. Kondisi IAM telah ditambahkan untuk memberi mereka akses ke resource hanya jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /. Hanya boleh ada satu kondisi per binding.

    Contoh file policy.json

    {
    "policy": {
      "bindings": [
            {
              "role": "roles/iap.httpsResourceAccessor",
              "members": [
                  "group:EXAMPLE_GROUP@GOOGLE.COM",
                  "user:EXAMPLE_USER@GOOGLE.COM"
              ],
              "condition": {
                "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
                "title": "CONDITION_NAME"
              }
            }
        ]
      }
    }

  4. Tetapkan file policy.json baru menggunakan metode setIamPolicy.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}

Layanan dan versi App Engine

Anda juga dapat memperbarui kebijakan IAM layanan App Engine, semua versi, atau versi tertentu dari layanan. Untuk melakukannya pada versi tertentu dari layanan:

  1. Ekspor variabel tambahan berikut.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
  2. Perbarui variabel GAE_BASE_URL yang diekspor.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Dapatkan dan tetapkan kebijakan IAM untuk versi menggunakan perintah getIamPolicy dan setIamPolicy.

GKE dan Compute Engine

  1. Ekspor project ID layanan backend Anda.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Dapatkan kebijakan IAM untuk aplikasi Compute Engine menggunakan metode getIamPolicy. Bit data kosong di akhir mengubah permintaan curl menjadi POST, bukan GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
     -d ''

  3. Tambahkan binding bersyarat IAM ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh Chrome Enterprise Premium. Kondisi IAM telah ditambahkan untuk memberi mereka akses ke resource hanya jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /. Hanya boleh ada satu kondisi per binding.


    Contoh file policy.json

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.httpsResourceAccessor",
            "members": [
              "group":EXAMPLE_GROUP@GOOGLE.COM,
              "user:EXAMPLE_USER@GOOGLE.COM"
            ],
            "condition": {
              "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }

  4. Tetapkan file policy.json baru menggunakan metode setIamPolicy.

    curl -i -H "Content-Type:application/json" \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}