MaxCompute menyediakan kontrol akses berbasis kebijakan untuk pengaturan izin yang kompleks dan fleksibel, ideal bagi perusahaan besar dan skenario yang memerlukan kontrol detail halus. Berbeda dengan otorisasi daftar kontrol akses (ACL), kontrol akses berbasis kebijakan juga mendukung daftar hitam (blacklist), sehingga Anda dapat membuat kebijakan yang memberikan atau menolak izin role untuk melakukan operasi tertentu pada objek tertentu. Setelah role tersebut disambungkan ke pengguna, izin tersebut langsung berlaku.
Latar Belakang
Kontrol akses berbasis kebijakan mendukung otorisasi daftar putih dan daftar hitam. Anda dapat memberikan (daftar putih) atau menolak (daftar hitam) izin role untuk melakukan operasi tertentu pada objek tertentu.
Metode kontrol akses ini mengatasi masalah otorisasi yang tidak dapat diselesaikan menggunakan kontrol akses berbasis ACL. Misalnya, seorang pengguna diberi role developer dan secara default memiliki izin untuk menghapus tabel. Jika Anda ingin menolak role tersebut dari menghapus tabel, Anda dapat menggunakan metode kontrol akses ini.
Setelah proyek MaxCompute dibuat, kontrol akses berbasis kebijakan diaktifkan secara default. Pemilik proyek dapat menjalankan perintah set CheckPermissionUsingPolicy=true|false; di proyek MaxCompute untuk mengaktifkan atau menonaktifkan fitur ini.
Kontrol akses berbasis kebijakan berlaku untuk skenario berikut.
Scenario | Description | Authorizer | Authorization endpoint |
Grant permissions to users based on roles | Berikan izin kepada role untuk mengizinkan atau menolak satu atau beberapa operasi pada objek tertentu. Kemudian, sambungkan role tersebut ke beberapa pengguna. Pengguna tersebut mewarisi izin dari role tersebut. | Lihat kolom Authorizer dalam izin MaxCompute. | |
Use a custom role for fine-grained authorization for a user with a built-in role | Jika pengguna telah diberi role bawaan dan Anda memerlukan kontrol izin yang lebih detail halus, otorisasi ACL tidak cukup. Dalam kasus ini, gunakan kontrol akses berbasis kebijakan untuk membuat role baru. Anda kemudian dapat memberikan atau menolak izin role tersebut untuk melakukan operasi pada objek proyek dan menyambungkan role tersebut ke pengguna untuk pengelolaan izin detail halus. |
Catatan Penggunaan
Sebelum menggunakan kontrol akses berbasis kebijakan, perhatikan prasyarat dan tindakan pencegahan berikut.
Prasyarat:
Kontrol akses berbasis kebijakan hanya mendukung otorisasi untuk role yang sudah ada. Pastikan nama role yang akan diotorisasi telah ditambahkan ke proyek MaxCompute. Anda dapat menjalankan perintah
list roles;pada MaxCompute client untuk mengambil informasi role. Untuk membuat role baru, lihat 角色规划.-
Tipe objek, nama objek, dan aksi yang akan diberikan.
Untuk informasi lebih lanjut tentang tipe objek dan aksi, lihat MaxCompute permissions.
Tindakan pencegahan:
Jika otorisasi daftar putih dan daftar hitam dikonfigurasi bersamaan, daftar hitam memiliki prioritas lebih tinggi.
Kontrol akses berbasis kebijakan memungkinkan Anda memberikan izin pada objek yang belum ada. Saat Anda menghapus objek, informasi otorisasi kebijakan terkait tidak dihapus. Pemberi otorisasi harus menyadari risiko keamanan yang dapat muncul akibat penghapusan lalu pembuatan ulang objek dengan nama yang sama.
-
Saat pengguna dihapus, izinnya tetap dipertahankan. Jika pengguna tersebut ditambahkan kembali ke proyek di kemudian hari, izin sebelumnya akan dipulihkan secara otomatis. Untuk menghapus permanen izin pengguna, lihat Clear residual permissions of a removed user.
Sintaksis
Perintah kontrol akses berbasis kebijakan diformat sebagai berikut:
Policy authorization
GRANT <actions> ON <object_type> <object_name> TO ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>"]);Revoke policy authorization
REVOKE <actions> ON <object_type> <object_name> FROM ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}");
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Required | Description | |
actions | Yes | Aksi yang akan diberikan. Anda dapat menentukan beberapa aksi dalam satu perintah. Jika Anda menentukan beberapa aksi, pisahkan dengan koma (,). Untuk informasi lebih lanjut tentang nilai yang valid, lihat MaxCompute permissions. | |
object_type | Yes | Tipe objek tempat izin akan diberikan. Anda hanya dapat menentukan satu tipe objek dalam satu perintah. Untuk informasi lebih lanjut tentang nilai yang valid, lihat MaxCompute permissions. | |
object_name | Yes | Nama objek tempat izin akan diberikan. Anda dapat memperoleh nama dengan salah satu cara berikut:
Anda dapat menggunakan tanda bintang (*) sebagai wildcard dalam nama objek. Misalnya, Catatan
Anda hanya dapat menggunakan wildcard (*) saat memberikan izin kepada ROLE. Wildcard tidak didukung saat memberikan izin kepada USER. | |
role_name | Yes | Nama role yang akan diotorisasi. Anda hanya dapat menentukan satu role dalam satu perintah. Anda dapat menjalankan perintah | |
privilegeproperties | policy | Yes | Atur nilainya menjadi true. Ini menunjukkan bahwa metode kontrol akses berbasis kebijakan digunakan. |
allow | Required for whitelist authorization | Mekanisme otorisasi. Nilai yang valid:
| |
conditions | No | Mengontrol izin berdasarkan dimensi seperti sumber paket permintaan dan metode akses. Untuk informasi lebih lanjut tentang nilai yang valid, lihat Conditions. | |
Contoh kontrol akses berbasis kebijakan
Pada contoh berikut, Bob@aliyun.com adalah pemilik proyek test_project_a, dan Allen serta Tom adalah pengguna Resource Access Management (RAM) di bawah akun Bob@aliyun.com. Allen memiliki role Admin untuk test_project_a. Contoh-contoh berikut menunjukkan cara melakukan operasi otorisasi pada MaxCompute client:
Contoh 1: Memberikan izin kepada pengguna berdasarkan role (daftar hitam)
Tolak Tom dari menghapus tabel yang diawali dengan
tb_.Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat role Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan role Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Menolak role Worker dari menghapus tabel yang diawali dengan tb_ di proyek test_project_a. GRANT Drop ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false"); -- Melihat hasil otorisasi untuk pengguna Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- Hasil otorisasi berikut dikembalikan. D menunjukkan Deny. Menghapus tabel yang diawali dengan tb_ ditolak. Authorization Type: Policy [role/worker] D projects/test_project_a/tables/tb_*: DropContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, buat role Resource, masukkan Role Name, lalu definisikan kebijakan otorisasi.
Berikut contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }Di tab Role Permissions, temukan role baru tersebut, klik Manage Members pada kolom Actions, lalu tambahkan
RAM$Bob@aliyun.com:Tomke role tersebut.
Contoh 2: Mencabut otorisasi kebijakan (daftar hitam)
Berdasarkan Contoh 1, cabut otorisasi dari pengguna Tom.
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Mencabut role Worker dari pengguna Tom. REVOKE Worker FROM RAM$Bob@aliyun.com:Tom; -- Melihat hasil otorisasi untuk pengguna Tom. Daftar izin tidak berisi informasi izin Drop. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;Contoh 3: Memberikan izin kepada pengguna berdasarkan role (daftar putih)
Izinkan Tom untuk memperbarui data di tabel yang diawali dengan
tb_.Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat role Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan role Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Mengizinkan role Worker untuk memperbarui data di tabel yang diawali dengan tb_ di proyek test_project_a. GRANT Update ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true"); -- Melihat hasil otorisasi untuk pengguna Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- Hasil otorisasi berikut dikembalikan. A menunjukkan Allow. Anda dapat memperbarui data di tabel yang diawali dengan tb_. Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: UpdateContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, buat role Resource, masukkan Role Name, lalu definisikan kebijakan otorisasi.
Berikut contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Update" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }Di tab Role Permissions, temukan role baru tersebut, klik Manage Members pada kolom Actions, lalu tambahkan
RAM$Bob@aliyun.com:Tomke dalam role tersebut.
Contoh 4: Mencabut otorisasi kebijakan (daftar putih)
Berdasarkan Contoh 3, cabut otorisasi dari pengguna Tom.
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Mencabut role Worker dari pengguna Tom. REVOKE Worker FROM RAM$Bob@aliyun.com:Tom; -- Melihat hasil otorisasi untuk pengguna Tom. Daftar izin tidak berisi informasi izin Update. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;Contoh 5: Melakukan otorisasi detail halus untuk pengguna dengan role bawaan
Tolak Allen dari menghapus semua tabel di proyek test_project_a.
Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat role Worker. CREATE ROLE Worker; -- Menyambungkan role Worker ke pengguna Allen. GRANT Worker TO RAM$Bob@aliyun.com:Allen; -- Menolak role Worker dari menghapus semua tabel di proyek test_project_a. GRANT Drop ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false"); -- Melihat hasil otorisasi untuk pengguna Allen. SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen; -- Hasil otorisasi berikut dikembalikan. Menghapus semua tabel ditolak. [roles] role_project_admin, worker Authorization Type: Policy [role/role_project_admin] A projects/test_project_a: * A projects/test_project_a/instances/*: * A projects/test_project_a/jobs/*: * A projects/test_project_a/offlinemodels/*: * A projects/test_project_a/packages/*: * A projects/test_project_a/registration/functions/*: * A projects/test_project_a/resources/*: * A projects/test_project_a/tables/*: * A projects/test_project_a/volumes/*: * [role/worker] A projects/test_project_a/tables/tb_*: Update D projects/test_project_a/tables/*: Drop -- A dalam AG menunjukkan Allow. G dalam AG menunjukkan With Grant Option, yang memungkinkan Anda memberikan izin pada objek tersebut. Authorization Type: ObjectCreator AG projects/test_project_a/tables/local_test: All AG projects/test_project_a/tables/mr_multiinout_out1: All AG projects/test_project_a/tables/mr_multiinout_out2: All AG projects/test_project_a/tables/ramtest: All AG projects/test_project_a/tables/wc_in: All AG projects/test_project_a/tables/wc_in1: All AG projects/test_project_a/tables/wc_in2: All AG projects/test_project_a/tables/wc_out: AllContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, buat role Resource, masukkan Role Name, lalu definisikan kebijakan otorisasi.
Berikut contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }Di tab Role Permissions, temukan role baru tersebut, klik Manage Members pada kolom Actions, lalu tambahkan
RAM$Bob@aliyun.com:Allenke dalam role tersebut.
Contoh 6: Mencabut otorisasi untuk pengguna dengan role bawaan
Berdasarkan Contoh 5, cabut otorisasi dari pengguna Allen. Berikut contoh perintahnya.
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Mencabut role Worker dari pengguna Allen. REVOKE Worker FROM RAM$Bob@aliyun.com:Allen; -- Melihat hasil otorisasi untuk pengguna Allen. Daftar izin tidak berisi informasi izin Drop. SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen;Contoh 7: Memberikan izin kepada pengguna (Tom) untuk melakukan kueri semua tabel berdasarkan role (daftar putih)
Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat role Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan role Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Mengizinkan role Worker untuk melakukan kueri semua tabel di proyek test_project_a. GRANT Describe,Select ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true"); -- Melihat hasil otorisasi untuk pengguna Tom. SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- Hasil otorisasi berikut dikembalikan. A menunjukkan Allow. Anda dapat melakukan kueri semua tabel di proyek test_project_a. Authorization Type: Policy [role/worker] A projects/test_project_a/tables/*: Describe | SelectContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi kiri, pilih .
Di halaman Projects, temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, buat peran Sumber Daya, masukkan Role Name, dan tentukan kebijakan otorisasi.
Berikut contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Describe", "odps:Select" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }Di tab Role Permissions, temukan role baru tersebut, klik Manage Members pada kolom Actions, lalu tambahkan
RAM$Bob@aliyun.com:Tomke role tersebut.
Langkah Selanjutnya
Setelah Anda mengonfigurasi kontrol akses berbasis kebijakan, Anda dapat melakukan operasi berikut sesuai kebutuhan:
Untuk informasi lebih lanjut tentang kontrol akses berbasis kebijakan, lihat topik berikut:
Untuk praktik otorisasi kontrol akses berbasis kebijakan, lihat Policy-based access control practices.
Untuk mengelola izin operasi secara lebih granular bagi pengguna dengan role bawaan, lihat Manage permissions for users with built-in roles based on policies.
Untuk pertanyaan umum mengenai pengelolaan izin di MaxCompute, lihat Pertanyaan Umum Pengelolaan Izin.