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:
- Memberikan akses kepada semua karyawan jika mereka menggunakan perangkat perusahaan tepercaya dari jaringan perusahaan Anda.
- Memberikan akses kepada karyawan dalam grup Akses Jarak Jauh jika mereka menggunakan perangkat perusahaan tepercaya dengan sandi yang aman dan tingkat patch terbaru, dari jaringan mana pun.
- Hanya memberikan akses kepada karyawan dalam grup Akses Istimewa jika jalur URL dimulai dengan
/admin.
Sebelum memulai
Sebelum memulai, Anda memerlukan hal berikut:
- Aplikasi yang diamankan oleh IAP yang ingin Anda tambahkan akses individual atau grup.
- Nama pengguna atau grup yang ingin Anda berikan 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 oleh IAP.
Penggunaan kebijakan cakupan 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 oleh IAP memiliki kebijakan IAM yang mengikat peran IAP ke aplikasi.
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 melewati 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.
Konsol
Untuk menambahkan binding bersyarat menggunakan konsol: Google Cloud
Buka halaman admin IAP.
Centang kotak di samping resource yang ingin Anda perbarui izin IAM-nya.
Di sisi kanan Panel info, klik Tambahkan akun utama.
Di kotak Akun utama baru, masukkan akun utama yang ingin Anda tetapkan perannya.
Di daftar drop-down Pilih peran, pilih peran Pengguna Aplikasi Web yang Diamankan oleh IAP dan tentukan kondisi tingkat akses yang harus dipenuhi akun utama untuk mengakses resource.
- Untuk menentukan tingkat akses yang ada, pilih tingkat akses tersebut dari daftar drop-down Tingkat akses. Anda harus memilih peran Pengguna Aplikasi Web yang Diamankan oleh IAP 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.
- Untuk menentukan tingkat akses yang ada, pilih tingkat akses tersebut dari daftar drop-down Tingkat akses. Anda harus memilih peran Pengguna Aplikasi Web yang Diamankan oleh IAP dan memiliki izin tingkat organisasi untuk melihat tingkat akses yang ada. Anda harus diberi salah satu peran berikut:
Jika Anda ingin menambahkan lebih banyak peran ke akun utama, klik Tambahkan peran lain.
Setelah selesai menambahkan peran, klik Simpan.
Anda kini telah menambahkan binding bersyarat ke resource Anda.
Untuk menghapus binding bersyarat:
Buka halaman admin IAP.
Centang kotak di samping resource yang ingin Anda hapus peran IAM akun utamanya.
Di sisi kanan Panel info, di bagian Peran / Akun utama, klik peran yang ingin Anda hapus dari akun utama.
Klik Hapus di samping akun utama.

Pada dialog Hapus peran dari akun utama yang muncul, klik Hapus. Untuk menghapus semua peran yang tidak diwarisi dari akun utama di resource yang dipilih, centang kotak sebelum mengklik Hapus.
gcloud
Saat ini, Anda hanya dapat menggunakan alat gcloud untuk menetapkan binding bersyarat tingkat project.
Untuk menetapkan binding bersyarat, edit file policy.yaml project Anda dengan mengikuti proses di bawah:
Buka kebijakan IAM untuk aplikasi menggunakan perintah gcloud berikut:
gcloud iap web get-iam-policy --project=PROJECT_ID > policy.yaml
Edit file
policy.yamluntuk menentukan hal berikut:- Pengguna dan grup yang ingin Anda terapkan kondisi IAM.
- Peran
iap.httpsResourceAccessoruntuk 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 ...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 Anda, ikuti proses di bawah 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 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
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}Dapatkan kebijakan IAM untuk aplikasi App Engine menggunakan metode
getIamPolicy. Bit data kosong di akhir mengubah permintaancurlmenjadi POST, bukan GET.curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}/:getIamPolicy -d ''
Tambahkan binding bersyarat IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file
policy.jsonyang diedit yang mengikat peraniap.httpsResourceAccessorke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh 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/. 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" } } ] } }
Tetapkan file
policy.jsonbaru Anda menggunakan metodesetIamPolicy.curl -i -H "Authentication: 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:
- Ekspor variabel tambahan berikut.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- Perbarui variabel GAE_BASE_URL yang diekspor.
export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
- Dapatkan dan tetapkan kebijakan IAM untuk versi menggunakan perintah
getIamPolicydansetIamPolicyyang ditampilkan di atas.
GKE dan Compute Engine
Ekspor project ID layanan backend Anda.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
Dapatkan kebijakan IAM untuk aplikasi Compute Engine menggunakan metode
getIamPolicy. Bit data kosong di akhir mengubah permintaancurlmenjadi POST, bukan GET.curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''Tambahkan binding bersyarat IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file
policy.jsonyang diedit yang mengikat peraniap.httpsResourceAccessorke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh 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/. 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" } } ] } }
Tetapkan file
policy.jsonbaru Anda menggunakan metodesetIamPolicy.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 dalam grup Akses Istimewa 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 menginterpretasikan nama host dan jalur dengan cara yang berbeda. Untuk menghilangkan ambiguitas, IAP menormalkan string nama host dan jalur saat memeriksa kebijakan.
IAP melakukan dua pemeriksaan kebijakan saat permintaan memiliki jalur yang tidak dinormalkan. Jika jalur yang tidak dinormalkan lulus pemeriksaan kebijakan, IAP akan menormalkan jalur tersebut dan pemeriksaan kebijakan kedua akan dilakukan. Akses diberikan jika jalur yang tidak dinormalkan dan dinormalkan lulus pemeriksaan kebijakan.
Misalnya, jika permintaan memiliki jalur /internal;some_param/admin,
IAP pertama-tama akan melakukan pemeriksaan kebijakan
pada jalur yang tidak dinormalkan (/internal). Jika lulus,
IAP akan melakukan pemeriksaan kebijakan kedua pada jalur yang dinormalkan
(/internal/admin).
Nama host
Nama host dinormalkan dengan:
- Menghapus titik di akhir
- Mengubah karakter menjadi huruf kecil
- Mengonversi ke ASCII
Nama host yang menyertakan karakter non-ASCII akan dinormalkan lebih lanjut dengan punycode. Anda harus melakukan punycode pada string nama host agar cocok.
Untuk melakukan punycode pada string nama host, gunakan konverter seperti Punycoder.
Berikut adalah contoh nama host yang dinormalkan:
FOO.comdinormalkan menjadifoo.comcafé.frdinormalkan menjadixn--caf-dma.fr
Jalur
Jalur dinormalkan 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 dinormalkan:
/internal;some_param/admindinormalkan menjadi/internal/admin/a/../bdinormalkan menjadi/b/bar;param1/baz;baz;param2dinormalkan menjadi/bar/baz
Akhiran subdomain
Kumpulan kebijakan yang ditetapkan dengan request.host.endsWith("google.com") akan cocok dengan
sub_domain.google.com dan testgoogle.com. Jika tujuan Anda adalah membatasi
kebijakan ke semua subdomain yang diakhiri dengan google.com, tetapkan kebijakan Anda ke
request.host.endsWith(".google.com").
Perhatikan bahwa menetapkan kebijakan ke request.host.endsWith(".google.com") akan
cocok dengan sub_domain.google.com, tetapi tidak akan cocok dengan google.com karena adanya
tambahan ..
Cloud Audit Logs dan tingkat akses
Mengaktifkan Cloud Audit Logs untuk project yang diamankan oleh IAP memungkinkan Anda melihat permintaan akses yang diizinkan dan tidak diizinkan. Lihat permintaan dan semua tingkat akses yang telah dipenuhi pemohon dengan mengikuti proses berikut:
-
Buka Google Cloud konsol
Logs Explorer untuk project Anda.
Buka halaman log - Di daftar drop-down pemilih resource, pilih resource. Resource HTTPS yang diamankan oleh IAP berada di bagian Aplikasi App Engine dan Layanan Backend Compute Engine. Resource SSH dan TCP yang diamankan oleh IAP berada di bagian Instance VM Compute Engine.
-
Di daftar drop-down jenis log, pilih
data_access.
- Jenis log data_access hanya muncul jika ada traffic ke resource Anda setelah Anda mengaktifkan Cloud Audit Logs untuk IAP.
-
Klik untuk meluaskan tanggal dan waktu akses yang ingin Anda tinjau.
- Akses yang diizinkan memiliki ikon
iberwarna biru. - Akses yang tidak diizinkan memiliki ikon
!!berwarna oranye.
- Akses yang diizinkan memiliki ikon
-
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 akan terlihat saat melihat a permintaan, termasuk tingkat akses yang tidak diperlukan untuk mengaksesnya. Melihat permintaan yang tidak diizinkan tidak menunjukkan tingkat akses mana 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.