Menyiapkan akses kontekstual dengan Identity-Aware Proxy

Panduan ini menjelaskan cara memperluas kebijakan akses Identity-Aware Proxy (IAP) menggunakan tingkat akses dan Framework Kondisi Identity and Access Management (IAM). Tingkat akses memungkinkan pembatasan akses ke resource berdasarkan alamat IP dan atribut perangkat pengguna akhir. Kondisi IAM memungkinkan pembatasan akses berdasarkan host, jalur, tanggal, dan waktu URL.

Misalnya, bergantung pada konfigurasi kebijakan, aplikasi sensitif Anda dapat:

  • Berikan akses kepada semua karyawan jika mereka menggunakan perangkat perusahaan tepercaya dari jaringan perusahaan Anda.
  • Berikan akses kepada karyawan di grup Remote Access jika mereka menggunakan perangkat perusahaan tepercaya dengan sandi yang aman dan level patch terbaru, dari jaringan mana pun.
  • Hanya berikan akses kepada karyawan di grup Privileged Access jika jalur URL dimulai dengan /admin.

Sebelum memulai

Sebelum memulai, Anda memerlukan hal berikut:

  • Aplikasi yang diamankan IAP yang ingin Anda tambahi akses individu atau grup.
  • Nama pengguna atau grup yang ingin Anda beri akses.

Menyiapkan tingkat akses

Untuk membatasi akses berdasarkan alamat IP atau atribut perangkat pengguna akhir, buat tingkat akses. Beberapa atribut, seperti atribut perangkat, memerlukan lisensi Chrome Enterprise Premium. Validasi lisensi hanya terjadi saat Anda mengonfigurasi tingkat akses dan tidak memengaruhi akses runtime. Untuk mempelajari cara membuat tingkat akses, lihat panduan Access Context Manager. IAP menggunakan nama tingkat akses untuk mengaitkannya dengan aplikasi yang diamankan IAP.

Penggunaan kebijakan tercakup tidak didukung oleh IAP. Tingkat akses harus ditetapkan dalam kebijakan akses organisasi. Untuk mengetahui informasi selengkapnya, lihat Membuat kebijakan akses.

Mengedit kebijakan IAM

Aplikasi yang diamankan IAP memiliki kebijakan IAM yang mengikat peran IAP ke aplikasi.

Dengan menambahkan IAM Condition ke kebijakan IAM, akses ke resource Anda akan dibatasi lebih lanjut 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 IAM Condition harus sama persis. Misalnya, jika Anda membatasi akses ke jalur yang dimulai dengan /internal admin, seseorang dapat mengabaikan batasan tersebut dengan membuka /internal%20admin. Untuk mengetahui informasi selengkapnya tentang kondisi nama host dan jalur, lihat Menggunakan kondisi nama host dan jalur.

Tambahkan dan edit binding bersyarat pada kebijakan IAM Anda dengan mengikuti proses di bawah ini.

Konsol

Untuk menambahkan binding bersyarat menggunakan konsol Google Cloud :

  1. Buka halaman admin IAP.

    Buka halaman admin IAP

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

  3. Di Panel info sebelah kanan, 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 dan tentukan kondisi tingkat akses yang harus dipenuhi akun utama untuk mengakses resource.

    • Untuk menentukan tingkat akses yang ada, pilih tingkat akses dari menu drop-down Tingkat akses. Anda harus memilih peran IAP-secured Web App User dan memiliki izin tingkat organisasi untuk melihat tingkat akses yang ada. Anda harus diberi salah satu peran berikut:
      • Access Context Manager Admin
      • Access Context Manager Editor
      • Access Context Manager Reader
    • Untuk membuat dan mengelola tingkat akses, gunakan Access Context Manager.
  6. Jika Anda ingin menambahkan peran lainnya ke akun utama, klik Add another role.

  7. Setelah selesai menambahkan peran, klik Simpan.

    Anda kini telah menambahkan binding bersyarat ke resource Anda.

Untuk menghapus binding bersyarat:

  1. Buka halaman admin IAP.

    Buka halaman admin IAP

  2. Centang kotak di samping resource yang ingin Anda hapus peran IAM akun utamanya.

  3. Di Panel info sebelah kanan, di bagian Role / Principal, klik peran yang ingin Anda hapus dari akun utama.

  4. Klik Remove di samping akun utama.

  5. Pada dialog Remove role from principal yang muncul, klik Remove. Untuk menghapus semua peran yang tidak diwariskan dari akun utama pada resource yang dipilih, centang kotak sebelum mengklik Remove.

gcloud

Saat ini, Anda hanya dapat menggunakan alat gcloud untuk menetapkan binding bersyarat level project.

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

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

    gcloud iap web get-iam-policy --project=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.

      Cuplikan berikut menunjukkan kondisi IAM dengan hanya satu atribut yang ditentukan. Kondisi ini memberikan akses kepada pengguna dan grup jika persyaratan tingkat akses ACCESS_LEVEL_NAME terpenuhi dan jalur URL resource dimulai dengan /.

    bindings:
    ...
      - 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 iap web set-iam-policy --project=PROJECT_ID policy.yaml

Kebijakan IAM Anda kini menyertakan binding bersyarat.

API

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

Sebelum melakukan langkah-langkah API khusus aplikasi di bawah, ekspor variabel berikut:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/${PROJECT_NUM}/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. Export the following App Engine variables:
 <pre class="devsite-click-to-copy prettyprint lang-html" suppresswarning="suppresswarning">
 \# The APP_ID is usually the project ID
 export GAE_APP_ID=<var>APP_ID</var>
 export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}</pre>

 1. Get the IAM policy for the App Engine app using the `getIamPolicy` method. The empty data bit at the end turns the `curl` request into POST instead of GET.
curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \\
    ${GAE_BASE_URL}/:getIamPolicy -d ''
1. Tambahkan binding bersyarat IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file `policy.json` yang telah diedit yang mengikat peran `iap.httpsResourceAccessor` ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan IAP. 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 `/`. Setiap binding hanya dapat memiliki satu kondisi.

**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"
          }
        }
        ]
  }
}
1. Tetapkan file `policy.json` baru Anda menggunakan metode `setIamPolicy`.
 curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \\
     ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}

#### Layanan dan versi App Engine

 You can also update the IAM policy of a App Engine
 service, all versions, or a specific version of a service. To do this for a specific version of a service:

 1. Export the following additional variables.

    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
1. Perbarui variabel GAE_BASE_URL yang diekspor.
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
1. Dapatkan dan tetapkan kebijakan IAM untuk versi tersebut 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. Get the IAM policy for the Compute Engine app using the `getIamPolicy` method. The empty data bit at the end turns the `curl` request into POST instead of GET.
 <pre class="devsite-click-to-copy prettyprint lang-html" suppresswarning="suppresswarning">
 curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \\
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \\
     -d ''</pre>
 3. Add your IAM conditional binding to the IAM policy JSON file.
    The following is an example of an edited `policy.json` file that binds the
    `iap.httpsResourceAccessor` role to two users, granting them access to the IAP-secured resources. An IAM
    condition has been added to grant them access to the resources only if the <var>ACCESS_LEVEL_NAME</var> access level requirement is met and the resource URL path starts with `/`.
    Each binding can have only one condition.

    <br/>**Example policy.json file**
{
  "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 Anda menggunakan metode `setIamPolicy`.
     curl -i -H "Content-Type:application/json" \\
             -H "Authentication: Bearer $(gcloud auth print-access-token)" \\
             ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \\
             -d @${JSON_NEW_POLICY}

Menggunakan kondisi nama host dan jalur

Akses ke aplikasi Anda dapat diamankan menggunakan nama host dan jalur URL permintaan. Misalnya, kondisi IAM request.path.startsWith dapat digunakan untuk hanya memberikan akses kepada karyawan di grup Privileged Access jika jalur URL dimulai dengan /admin.

Untuk mengetahui informasi selengkapnya tentang penggunaan kondisi nama host dan jalur, lihat atribut permintaan.

Normalisasi string

URL memiliki nama host dan jalur. Misalnya, URL https://sheets.google.com/create?query=param memiliki nama host sheets.google.com dan jalur /create.

Backend dapat menafsirkan nama host dan jalur dengan cara yang berbeda. Untuk menghilangkan ambiguitas, IAP menormalisasi string nama host dan jalur saat memeriksa kebijakan.

IAP melakukan dua pemeriksaan kebijakan saat permintaan memiliki jalur yang tidak dinormalisasi. Jika jalur yang tidak dinormalisasi lulus pemeriksaan kebijakan, IAP akan menormalisasi jalur dan pemeriksaan kebijakan kedua akan dilakukan. Akses diberikan jika jalur yang tidak dinormalisasi dan yang dinormalisasi lulus pemeriksaan kebijakan.

Misalnya, jika permintaan memiliki jalur /internal;some_param/admin, IAP akan terlebih dahulu melakukan pemeriksaan kebijakan pada jalur yang tidak dinormalisasi (/internal). Jika berhasil, IAP akan melakukan pemeriksaan kebijakan kedua pada jalur yang dinormalisasi (/internal/admin).

Nama host

Nama host dinormalisasi dengan:

  • Menghapus titik di akhir
  • Mengubah karakter menjadi huruf kecil
  • Mengonversi ke ASCII

Nama host yang menyertakan karakter non-ASCII akan dinormalisasi lebih lanjut dengan punycode. Anda harus melakukan punycode pada string nama host agar kecocokan dapat dibuat.

Untuk mengubah string nama host menjadi punycode, gunakan konverter seperti Punycoder.

Berikut adalah contoh nama host yang dinormalisasi:

  • FOO.com dinormalisasi menjadi foo.com
  • café.fr dinormalisasi menjadi xn--caf-dma.fr

Jalur

Jalur dinormalisasi dengan:

  • Menghapus parameter jalur
  • Menyelesaikan jalur relatif ke jalur absolut yang setara

Parameter jalur mencakup semua karakter dari ; hingga / berikutnya atau akhir jalur.

Permintaan yang berisi ..; di awal bagian jalur dianggap tidak valid. Misalnya, /..;bar/ dan /bar/..;/ menampilkan error HTTP 400: Bad Request.

Berikut adalah contoh jalur yang dinormalisasi:

  • /internal;some_param/admin dinormalisasi menjadi /internal/admin
  • /a/../b dinormalisasi menjadi /b
  • /bar;param1/baz;baz;param2 dinormalisasi menjadi /bar/baz

Akhiran subdomain

Kebijakan yang ditetapkan dengan request.host.endsWith("google.com") akan cocok dengan sub_domain.google.com dan testgoogle.com. Jika sasaran Anda adalah membatasi kebijakan ke semua subdomain yang diakhiri dengan google.com, tetapkan kebijakan ke request.host.endsWith(".google.com").

Perhatikan bahwa menetapkan kebijakan Anda ke request.host.endsWith(".google.com") akan cocok dengan sub_domain.google.com, tetapi tidak akan cocok dengan google.com karena . tambahan.

Cloud Audit Logs dan tingkat akses

Mengaktifkan Cloud Audit Logs untuk project yang diamankan IAP memungkinkan Anda melihat permintaan akses yang diizinkan dan tidak diizinkan. Lihat permintaan dan semua tingkat akses yang telah dipenuhi pemohon dengan menyelesaikan langkah-langkah berikut:

  1. Buka Google Cloud konsol Logs Explorer untuk project Anda.
    Buka halaman log
  2. Di menu drop-down pemilih resource, pilih resource. Resource HTTPS yang diamankan IAP berada di bagian App Engine Application dan Compute Engine Layanan Backend. Resource SSH dan TCP yang diamankan IAP berada di bagian Compute Engine VM instance .
  3. Di menu drop-down logs type, pilih data_access.
    • Jenis log data_access hanya muncul jika ada traffic ke resource Anda setelah Anda mengaktifkan Cloud Audit Logs untuk IAP.
  4. Klik untuk meluaskan tanggal dan waktu akses yang ingin Anda tinjau.
    • Akses yang diizinkan memiliki ikon i berwarna biru.
    • Akses tidak sah memiliki ikon !! berwarna oranye.
  5. Lihat tingkat akses yang telah dipenuhi pemohon dengan mengklik untuk meluaskan bagian hingga Anda mencapai protoPayload > requestMetadata > requestAttributes > auth > accessLevels.

Perhatikan bahwa semua tingkat akses yang telah dipenuhi pengguna dapat dilihat saat melihat permintaan, termasuk tingkat akses yang tidak diperlukan untuk mengaksesnya. Melihat permintaan yang tidak sah tidak menunjukkan tingkat akses yang tidak terpenuhi. Hal ini ditentukan dengan membandingkan kondisi pada resource dengan tingkat akses yang terlihat pada permintaan.

Lihat panduan Cloud Audit Logs untuk mengetahui informasi selengkapnya tentang log.