Halaman ini menjelaskan cara membuat tingkat akses menggunakan Access Context Manager dan menerapkannya pada 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 dapat diberikan. Misalnya, Anda dapat menetapkan tingkat "High_Trust" ke koneksi dari dalam jaringan perusahaan Anda dan kepercayaan "Medium_Trust" ke perangkat eksternal yang menjalankan sistem operasi yang disetujui.
Informasi perangkat dikumpulkan dan dirujuk oleh tingkat akses setelah Anda menyiapkan Endpoint Verification. 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 IAP. IAP memungkinkan Anda menerapkan model kontrol akses tingkat resource yang terperinci, bukan menggunakan firewall tingkat jaringan. Misalnya, Anda dapat menetapkan bahwa meskipun banyak resource tersedia untuk "Medium_Trust", resource tertentu yang lebih sensitif memerlukan tingkat "High_Trust".
Untuk informasi selengkapnya, lihat ringkasan Pengelola Akses Konteks.
Sebelum memulai
Sebelum memulai, Anda perlu melakukan hal berikut:
- Mengamankan resource dengan IAP.
- Siapkan Verifikasi Endpoint. Perhatikan bahwa ini hanya diperlukan jika Anda ingin membatasi akses ke resource berdasarkan informasi perangkat pengguna seperti status enkripsi penyimpanan.
Pastikan salah satu peran berikut diberikan pada project Anda.
- Access Context Manager Admin
- Access Context Manager Editor
Membuat tingkat akses
Proses berikut akan membuat tingkat akses.
Pada contoh ini, misalkan Anda ingin membuat tingkat akses yang mengizinkan grup auditor internal mengakses Kemampuan Observasi Google Cloud untuk sebuah project. Semua
perangkat untuk auditor akan diberi IP pada subnet yang berkisar antara
203.0.113.0
dan 203.0.113.127
. Anda juga ingin memastikan bahwa
perangkat mereka telah dienkripsi. Anda tahu tidak akan ada perangkat yang ditetapkan ke subnet itu selain
yang digunakan oleh auditor.
Konsol
Membuka 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 dan pilih Encrypted. Perhatikan bahwa aturan ini hanya berfungsi setelah Anda menyiapkan Verifikasi Endpoint di perangkat karyawan Anda.
Klik kembali Add attribute, lalu pilih IP Subnetworks.
Di kotak Subnetwork IP, masukkan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.
Dalam contoh ini, untuk membatasi akses hanya untuk auditor, Anda akan memasukkan
203.0.113.0/25
di kotak Subnetwork IP.Klik Save.
gcloud
Buat file .yaml untuk level akses yang menyertakan satu atau beberapa rentang IPv4 atau IPv6 yang diformat sebagai blok CIDR.
Dalam contoh ini, untuk membatasi akses hanya untuk auditor, Anda perlu memasukkan kode berikut ke dalam file .yaml:
- ipSubnetworks: - 203.0.113.0/25 - devicePolicy: allowedEncryptionStatuses - ENCRYPTED
Untuk daftar atribut tingkat akses dan format YAMLnya, lihat Atribut tingkat akses. Lihat contoh file YAML tingkat akses ini untuk mengetahui file YAML yang komprehensif dari semua atribut yang mungkin.
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 dimulai dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.
TITLE adalah judul yang dapat dibaca manusia. Nama ini harus unik untuk kebijakan tersebut.
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 untuk auditor, Anda harus memasukkan kode 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 dimulai dengan huruf dan hanya menyertakan huruf, angka, dan garis bawah.
TITLE adalah judul yang dapat dibaca manusia. Nama ini harus unik untuk kebijakan tersebut.
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 oleh IAP memiliki kebijakan IAM yang mengikat peran IAP ke resource tersebut.
Dengan menambahkan binding kondisional IAM ke kebijakan IAM, akses ke resource Anda akan dibatasi lebih lanjut berdasarkan atribut permintaan. Atribut permintaan ini mencakup:
- Tingkat akses
- Host/Jalur URL
- Date/Time
Perhatikan bahwa nilai permintaan yang dibandingkan dengan request.host
dan request.path
yang ditentukan dalam binding kondisional IAM harus sama persis. Misalnya, jika Anda membatasi akses ke jalur yang dimulai dengan /internal admin
, seseorang dapat mengabaikan pembatasan ini dengan membuka /internal%20admin
. Lihat
Menggunakan kondisi nama host dan jalur
untuk mengetahui informasi selengkapnya.
Langkah-langkah berikut menunjukkan cara menambahkan tingkat akses ke resource yang diamankan IAP dengan memperbarui kebijakan IAM-nya.
Konsol
Buka halaman admin IAP.
Pilih kotak centang di samping resource yang izin IAMnya ingin Anda perbarui.
Di sisi kanan Panel info, klik Tambahkan akun utama.
Di kotak New principal, masukkan akun utama yang ingin Anda tetapkan perannya.
Pada menu drop-down Pilih peran, pilih peran IAP-secured Web App User.
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.
Jika Anda menerapkan beberapa tingkat akses ke resource, pengguna diberi akses ke resource jika mereka memenuhi kondisi yang ditentukan di setidaknya salah satu tingkat akses yang Anda pilih (ini adalah OR logis dari tingkat akses dalam daftar). Jika Anda ingin pengguna memenuhi kondisi di lebih dari satu tingkat akses (AND logis dari tingkat akses), buat tingkat akses yang berisi beberapa tingkat akses.
Jika Anda ingin menambahkan peran lainnya 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 level project.
Untuk menetapkan binding kondisional, edit file policy.yaml
project Anda dengan
mengikuti proses berikut:
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 tempat Anda ingin menerapkan kondisi IAM.
- Peran
iap.httpsResourceAccessor
untuk memberinya 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 ...
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 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 menyelesaikan langkah-langkah API khusus aplikasi di bawah ini, 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 kondisional IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file
policy.json
yang telah diedit yang mengikat peraniap.httpsResourceAccessor
ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh BeyondCorp Enterprise. 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. Cara melakukannya pada 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 kondisional IAM Anda ke file JSON kebijakan IAM. Berikut adalah contoh file
policy.json
yang telah diedit yang mengikat peraniap.httpsResourceAccessor
ke dua pengguna, sehingga memberi mereka akses ke resource yang diamankan oleh BeyondCorp Enterprise. Kondisi IAM telah ditambahkan untuk memberi klien 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}