Jika Anda perlu memberikan izin kepada beberapa pengguna untuk mengakses objek MaxCompute seperti proyek dan tabel, Anda dapat menggunakan Access Control Lists (ACL) untuk memberikan izin tertentu kepada pengguna atau role. Untuk mengelola izin secara efisien bagi beberapa pengguna, berikan izin tersebut kepada suatu role lalu tetapkan role tersebut kepada pengguna. Topik ini menjelaskan perintah otorisasi ACL yang didukung oleh MaxCompute dan menyertakan contoh penggunaannya.
Informasi latar belakang
Kontrol akses berbasis ACL menggunakan model otorisasi allow-list. Anda secara eksplisit memberikan izin kepada pengguna atau role untuk melakukan tindakan tertentu pada objek tertentu, sehingga otorisasi menjadi sederhana dan tepat sasaran.
Setelah Anda membuat proyek MaxCompute, kontrol akses berbasis ACL diaktifkan secara default. Pemilik proyek dapat menjalankan perintah set CheckPermissionUsingACL=true|false; dalam proyek untuk mengaktifkan atau menonaktifkan fitur ini.
Kontrol akses berbasis ACL berlaku untuk skenario berikut.
|
Scenario |
Description |
Grantor |
Entry point |
|
Grant permissions to a user |
Berikan satu atau beberapa action pada objek tertentu langsung kepada satu pengguna. |
Lihat kolom Supported grantors dalam daftar izin. |
|
|
Grant permissions to users based on roles |
Berikan satu atau beberapa action pada objek tertentu langsung kepada suatu role, lalu tetapkan role tersebut kepada beberapa pengguna. Pengguna mewarisi izin dari role tersebut. Untuk informasi lebih lanjut tentang cara membuat role dan menetapkan role kepada pengguna, lihat Role planning dan Attach a role to a user. Catatan
Role dirancang untuk manajemen pengguna yang efisien. Hindari memberikan izin yang sama pada objek yang sama kepada beberapa role. |
Prasyarat
Sebelum menggunakan kontrol akses berbasis ACL, pastikan Anda memiliki informasi berikut:
-
Nama akun atau nama role penerima izin. Pengguna atau role tersebut harus telah ditambahkan ke proyek MaxCompute. Format akun adalah sebagai berikut: Akun Alibaba Cloud dalam format ALIYUN$<account_id>, akun pengguna RAM dalam format RAM$<account_id>:<RAM user UID>, dan role RAM dalam format
RAM$<account_id>:role/<RAM role name>.Anda dapat menjalankan perintah
list users;ataulist roles;di MaxCompute client untuk mengambil nama akun atau role.Untuk menambahkan pengguna atau role, lihat User planning and management atau Role planning.
-
Tipe objek, nama objek, dan action yang akan diberikan.
Untuk informasi lebih lanjut tentang tipe objek dan action, lihat MaxCompute permissions.
Batasan
Batasan berikut berlaku untuk kontrol akses berbasis ACL:
-
Anda hanya dapat memberikan izin kepada pengguna atau role yang sudah ada pada objek yang sudah ada. Hal ini mencegah risiko keamanan akibat penghapusan dan pembuatan ulang objek dengan nama yang sama.
-
Kontrol akses berbasis ACL tidak mendukung otorisasi dengan klausa
[with grant option]. Misalnya, jika pengguna A memberikan akses ke objek kepada pengguna B, pengguna B tidak dapat meneruskan izin tersebut kepada pengguna C. -
Otorisasi ACL menggunakan model allow-list dan tidak mendukung model deny-list.
Catatan penggunaan
Perhatikan hal berikut saat menggunakan kontrol akses berbasis ACL:
-
Jika Anda menghapus suatu objek, MaxCompute secara otomatis mencabut semua izin ACL yang terkait dengannya.
-
Saat pengguna dihapus, izin mereka tetap dipertahankan. Jika pengguna tersebut ditambahkan kembali ke proyek di kemudian hari, izin sebelumnya akan dipulihkan secara otomatis. Untuk menghapus permanen izin pengguna tersebut, lihat Clear residual permissions of a removed user.
Sintaksis
Perintah kontrol akses berbasis ACL menggunakan sintaksis berikut:
-
Grant ACL permissions
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; -
Revoke ACL permissions
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>; -
Column-level access control
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 |
Required |
Description |
|
|
actions |
Yes |
Action yang akan diberikan. Anda dapat menentukan satu atau beberapa action dalam satu pernyataan 'grant'. Pisahkan beberapa action dengan koma (,). Untuk daftar action yang valid, lihat MaxCompute permissions. |
|
|
object_type |
Yes |
Tipe objek tempat izin diberikan. Anda hanya dapat menentukan satu tipe objek dalam satu pernyataan. Untuk daftar tipe objek yang valid, lihat MaxCompute permissions. |
|
|
object_name |
Yes |
Nama objek. Anda dapat menemukan nama sebagai 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. |
|
|
column_list |
No |
Parameter ini hanya diperlukan ketika object_type adalah table dan Anda ingin menerapkan column-level access control. Anda dapat menentukan satu atau beberapa kolom. Pisahkan beberapa nama kolom dengan koma (,). Catatan
Parameter ini mengontrol izin Describe, Select, Alter, Update, Drop, ShowHistory, dan ALL pada kolom yang ditentukan. Jika tingkat sensitivitas dikonfigurasi untuk suatu kolom, Anda dapat menggunakan Label-based access control untuk mengontrol akses ke data sensitif berdasarkan label sensitivitas. |
|
|
privilegeproperties |
conditions |
No |
Mengontrol izin berdasarkan atribut seperti sumber permintaan dan metode akses. Formatnya adalah |
|
days |
No |
Jumlah hari sebelum izin kedaluwarsa. Jika Anda tidak menentukan parameter ini, izin tidak akan kedaluwarsa. Jika Anda menentukan parameter ini, MaxCompute secara otomatis menghapus catatan izin setelah kedaluwarsa. |
|
|
subject_type |
Yes |
Tipe penerima izin. Nilai yang valid:
|
|
|
subject_name |
Yes |
Akun pengguna atau nama role penerima izin. Anda hanya dapat menentukan satu pengguna atau role per pemberian izin. Format:
Anda dapat menjalankan perintah |
|
Conditions
Tabel berikut mencantumkan nilai var_name dan Operation yang didukung untuk conditions.
|
var_name |
Type |
Operation |
Description |
|
acs:UserAgent |
STRING |
|
User-Agent dari klien yang mengirim permintaan. |
|
acs:Referer |
STRING |
HTTP Referer dari permintaan. |
|
|
acs:SourceIp |
IP address |
|
Alamat IP dari 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, dalam format ISO 8601, seperti 2012-11-11T23:59:59Z. |
Contoh
Asumsikan bahwa Bob@aliyun.com (ID akun: 5527xxxxxxxx5788) adalah pemilik proyek test_project_a, dan Allen (UID: 1652xxxxxxxxxx1538), Alice (UID: 2763xxxxxxxxxx1649), serta Tom (UID: 3874xxxxxxxxxx1850) adalah pengguna RAM di bawah Bob@aliyun.com. Contoh berikut menunjukkan operasi otorisasi menggunakan MaxCompute client.
-
Contoh 1: Memberikan izin kepada pengguna
Buat tabel sale_detail di proyek test_project_a, lalu berikan izin Describe (baca metadata) dan Select (baca data) pada tabel tersebut kepada pengguna Allen. Berikut adalah contoh perintahnya.
-- Bob beralih ke 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 izin yang diberikan kepada 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 | Select -
Contoh 2: Memberikan izin tingkat kolom kepada pengguna
Menggunakan tabel sale_detail yang dibuat pada Contoh 1, berikan semua izin kepada pengguna Alice pada kolom shop_name dan customer_id di tabel sale_detail. Berikut adalah contoh perintahnya.
-- Bob beralih ke 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 izin yang diberikan kepada 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: All -
Contoh 3: Mencabut izin dari pengguna
Berdasarkan Contoh 1 dan Contoh 2, cabut izin dari pengguna Allen dan Alice. Berikut adalah contoh perintahnya.
-- Bob beralih ke 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; --Periksa izin Allen setelah pencabutan. Izin Describe dan Select dihapus dari daftar izin. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Periksa izin Alice setelah pencabutan. Izin All dihapus dari daftar izin. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -
Contoh 4: Memberikan izin yang sama kepada beberapa pengguna menggunakan role
Berikan izin kepada Alice, Tom, dan akun Alibaba Cloud lain Lily@aliyun.com (ID akun: 5638xxxxxxxx6899) untuk membuat instance, resource, fungsi, dan tabel, serta melihat semua tipe objek di proyek test_project_a. Berikut adalah contoh perintahnya.
-- Bob beralih ke 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 role Worker. create role Worker; --Tetapkan role Worker kepada pengguna. grant Worker TO RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; grant Worker TO RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; grant Worker TO ALIYUN$5638xxxxxxxx6899; --Berikan role Worker izin untuk membuat instance, resource, fungsi, dan tabel, serta melihat semua tipe objek di proyek test_project_a. grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; --Lihat izin pengguna Lily. show grants for ALIYUN$5638xxxxxxxx6899; --Hasil otorisasi berikut menunjukkan bahwa pengguna Lily memiliki izin yang ditentukan. [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List -
Contoh 5: Mencabut izin berbasis role yang sama dari beberapa pengguna
Berdasarkan Contoh 4, cabut izin dari pengguna Alice, Tom, dan Lily@aliyun.com. Berikut adalah contoh perintahnya.
-- Bob beralih ke proyek test_project_a. use test_project_a; --Cabut role Worker dari pengguna Alice, Tom, dan Lily@aliyun.com. revoke Worker from RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; revoke Worker from RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; revoke Worker from ALIYUN$5638xxxxxxxx6899; --Periksa izin Lily setelah pencabutan. Daftar izin tidak lagi mencakup role Worker. show grants for ALIYUN$5638xxxxxxxx6899;
Langkah selanjutnya
Setelah memahami cara kerja otorisasi ACL, Anda dapat mengelola izin sesuai kebutuhan bisnis: