Anda dapat menggunakan tingkat akses kustom di Access Context Manager untuk mengontrol akses ke Google Cloud resource menggunakan ekspresi boolean yang ditulis dalam subset Common Expression Language (CEL). Anda dapat mengevaluasi atribut permintaan—seperti project jaringan asal, alamat IP, identitas, dan data perangkat dari layanan keamanan pihak ketiga—untuk menerapkan persyaratan akses terperinci dan kontekstual.
Untuk menggunakan atribut perangkat dalam ekspresi tingkat akses kustom, Anda harus memiliki langganan berbayar. Untuk mengetahui detail tentang cara membuat ekspresi CEL, lihat spesifikasi tingkat akses kustom. Setelah membuat tingkat akses kustom, Anda dapat mengelolanya dengan cara yang sama seperti tingkat akses dasar.
Sebelum memulai
- Buat kebijakan akses untuk organisasi Anda.
Membuat tingkat akses kustom
Anda dapat membuat tingkat akses kustom menggunakan konsol Google Cloud ,
alat command line gcloud, REST API, atau RPC.
Konsol
Untuk membuat tingkat akses kustom menggunakan konsol Google Cloud , lakukan hal berikut:
Buka halaman Access Context Manager di konsol Google Cloud .
Jika diminta, pilih organisasi Anda.
Di bagian atas halaman Access Context Manager, klik Baru.
Di panel New Access Level:
Di kotak Access level title, masukkan judul untuk tingkat akses. Judul harus berisi maksimal 50 karakter, diawali dengan huruf, dan hanya boleh berisi angka, huruf, garis bawah, dan spasi.
Setelah Create Conditions in, pilih Mode lanjutan.
Di bagian Kondisi, masukkan ekspresi untuk tingkat akses kustom Anda. Kondisi harus diselesaikan ke satu nilai boolean.
Untuk mengetahui contoh dan informasi selengkapnya tentang dukungan Common Expression Language (CEL) dan tingkat akses kustom, lihat Spesifikasi tingkat akses kustom.
Klik Simpan.
gcloud
Untuk membuat tingkat akses kustom menggunakan alat command line gcloud, gunakan
perintah gcloud access-context-manager levels create.
gcloud access-context-manager levels create LEVEL_NAME \ --title=TITLE \ --custom-level-spec=FILE \ --description=DESCRIPTION \ --policy=POLICY_NAME
Ganti kode berikut:
LEVEL_NAME: nama unik untuk tingkat akses. Nama harus diawali dengan huruf dan hanya menyertakan huruf, angka, serta garis bawah. Nama dapat berisi maksimal 50 karakter.TITLE: judul singkat yang dapat dibaca manusia untuk tingkat akses.FILE: file YAML yang berisi ekspresi CEL Anda yang diformat sebagai satu pasangan nilai kunci:expression: "CEL_EXPRESSION".Untuk mengetahui contoh dan informasi selengkapnya tentang dukungan Common Expression Language (CEL) dan tingkat akses kustom, lihat Spesifikasi tingkat akses kustom.
DESCRIPTION: deskripsi tingkat akses yang dapat dibaca manusia.POLICY_NAME: nama numerik kebijakan akses organisasi Anda.
Secara opsional, Anda dapat menyertakan salah satu
tanda lebar gcloud.
File YAML custom-level-spec
Saat menggunakan alat command line gcloud untuk membuat tingkat akses kustom, Anda harus memberikan
file YAML untuk opsi custom-level-spec. File YAML menentukan ekspresi CEL yang di-resolve menjadi satu nilai boolean. File YAML
harus berisi satu pasangan nilai kunci yang diformat sebagai
expression: "CEL_EXPRESSION". Nilai untuk
expression harus berupa string.
Contoh file YAML
expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"
Contoh perintah
gcloud access-context-manager levels create Custom_Trust \
--custom-level-spec=customspec.yaml \
--description="Custom access level for corp." \
--title="Custom Trust Level" \
--policy=1521580097614100
REST
Untuk membuat tingkat akses kustom menggunakan REST API, gunakan metode
accessPolicies.accessLevels.create.
Isi permintaan
Dalam isi permintaan untuk panggilan, sertakan instance objek AccessLevel.
{
"name": string,
"title": string,
"description": string,
"custom": {
"expr": {
"expression": string,
"title": string,
"description": string
}
}
}
Untuk kolom custom, buat objek yang menyertakan ekspresi CEL
untuk tingkat akses kustom Anda. Ekspresi lengkap harus di-resolve ke nilai boolean. Kolom title dan description bersifat opsional.
Contoh
{
"name": "example_custom_level",
"title": "Example custom level",
"description": "An example custom access level.",
"custom": {
"expr": {
"expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
"title": "Check for known devices",
"description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
}
}
}
RPC
Untuk membuat tingkat akses kustom menggunakan RPC, panggil
CreateAccessLevel.
Untuk kolom access_level, sertakan instance AccessLevel.
| Kolom | |||||
|---|---|---|---|---|---|
name
|
|
||||
title
|
|
||||
description
|
|
||||
custom
|
|
||||
Contoh tingkat akses kustom
Bagian ini memberikan contoh tingkat akses kustom.
Membatasi akses berdasarkan project sumber
Anda dapat membatasi akses ke resource agar hanya mengizinkan permintaan yang berasal dari project Google Cloud tertentu dan project tenant terkait. Pembatasan akses berbasis project berguna untuk mengamankan interaksi oleh workload identity, yang merupakan identitas non-manusia milik project Google Cloud . Workload Identity mencakup akun layanan, identitas gabungan Workload Identity Federation, Workload Identity terkelola, dan identitas agen.
Ekspresi berikut memberikan akses jika permintaan berasal dari
projects/123456789:
originatesFromProjects(origin, ["projects/123456789"])
Membatasi akses Workload Identity ke project jaringan miliknya sendiri
Anda dapat membatasi workload identity sehingga hanya dapat membuat permintaan dari
jaringan yang terkait dengan project Google Cloud yang memiliki
workload identity. Project dapat berupa project level teratas atau project tenant dari project level teratas. Pembatasan akses berbasis project berguna untuk mengamankan
interaksi workload identity. Tidak seperti originatesFromProjects, Anda tidak perlu menentukan nomor project dalam ekspresi, sehingga Anda dapat menggunakan kembali tingkat akses yang sama di beberapa project.
Ekspresi berikut memberikan akses jika project jaringan asal (atau project tenant terkait) cocok dengan project yang memiliki workload identity panggilan:
request.auth.matchesNetworkProject(origin)