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
Buka halaman Access Context Manager di konsol Google Cloud.
Jika diminta, pilih organisasi Anda.
Di bagian atas halaman Access Context Manager, klik New.
Di panel New Access Level, di bagian Conditions, klik Add attribute, lalu klik Device Policy.
Klik drop-down Enkripsi penyimpanan, lalu pilih Dienkripsi. Perhatikan bahwa aturan ini hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan.
Klik Tambahkan atribut lagi dan pilih Subnetwork IP.
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.Klik Simpan.
gcloud
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.Simpan file. Dalam contoh ini, file diberi nama CONDITIONS.yaml.
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
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.
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
Buka halaman admin IAP.
Pilih kotak centang di samping resource yang izin IAM-nya ingin Anda perbarui.
Di sisi kanan Panel info, klik Tambahkan akun utama.
Di kotak New principal, masukkan akun utama yang ingin Anda tetapkan peran.
Di menu drop-down Select a role, pilih peran IAP-secured Web App User.
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.
Jika Anda ingin menambahkan lebih banyak peran ke akun utama, klik Tambahkan peran lain.
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:
Buka kebijakan IAM untuk aplikasi menggunakan perintah gcloud berikut:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
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 ...
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
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 bagian akhir mengubah permintaancurl
menjadi POST, bukan GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
Tambahkan binding bersyarat IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file
policy.json
yang diedit yang mengikat peraniap.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" } } ] } }
Tetapkan file
policy.json
baru menggunakan metodesetIamPolicy
.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:
- 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
getIamPolicy
dansetIamPolicy
yang 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 bagian akhir mengubah permintaancurl
menjadi POST, bukan GET.curl -i -H "Authorization: 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.json
yang diedit yang mengikat peraniap.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" } } ] } }
Tetapkan file
policy.json
baru menggunakan metodesetIamPolicy
.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}