Membuat dan menerapkan tingkat akses ke resource yang diamankan dengan IAP

Halaman ini menjelaskan cara membuat tingkat akses menggunakan Access Context Manager dan menerapkannya di resource yang diamankan 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 dirujuk oleh tingkat akses setelah Anda menyiapkan Verifikasi Endpoint. Verifikasi Endpoint membuat inventaris semua perangkat perusahaan dan pribadi yang mengakses resource perusahaan Anda.

Level akses diterapkan dengan menambahkannya sebagai kondisi Identity and Access Management (IAM) pada resource yang diamankan IAP. Dengan IAP, Anda dapat menerapkan model kontrol akses tingkat resource yang terperinci, bukan menggunakan firewall tingkat jaringan. Misalnya, Anda dapat menentukan bahwa walaupun 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 perlu melakukan hal berikut:

  • Mengamankan resource dengan IAP.
  • Siapkan 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 pada project Anda.

    • Access Context Manager Admin
    • Access Context Manager Editor

Membuat tingkat akses

Proses berikut akan membuat tingkat akses.

Untuk contoh ini, asumsikan Anda ingin membuat tingkat akses yang memungkinkan grup auditor internal mengakses Kemampuan Observasi Google Cloud untuk sebuah 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 perangkat yang digunakan oleh auditor.

Konsol

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

    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 drop-down Enkripsi penyimpanan, lalu pilih Dienkripsi. Perhatikan bahwa aturan ini hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan.

  6. Klik Tambahkan atribut lagi dan pilih Subnetwork IP.

  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 Subnetwork IP.

  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, Anda akan memasukkan hal berikut ke dalam file .yaml:

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

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

    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 keterangan:

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

    • TITLE adalah judul yang dapat dibaca manusia. Nama ini 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 resource AccessLevel yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR dan kebijakan perangkat yang memerlukan penyimpanan terenkripsi.

    Dalam contoh ini, untuk membatasi akses hanya kepada 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 keterangan:

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

    • TITLE adalah judul yang dapat dibaca manusia. Nama ini harus unik untuk kebijakan.

  2. Buat tingkat akses dengan memanggil accessLevels.create.

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

    Dengan keterangan:

    • POLICY_NAME adalah nama kebijakan akses organisasi Anda.

Menerapkan tingkat akses

Resource yang diamankan 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/Jalur URL
  • Tanggal/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 mengabaikan batasan tersebut dengan membuka /internal%20admin. Lihat Menggunakan nama host dan kondisi jalur untuk mengetahui informasi selengkapnya.

Langkah-langkah berikut menunjukkan cara menambahkan tingkat akses Anda ke resource yang diamankan dengan IAM dengan memperbarui kebijakan IAM-nya.

Konsol

  1. Buka halaman admin IAP.

    Buka halaman admin IAP

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

  3. Di sisi kanan Panel info, klik Tambahkan akun utama.

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

  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 dari menu drop-down Access levels. Anda harus memilih peran Pengguna Aplikasi Web yang Dilindungi IAP 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 memenuhi kondisi yang ditetapkan di setidaknya salah satu tingkat akses yang Anda pilih (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 Tambahkan peran lain.

  8. Setelah selesai menambahkan peran, klik Simpan.

gcloud

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

Untuk menetapkan binding bersyarat, edit file policy.yaml project Anda dengan mengikuti proses di bawah ini:

  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.
    • Peran iap.httpsResourceAccessor untuk memberi mereka akses ke resource.
    • Kondisi IAM dengan tingkat akses Anda.

    Kondisi berikut memberikan akses ke 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. gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

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

Sebelum menyelesaikan langkah-langkah API khusus aplikasi di bawah, 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 bagian 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 Anda ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, yang memberi mereka akses ke resource yang diamankan 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 layanan tertentu. Untuk melakukannya untuk versi layanan tertentu:

  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 yang ditampilkan di atas.

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 bagian 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 Anda ke file JSON kebijakan IAM. Berikut adalah contoh file policy.json yang diedit yang mengikat peran iap.httpsResourceAccessor ke dua pengguna, yang memberi mereka akses ke resource yang diamankan Chrome Enterprise Premium. Kondisi IAM telah ditambahkan untuk memberinya 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}