Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh 1: ABAC Dasar dengan OPA dan Rego
Bagian ini menjelaskan skenario di mana OPA digunakan untuk membuat keputusan akses tentang pengguna mana yang diizinkan mengakses informasi dalam layanan mikro Payroll fiksi. Cuplikan kode Rego disediakan untuk menunjukkan bagaimana Anda dapat menggunakan Rego untuk membuat keputusan kontrol akses. Contoh-contoh ini tidak lengkap atau eksplorasi penuh kemampuan Rego dan OPA. Untuk ikhtisar Rego yang lebih menyeluruh, kami sarankan Anda berkonsultasi dengan dokumentasi Rego di situs web
Contoh aturan OPA dasar
Pada diagram sebelumnya, salah satu aturan kontrol akses yang diberlakukan oleh OPA untuk layanan mikro Payroll adalah:
Karyawan dapat membaca gaji mereka sendiri.
Jika Bob mencoba mengakses layanan mikro Payroll untuk melihat gajinya sendiri, layanan mikro Payroll dapat mengarahkan panggilan API ke API OPA RESTful untuk membuat keputusan akses. Layanan Payroll menanyakan OPA untuk keputusan dengan masukan JSON berikut:
{ "user": "bob", "method": "GET", "path": ["getSalary", "bob"] }
OPA memilih kebijakan atau kebijakan berdasarkan kueri. Dalam hal ini, kebijakan berikut, yang ditulis dalam Rego, mengevaluasi input JSON.
default allow = false allow = true { input.method == "GET" input.path = ["getSalary", user] input.user == user }
Kebijakan ini menolak akses secara default. Kemudian mengevaluasi input dalam kueri dengan mengikatnya ke variabel input global. Operator titik digunakan dengan variabel ini untuk mengakses nilai variabel. Aturan Rego allow mengembalikan true jika ekspresi dalam aturan juga benar. Aturan Rego memverifikasi bahwa input method dalam sama dengan GET. Kemudian memverifikasi bahwa elemen pertama dalam daftar path adalah getSalary sebelum menetapkan elemen kedua dalam daftar ke variabel. user Terakhir, ia memeriksa bahwa jalur yang diakses adalah /getSalary/bob dengan memeriksa apakah user membuat permintaan,input.user, cocok dengan user variabel. Aturan allow menerapkan logika jika-maka untuk mengembalikan nilai Boolean, seperti yang ditunjukkan pada output:
{ "allow": true }
Aturan sebagian menggunakan data eksternal
Untuk menunjukkan kemampuan OPA tambahan, Anda dapat menambahkan persyaratan ke aturan akses yang Anda terapkan. Mari kita asumsikan bahwa Anda ingin menerapkan persyaratan kontrol akses ini dalam konteks ilustrasi sebelumnya:
Karyawan dapat membaca gaji siapa saja yang melapor kepada mereka.
Dalam contoh ini, OPA memiliki akses ke data eksternal yang dapat diimpor untuk membantu membuat keputusan akses:
"managers": { "bob": ["dave", "john"], "carol": ["alice"] }
Anda dapat menghasilkan respons JSON arbitrer dengan membuat aturan parsi di OPA, yang mengembalikan sekumpulan nilai alih-alih respons tetap. Ini adalah contoh aturan sebagian:
direct_report[user_ids] { user_ids = data.managers[input.user][_] }
Aturan ini mengembalikan satu set semua pengguna yang melaporkan ke nilaiinput.user, yang, dalam hal ini, adalahbob. [_]Konstruk dalam aturan digunakan untuk mengulangi nilai-nilai himpunan. Ini adalah output dari aturan:
{ "direct_report": [ "dave", "john" ] }
Mengambil informasi ini dapat membantu menentukan apakah pengguna adalah laporan langsung dari seorang manajer. Untuk beberapa aplikasi, mengembalikan JSON dinamis lebih disukai daripada mengembalikan respons Boolean sederhana.
Menyatukan semuanya
Persyaratan akses terakhir lebih kompleks daripada dua yang pertama karena menggabungkan kondisi yang ditentukan dalam kedua persyaratan:
Karyawan dapat membaca gaji mereka sendiri dan gaji siapa saja yang melapor kepada mereka.
Untuk memenuhi persyaratan ini, Anda dapat menggunakan kebijakan Rego ini:
default allow = false allow = true { input.method == "GET" input.path = ["getSalary", user] input.user == user } allow = true { input.method == "GET" input.path = ["getSalary", user] managers := data.managers[input.user][_] contains(managers, user) }
Aturan pertama dalam kebijakan memungkinkan akses untuk setiap pengguna yang mencoba melihat informasi gaji mereka sendiri, seperti yang dibahas sebelumnya. Memiliki dua aturan dengan nama yang sama,allow, berfungsi sebagai logika atau operator di Rego. Aturan kedua mengambil daftar semua laporan langsung yang terkait dengan input.user (dari data dalam diagram sebelumnya) dan menetapkan daftar ini ke variabel. managers Terakhir, aturan memeriksa apakah pengguna yang mencoba melihat gaji mereka adalah laporan langsung input.user dengan memverifikasi bahwa nama mereka terkandung dalam managers variabel.
Contoh-contoh di bagian ini sangat mendasar dan tidak memberikan eksplorasi lengkap atau menyeluruh tentang kemampuan Rego dan OPA. Untuk informasi lebih lanjut, tinjau dokumentasi OPA