MaxCompute mendukung daftar kontrol akses (ACL) untuk memberikan pengguna atau peran izin melakukan tindakan tertentu pada objek. Untuk mengelola izin bagi banyak pengguna, Anda dapat memberikan izin kepada suatu peran lalu menetapkan peran tersebut kepada pengguna terkait. Pendekatan ini menyediakan kontrol akses yang sederhana dan efisien. Topik ini menjelaskan perintah otorisasi ACL yang didukung MaxCompute serta memberikan contoh penerapannya.
Informasi latar belakang
Kontrol akses berbasis ACL menggunakan daftar putih, artinya Anda dapat secara eksplisit mengizinkan pengguna atau peran untuk melakukan tindakan tertentu pada suatu objek. Metode ini bersifat langsung dan memungkinkan otorisasi yang tepat sasaran.
Kontrol akses berbasis ACL diaktifkan secara default saat Anda membuat proyek MaxCompute. Pemilik proyek dapat menjalankan perintah set CheckPermissionUsingACL=true|false; untuk mengaktifkan atau menonaktifkan fitur ini.
Kontrol akses berbasis ACL cocok untuk skenario berikut.
Skenario | Deskripsi | Pemberi izin | Titik akhir otorisasi |
Memberikan izin kepada pengguna | Memberikan izin secara langsung kepada satu pengguna untuk melakukan satu atau beberapa operasi pada objek tertentu. | Untuk informasi selengkapnya, lihat kolom Pemberi otorisasi yang didukung dalam izin MaxCompute. | |
Memberikan izin kepada pengguna berdasarkan peran | Berikan izin kepada suatu peran untuk melakukan satu atau beberapa operasi pada objek tertentu. Kemudian, sambungkan peran tersebut ke beberapa pengguna. Para pengguna tersebut kemudian memiliki izin dari peran tersebut. Untuk informasi selengkapnya tentang cara membuat peran dan menyambungkan peran ke pengguna, lihat Perencanaan peran dan Menyambungkan peran ke pengguna. Catatan Peran digunakan untuk mengelola pengguna dengan lebih baik. Biasanya, Anda tidak memberikan izin yang sama pada objek yang sama kepada beberapa peran. |
Prasyarat
Sebelum menggunakan kontrol akses berbasis ACL, pastikan Anda memiliki informasi berikut:
Akun pengguna atau peran yang akan diberikan izin. Pastikan pengguna atau peran tersebut telah ditambahkan ke proyek MaxCompute Anda. Akun Alibaba Cloud memiliki format ALIYUN$<ID_akun>, akun pengguna RAM memiliki format RAM$<ID_akun>:<UID_pengguna_RAM>, dan akun peran RAM memiliki format `RAM$<ID_akun>:role/<nama_peran_RAM>`.
Anda dapat menjalankan perintah
list users;ataulist roles;pada Klien MaxCompute untuk mengambil informasi akun atau peran.Untuk menambahkan pengguna atau peran, lihat Perencanaan dan manajemen pengguna atau Perencanaan peran.
Jenis objek, nama objek, dan tindakan yang akan diotorisasi.
Untuk informasi selengkapnya tentang jenis objek dan tindakan, lihat Izin MaxCompute.
Batasan
Batasan berikut berlaku untuk kontrol akses berbasis ACL:
Anda hanya dapat memberikan izin pada objek yang sudah ada dan kepada pengguna atau peran yang sudah ada. Hal ini mencegah risiko keamanan yang dapat timbul jika Anda menghapus suatu objek lalu membuat objek berbeda dengan nama yang sama.
Kontrol akses berbasis ACL tidak mendukung otorisasi menggunakan klausa
[with grant option]. Misalnya, jika Pengguna A memberikan izin kepada Pengguna B, Pengguna B tidak dapat memberikan izin yang sama kepada Pengguna C.Otorisasi ACL menggunakan daftar putih (Allow) dan tidak mendukung daftar hitam (Deny).
Perhatian
Perhatikan hal-hal berikut saat menggunakan kontrol akses berbasis ACL:
Jika Anda menghapus suatu objek, MaxCompute secara otomatis mencabut semua otorisasi ACL yang terkait dengan objek tersebut.
Setelah pengguna dihapus, izin yang diberikan kepada pengguna tersebut tetap dipertahankan. Jika pengguna tersebut ditambahkan kembali ke proyek, izin akses historisnya akan diaktifkan kembali. Untuk informasi selengkapnya tentang cara menghapus informasi izin sisa dari pengguna yang dihapus, lihat Menghapus sepenuhnya informasi izin sisa dari pengguna yang dihapus.
Format perintah
Format perintah untuk kontrol akses berbasis ACL adalah sebagai berikut:
Memberikan izin ACL
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];Mencabut izin ACL
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>;Kontrol akses tingkat kolom
grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>; revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;
Tabel berikut menjelaskan parameter-parameter tersebut.
Parameter | Wajib | Deskripsi | |
actions | Ya | Nama izin tindakan yang akan diberikan. Anda dapat menentukan satu atau beberapa tindakan dalam satu otorisasi. Jika Anda menentukan beberapa tindakan, 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 otorisasi. Untuk informasi selengkapnya tentang nilai yang valid, lihat Izin MaxCompute. | |
object_name | Ya | Nama objek yang akan diberikan izin. Anda dapat memperoleh nama dengan cara berikut:
Anda dapat menggunakan tanda bintang (*) sebagai karakter wildcard untuk objek otorisasi. Misalnya, Catatan Anda hanya dapat menggunakan tanda bintang (*) sebagai karakter wildcard ketika memberikan izin kepada ROLE. Anda tidak dapat menggunakan karakter wildcard ketika memberikan izin kepada USER. | |
column_list | Tidak | Parameter ini hanya diperlukan ketika object_type adalah Table dan Anda perlu melakukan kontrol akses tingkat kolom. Anda dapat menentukan satu atau beberapa nama kolom, dipisahkan dengan koma (,). Catatan Parameter ini mengontrol izin Describe, Select, Alter, Update, Drop, ShowHistory, dan ALL pada kolom tertentu dari suatu tabel. Jika kolom dalam tabel memiliki tingkat sensitivitas, Anda dapat menggunakan kontrol akses berbasis label untuk mengontrol akses ke data sensitif berdasarkan label tingkat sensitivitas. | |
privilegeproperties | conditions | Tidak | Mengontrol izin berdasarkan dimensi seperti sumber permintaan dan metode akses. Formatnya adalah |
days | Tidak | Waktu kedaluwarsa izin, dalam satuan hari. Jika Anda tidak menentukan parameter ini, izin berlaku permanen. Jika Anda menentukan parameter ini, MaxCompute secara otomatis melakukan purge terhadap informasi izin setelah kedaluwarsa. | |
subject_type | Ya | Jenis subjek yang akan diberikan izin. Nilai yang valid:
| |
subject_name | Ya | Akun pengguna atau nama peran yang akan diberikan izin. Anda hanya dapat menentukan satu pengguna atau peran sekaligus. Formatnya adalah sebagai berikut:
Anda dapat menjalankan perintah | |
Kondisi
Tabel berikut mencantumkan nilai var_name dan Operation yang didukung untuk conditions.
var_name | Tipe | Operasi | Deskripsi |
acs:UserAgent | STRING |
| User-Agent klien yang mengirim permintaan. |
acs:Referer | STRING | HTTP Referer dari permintaan. | |
acs:SourceIp | Alamat IP |
| Alamat IP klien yang mengirim permintaan. |
acs:SecureTransport | BOOLEAN |
| Menunjukkan apakah permintaan dikirim melalui saluran aman, seperti HTTPS. |
acs:CurrentTime | DATEANDTIME |
| Waktu saat server web menerima permintaan. Waktu dalam format ISO 8601, seperti 2012-11-11T23:59:59Z. |
Contoh kontrol akses ACL
Asumsikan bahwa Bob@aliyun.com(ID akun: 5527xxxxxxxx5788) adalah pemilik proyek test_project_a. Allen(UID: 1652xxxxxxxxxx1538), Alice(UID: 2763xxxxxxxxxx1649), dan Tom(UID: 3874xxxxxxxxxx1850) adalah pengguna RAM yang termasuk dalam Bob@aliyun.com. Contoh berikut menunjukkan cara memberikan izin menggunakan Klien MaxCompute:
Contoh 1: Memberikan izin kepada pengguna
Buat tabel bernama sale_detail di proyek test_project_a dan berikan izin Describe (baca metadata) dan Select (baca data tabel) pada tabel tersebut kepada pengguna Allen. Perintah contohnya adalah sebagai berikut.
-- Bob memasuki proyek test_project_a. use test_project_a; -- Buat tabel partisi bernama sale_detail. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); -- Tambahkan pengguna Allen sebagai anggota proyek. add user RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; -- Berikan izin kepada Allen. grant Describe, Select on table sale_detail to USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; -- Lihat hasil otorisasi untuk Allen. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; -- Hasil otorisasi adalah sebagai berikut. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538] A projects/test_project_a/tables/sale_detail: Describe | SelectContoh 2: Memberikan izin kepada pengguna
Berdasarkan tabel sale_detail yang dibuat pada Contoh 1, berikan semua izin pada kolom shop_name dan customer_id kepada pengguna Alice. Perintah contohnya adalah sebagai berikut.
-- Bob memasuki proyek test_project_a. use test_project_a; -- Tambahkan pengguna Alice sebagai anggota proyek. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -- Berikan izin tingkat kolom kepada Alice. grant All on table sale_detail (shop_name, customer_id) to USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -- Lihat hasil otorisasi untuk Alice. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -- Hasil otorisasi adalah sebagai berikut. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649] A projects/test_project_a/tables/sale_detail/customer_id: All A projects/test_project_a/tables/sale_detail/shop_name: AllContoh 3: Mencabut izin dari pengguna
Berdasarkan Contoh 1 dan Contoh 2, cabut izin dari pengguna Allen dan Alice. Perintah contohnya adalah sebagai berikut.
-- Bob memasuki proyek test_project_a. use test_project_a; -- Cabut izin dari Allen. revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; -- Cabut izin dari Alice. revoke All on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -- Lihat hasil pencabutan izin dari Allen. Daftar izin tidak lagi berisi izin Describe atau Select. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; -- Lihat hasil pencabutan izin dari Alice. Daftar izin tidak lagi berisi izin All. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649;Contoh 4: Memberikan izin yang sama kepada beberapa pengguna berdasarkan peran
Berikan izin kepada Alice, Tom, dan akun Alibaba Cloud lainnya, Lily@aliyun.com(ID akun: 5638xxxxxxxx6899), untuk membuat instans, sumber daya, fungsi, dan tabel, serta melihat semua jenis objek di proyek test_project_a. Perintah contohnya adalah sebagai berikut.
-- Bob memasuki proyek test_project_a. use test_project_a; -- Tambahkan pengguna Alice, Tom, dan Lily@aliyun.com sebagai anggota proyek. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; add user RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; add user ALIYUN$5638xxxxxxxx6899; -- Buat peran Worker. create role Worker; -- Tetapkan peran Worker kepada pengguna. grant Worker TO RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; grant Worker TO RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; grant Worker TO ALIYUN$5638xxxxxxxx6899; -- Berikan izin CreateInstance, CreateResource, CreateFunction, CreateTable, dan List pada proyek test_project_a kepada peran Worker. grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; -- Lihat hasil otorisasi untuk Lily. show grants for ALIYUN$5638xxxxxxxx6899; -- Hasil otorisasi adalah sebagai berikut. Ini menunjukkan bahwa pengguna Lily memiliki izin tersebut. [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | ListContoh 5: Mencabut izin yang sama yang diberikan kepada beberapa pengguna berdasarkan peran
Dalam contoh ini, izin yang diberikan kepada pengguna RAM Alice dan Tom serta akun Alibaba Cloud Lily@aliyun.com pada Contoh 4 dicabut. Perintah contohnya adalah sebagai berikut:
-- Masuk ke proyek test_project_a menggunakan akun Alibaba Cloud Bob@aliyun.com. use test_project_a; -- Cabut peran Worker dari pengguna RAM Alice dan Tom serta akun Alibaba Cloud Lily@aliyun.com. revoke Worker from RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; revoke Worker from RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; revoke Worker from ALIYUN$5638xxxxxxxx6899; -- Kueri izin akun Alibaba Cloud Lily@aliyun.com. Akun Alibaba Cloud Lily@aliyun.com tidak lagi memiliki izin dari peran Worker. show grants for ALIYUN$5638xxxxxxxx6899;
Langkah selanjutnya
Setelah memahami cara kerja otorisasi berbasis ACL, Anda dapat melakukan operasi berikut sesuai kebutuhan: