MaxCompute menyediakan metode kontrol akses berbasis kebijakan untuk pengaturan izin yang kompleks dan fleksibel. Metode ini ideal bagi perusahaan besar dan skenario kompleks yang memerlukan kontrol detail halus. Berbeda dengan otorisasi daftar kontrol akses (ACL), kontrol akses berbasis kebijakan juga mendukung blacklist. Fitur ini memungkinkan Anda membuat kebijakan yang memberikan atau menolak izin suatu peran untuk melakukan operasi tertentu pada objek tertentu. Setelah peran tersebut ditetapkan kepada pengguna, izin peran tersebut akan berlaku. Topik ini menjelaskan perintah otorisasi kebijakan yang didukung MaxCompute dan memberikan contoh otorisasi.
Informasi latar belakang
Kontrol akses berbasis kebijakan mendukung otorisasi daftar putih dan blacklist. Anda dapat memberikan (daftar putih) atau menolak (blacklist) izin suatu peran untuk melakukan operasi tertentu pada objek tertentu.
Metode kontrol akses ini menyelesaikan masalah otorisasi yang tidak dapat diselesaikan menggunakan kontrol akses berbasis ACL. Misalnya, seorang pengguna diberi peran developer dan secara default memiliki izin untuk menghapus tabel. Jika Anda ingin menolak peran 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.
Skenario | Deskripsi | Pemberi otorisasi | Titik akhir otorisasi |
Memberikan izin kepada pengguna berdasarkan peran | Berikan izin kepada suatu peran untuk mengizinkan atau menolak satu atau beberapa operasi pada objek tertentu. Kemudian, tetapkan peran tersebut kepada beberapa pengguna. Pengguna mewarisi izin dari peran tersebut. | Lihat kolom Pemberi otorisasi dalam izin MaxCompute. | |
Menggunakan peran kustom untuk otorisasi detail halus bagi pengguna dengan peran bawaan | Jika pengguna telah diberi peran bawaan dan Anda memerlukan kontrol lebih detail atas izin mereka, otorisasi ACL tidak cukup. Dalam kasus ini, gunakan kontrol akses berbasis kebijakan untuk membuat peran baru. Anda kemudian dapat memberikan atau menolak izin peran tersebut untuk melakukan operasi pada objek proyek dan menetapkan peran tersebut kepada pengguna untuk pengelolaan izin yang lebih detail. |
Lingkup
Sebelum menggunakan fitur kontrol akses berbasis kebijakan, perhatikan prasyarat, batasan, dan tindakan pencegahan berikut.
Prasyarat:
Kontrol akses berbasis kebijakan hanya mendukung otorisasi untuk peran yang sudah ada. Pastikan nama peran yang akan diberi otorisasi dan pastikan peran tersebut telah ditambahkan ke proyek MaxCompute. Anda dapat menjalankan perintah
list roles;pada Klien MaxCompute untuk mengambil informasi peran. Untuk membuat peran baru, lihat Perencanaan peran.Jenis objek, nama objek, dan aksi yang akan diberi otorisasi.
Untuk informasi selengkapnya tentang jenis objek dan aksi, lihat Izin MaxCompute.
Tindakan pencegahan:
Jika otorisasi daftar putih dan blacklist dikonfigurasi bersamaan, blacklist 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 timbul dari penghapusan dan pembuatan ulang objek dengan nama yang sama.
Setelah pengguna dihapus, izin yang diberikan kepada pengguna tetap dipertahankan. Jika pengguna ditambahkan kembali ke proyek, izin akses historis pengguna tersebut diaktifkan kembali. Untuk informasi selengkapnya tentang cara menghapus informasi izin sisa pengguna yang dihapus, lihat Menghapus sepenuhnya informasi izin sisa pengguna yang dihapus.
Format perintah
Perintah kontrol akses berbasis kebijakan diformat sebagai berikut:
Otorisasi kebijakan
GRANT <actions> ON <object_type> <object_name> TO ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>"]);Mencabut otorisasi kebijakan
REVOKE <actions> ON <object_type> <object_name> FROM ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}");
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Wajib | Deskripsi | |
actions | Ya | Aksi yang akan diberikan. Anda dapat menentukan beberapa aksi dalam satu perintah. Jika Anda menentukan beberapa aksi, pisahkan dengan koma (,). Untuk informasi selengkapnya tentang nilai yang valid, lihat Izin MaxCompute. | |
object_type | Ya | Jenis objek yang akan diberikan izin. Anda hanya dapat menentukan satu jenis objek dalam satu perintah. Untuk informasi selengkapnya tentang nilai yang valid, lihat Izin MaxCompute. | |
object_name | Ya | Nama objek yang akan diberikan izin. Anda dapat memperoleh nama dengan salah satu cara berikut:
Anda dapat menggunakan tanda bintang (*) sebagai karakter wildcard untuk objek otorisasi. Misalnya, Catatan Anda hanya dapat menggunakan tanda bintang (*) sebagai karakter wildcard saat memberikan izin kepada ROLE. Anda tidak dapat menggunakan karakter wildcard saat memberikan izin kepada USER. | |
role_name | Ya | Nama peran yang akan diberi otorisasi. Anda hanya dapat menentukan satu peran dalam satu perintah. Anda dapat menjalankan perintah | |
privilegeproperties | policy | Ya | Tetapkan nilainya ke true. Ini menunjukkan bahwa metode kontrol akses berbasis kebijakan digunakan. |
allow | Diperlukan untuk otorisasi daftar putih | Menentukan mekanisme otorisasi. Nilai yang valid:
| |
conditions | Tidak | Mengontrol izin berdasarkan dimensi seperti sumber paket permintaan dan metode akses. Untuk informasi selengkapnya tentang nilai yang valid, lihat Kondisi. | |
Contoh kontrol akses berbasis kebijakan
Asumsikan bahwa Bob@aliyun.com adalah pemilik proyek test_project_a, dan Allen serta Tom adalah pengguna Manajemen Akses Sumber Daya (RAM) di bawah akun Bob@aliyun.com. Allen telah diberi peran Admin proyek test_project_a. Contoh berikut menunjukkan cara melakukan operasi otorisasi pada Klien MaxCompute:
Contoh 1: Memberikan izin kepada pengguna berdasarkan peran (blacklist)
Tolak Tom dari menghapus tabel yang namanya dimulai dengan
tb_.Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat peran Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan peran Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Menolak peran Worker dari menghapus tabel yang namanya dimulai 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 namanya dimulai dengan tb_ ditolak. Authorization Type: Policy [role/worker] D projects/test_project_a/tables/tb_*: DropContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah 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 definisikan kebijakan otorisasi.
Berikut adalah contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }Di tab Role Permissions, klik Manage Members di kolom Actions untuk peran baru dan tambahkan
RAM$Bob@aliyun.com:Tomke peran tersebut.
Contoh 2: Mencabut otorisasi kebijakan (blacklist)
Berdasarkan Contoh 1, cabut otorisasi dari pengguna Tom.
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Mencabut peran 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 peran (daftar putih)
Izinkan Tom untuk memperbarui data di tabel yang namanya dimulai dengan
tb_.Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat peran Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan peran Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Izinkan peran Worker untuk memperbarui data di tabel yang namanya dimulai 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 namanya dimulai dengan tb_. Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: UpdateContoh berikut menunjukkan cara menerapkan otorisasi kebijakan di konsol:
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah 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 definisikan kebijakan otorisasi.
Berikut adalah contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Update" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }Di tab Role Permissions, klik Manage Members di kolom Actions untuk peran baru dan tambahkan
RAM$Bob@aliyun.com:Tomke peran 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 peran 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 bagi pengguna dengan peran 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 peran Worker. CREATE ROLE Worker; -- Menyambungkan peran Worker ke pengguna Allen. GRANT Worker TO RAM$Bob@aliyun.com:Allen; -- Menolak peran 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:
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah 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, dan tentukan Role Name dan kebijakan otorisasi.
Berikut adalah contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }Di tab Role Permissions, klik Manage Members di kolom Actions untuk peran baru, dan tambahkan
RAM$Bob@aliyun.com:Allenke peran tersebut.
Contoh 6: Mencabut otorisasi bagi pengguna dengan peran bawaan
Berdasarkan Contoh 5, cabut otorisasi dari pengguna Allen. Berikut adalah contoh perintahnya.
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Mencabut peran 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 mengkueri semua tabel berdasarkan peran (daftar putih)
Contoh berikut menunjukkan cara menerapkan otorisasi kebijakan menggunakan perintah:
-- Bob memasuki proyek test_project_a. USE test_project_a; -- Membuat peran Worker. CREATE ROLE Worker; -- Menambahkan pengguna Tom sebagai anggota proyek. ADD USER RAM$Bob@aliyun.com:Tom; -- Menyambungkan peran Worker ke pengguna Tom. GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- Izinkan peran Worker untuk mengkueri 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 mengkueri 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:
Masuk ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah 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, atur Jenis Peran ke Sumber daya, tentukan Role Name, dan atur Metode Otorisasi ke Kebijakan.
Berikut adalah contoh kebijakan:
{ "Statement":[ { "Action":[ "odps:Describe", "odps:Select" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }Di tab Role Permissions, klik Manage Members di kolom Actions untuk peran baru dan tambahkan
RAM$Bob@aliyun.com:Tomke peran tersebut.
Langkah selanjutnya
Setelah memahami mekanisme otorisasi kebijakan, Anda dapat melakukan operasi otorisasi berikut sesuai kebutuhan:
Untuk informasi selengkapnya tentang mekanisme otorisasi kebijakan, lihat topik berikut:
Untuk praktik otorisasi kontrol akses berbasis kebijakan, lihat Praktik kontrol akses berbasis kebijakan.
Untuk melakukan pengelolaan izin operasi yang lebih detail bagi pengguna dengan peran bawaan, lihat Mengelola izin pengguna dengan peran bawaan berdasarkan kebijakan.
Untuk pertanyaan umum tentang pengelolaan izin di MaxCompute, lihat FAQ tentang pengelolaan izin.