Untuk melindungi data dalam proyek MaxCompute, pemilik proyek atau pengguna yang berwenang harus mengelola akses anggota sesuai dengan prinsip hak istimewa minimal. Topik ini menjelaskan kasus penggunaan umum untuk pengelolaan izin di MaxCompute.
Ikhtisar prioritas evaluasi izin
Deny memiliki prioritas lebih tinggi daripada Allow.
Project Owner dan Super_Administrator tidak tunduk pada batasan apa pun.
Otorisasi ACL dan otorisasi Policy dievaluasi secara independen. Condition hanya membatasi Policy tempat ia berada.
Kasus penggunaan kontrol akses berbasis Policy
Berikan izin role melalui policy
Kasus penggunaan:
Berikan sekelompok anggota proyek izin untuk membuat tabel, mengunggah resource, membuat fungsi, dan menjalankan task. Akses dibatasi menjadi read-only untuk tabel yang namanya diawali dengan awalan
t_app_.Prosedur:
Gunakan client MaxCompute
Buat peran baru.
create role <role_name>;<role_name> adalah nama role tersebut.
Di direktori
binclient MaxCompute, buat file bernamapolicy_1.jsondan tempel konten berikut ke dalamnya:{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"}<project_name> adalah nama proyek MaxCompute.
Terapkan policy dan berikan role tersebut.
-- Lampirkan policy ke role baru. put policy policy_1.json on role <role_name>; -- Berikan role kepada pengguna target. grant <role_name> to <user_name>;<user_name> adalah akun pengguna target. Untuk Akun Alibaba Cloud, gunakan format
ALIYUN$<account_email>. Untuk RAM user, gunakan formatRAM$<parent_account_email>:<ram_user_name>.
Gunakan console
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Projects, klik Manage di kolom Actions untuk proyek target.
Di halaman Project Settings, klik tab Role Permissions.
Klik Create Project-level Role untuk membuat role tingkat proyek dengan izin MaxCompute yang diperlukan.
Di kotak dialog Create Role, buat role bertipe Resource, masukkan Role Name, dan tempel konten policy.
{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"}Pilih role tingkat proyek target dan klik Manage Members di kolom Actions. Pilih Akun Alibaba Cloud atau RAM user yang ingin Anda otorisasi, lalu klik OK. Jika Anda tidak menemukan akun tersebut saat pertama kali mencoba memberikan izin, Anda dapat menambahkannya di bagian Add Member Manually di bawah.
Tolak izin role melalui policy
Kasus penggunaan: Beberapa tabel sangat penting bagi bisnis dan harus dilindungi dari penghapusan tidak disengaja. Tujuannya adalah mencegah pengguna tertentu menghapus tabel apa pun yang namanya diawali dengan awalan
tb_.Prosedur:
Gunakan client MaxCompute
Buat role baru.
create role <role_name>;<role_name> adalah nama role tersebut.
Di direktori
binclient MaxCompute, buat file bernamapolicy_2.jsondan tempel konten berikut ke dalamnya:{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] }<project_name> adalah nama proyek MaxCompute.
Terapkan policy dan berikan role tersebut.
-- Lampirkan policy ke role baru. put policy policy_2.json on role <role_name>; -- Berikan role kepada pengguna target. grant <role_name> to <user_name>;<user_name> adalah akun pengguna target. Untuk Akun Alibaba Cloud, gunakan format
ALIYUN$<account_email>. Untuk RAM user, gunakan formatRAM$<parent_account_email>:<ram_user_name>.
Gunakan console
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Projects, klik Manage di kolom Actions untuk proyek target.
Di halaman Project Settings, klik tab Role Permissions.
Di kotak dialog Create Role, buat role bertipe Resource, masukkan Role Name, dan tempel konten policy.
Masukkan konten policy berikut:
{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] }Pilih role tingkat proyek target dan klik Manage Members di kolom Actions. Pilih Akun Alibaba Cloud atau RAM user yang ingin Anda otorisasi, lalu klik OK. Jika Anda tidak menemukan akun tersebut saat pertama kali mencoba memberikan izin, Anda dapat menambahkannya di bagian Add Member Manually di bawah.
Berikan izin kondisional melalui policy
Condition dalam Policy hanya membatasi izin yang diberikan oleh Policy tersebut. Condition tidak memengaruhi izin yang diperoleh melalui ACL (perintah GRANT) atau pewarisan role.
Jika pengguna juga memiliki sumber izin tanpa kondisi lain (seperti role admin atau pemberian izin langsung melalui ACL), pembatasan IP dalam Condition tidak berlaku.
Contoh 1:
Kasus penggunaan:
Berikan satu set izin kepada pengguna (
a****@aliyunid.com) dengan kondisi tertentu. Pengguna dapat melakukan aksiCreateInstance,CreateTable, danListdi proyek test_project, hanya jika permintaan diajukan sebelum23:59:59 pada 11 November 2026dan berasal dari rentang alamat IP10.32.180.0/23. Pengguna juga harus ditolak izinnya untuk menghapus tabel apa pun di proyek tersebut.Prosedur:
Gunakan client MaxCompute
Buat role baru.
create role policy_3;Di direktori
binclient MaxCompute, buat file bernamapolicy_3.jsondan tempel konten berikut ke dalamnya:{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2026-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] }<project_name> adalah nama proyek MaxCompute.
Terapkan policy dan berikan role tersebut.
-- Lampirkan policy ke role baru. put policy policy_3.json on role policy_3; -- Berikan role kepada pengguna target. grant policy_3 to ALIYUN$a****@aliyunid.com;
Gunakan console
Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.
Di panel navigasi sebelah kiri, pilih .
Di halaman Projects, klik Manage di kolom Actions untuk proyek target.
Di halaman Project Settings, klik tab Role Permissions.
Di kotak dialog Create Role, buat role bertipe Resource, masukkan Role Name, dan tempel konten policy.
Masukkan konten policy berikut:
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2026-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] }Pilih role tingkat proyek target dan klik Manage Members di kolom Actions. Pilih Akun Alibaba Cloud atau RAM user yang ingin Anda otorisasi, lalu klik OK. Jika Anda tidak menemukan akun tersebut saat pertama kali mencoba memberikan izin, Anda dapat menambahkannya di bagian Add Member Manually di bawah.
Contoh 2: Terapkan kontrol akses IP melalui Deny Policy
Kasus penggunaan:
Batasi pengguna tertentu agar hanya dapat mengakses proyek dari rentang IP yang ditentukan, terlepas dari cara mereka memperoleh izin.
Pendekatan inti:
Buat kebijakan Deny yang menolak semua permintaan dari alamat IP di luar rentang yang ditentukan, karena Deny memiliki prioritas lebih tinggi daripada
Meskipun pengguna memiliki izin melalui ACL atau peran lain, akses dari alamat IP yang tidak ditentukan akan ditolak.
Konten policy:
{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:*", "Resource": "acs:odps:*:projects/<project_name>/*", "Condition": { "NotIpAddress": { "acs:SourceIp": "10.32.180.0/23" } } }] }
Kasus penggunaan otorisasi paket
Berbagi resource lintas proyek melalui paket
Kasus penggunaan:
Analis bisnis perlu melihat data di tabel produksi tanpa melihat kode task produksi. Analis ini memerlukan akses ke subset spesifik tabel dari beberapa proyek produksi.
Solusi:
Karena analis tidak boleh melihat task produksi, buat proyek terpisah untuk analisis. Di setiap proyek produksi, buat paket, tambahkan tabel yang akan dibagikan ke dalam paket, lalu izinkan proyek analisis untuk menginstalnya. Setelah paket diinstal di proyek analisis, berikan izin kepada analis. Pendekatan ini mengurangi beban manajemen karena tidak perlu menambahkan analis ke setiap proyek produksi, dan memastikan bahwa analis hanya dapat melihat tabel produksi yang dibagikan dari dalam proyek analisis.
Contoh ini menunjukkan alur kerja: sebuah
packagebernamaPackage_testdibuat di proyek produksi (Project_a). Sebuahtableproduksi (table_a) ditambahkan kepackageini.packagetersebut kemudian diinstal di proyek analisis (Project_analyze), dan pengguna (A*****@aliyunid.com) diberikan izin untuk melakukan kueri terhadap tabel melalui paket.Prosedur:
Di proyek produksi, buat paket.
USE Project_a; CREATE PACKAGE Package_test;Di proyek produksi, tambahkan resource yang akan dibagikan ke dalam paket.
ADD table table_a TO PACKAGE Package_test;Di proyek produksi, izinkan proyek analisis untuk menginstal paket.
ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test;Di proyek analisis, instal paket.
USE Project_analyze; INSTALL PACKAGE Project_a.Package_test;Berikan izin baca kepada analis pada paket tersebut.
GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com;Analis kini dapat melakukan kueri data dari tabel tersebut.
select * from Project_a.table_a;
Berbagi resource lintas akun melalui paket
Kasus penggunaan
Dalam satu perusahaan, departemen yang berbeda mungkin menggunakan Akun Alibaba Cloud terpisah untuk mengelola resource MaxCompute mereka karena alasan penagihan atau bisnis. Saat departemen-departemen ini perlu berbagi data, mereka memerlukan mekanisme kontrol akses detail halus yang aman. Hal ini memastikan bahwa pengguna di satu akun hanya dapat membaca tabel tertentu dari akun lain, sesuai dengan prinsip hak istimewa minimal.
CatatanRAM user dari satu Akun Alibaba Cloud tidak dapat ditambahkan ke proyek MaxCompute yang dimiliki oleh akun lain. Misalnya, Akun A tidak dapat menambahkan RAM user dari Akun B ke proyek yang dimilikinya.
Untuk memberikan izin baca saja pada tabel, resource, atau fungsi, gunakan paket untuk berbagi resource antar proyek yang dimiliki oleh Akun Alibaba Cloud berbeda.
Solusi
Asumsikan terdapat dua Akun Alibaba Cloud, yaitu Akun A dan Akun B. Akun A memiliki proyek bernama
Project_a, sedangkan Akun B memiliki proyek bernamaProject_b. RAM user dari Akun B,b_user1, diberikan izin baca pada tabelt1dant2diProject_a. RAM user lain dari Akun B,b_user2, diberikan izin baca pada tabelt3diProject_a.PentingMeskipun data dapat dibagikan antar Akun Alibaba Cloud yang berbeda menggunakan otorisasi, task di ruang kerja DataWorks yang dimiliki oleh Akun Alibaba Cloud berbeda tidak dapat saling berkomunikasi. Artinya, tidak mungkin mengonfigurasi dependensi penjadwalan antar task tersebut.
Prosedur:
Di
Project_a, gunakan Akun Alibaba Cloud A untuk membuat paket bernamaa_to_b_pkgdan tambahkan tabelt1,t2, dant3ke dalam paket.USE Project_a; CREATE PACKAGE a_to_b_pkg; ADD table t1 TO PACKAGE a_to_b_pkg; ADD table t2 TO PACKAGE a_to_b_pkg; ADD table t3 TO PACKAGE a_to_b_pkg;Izinkan proyek Project_b (milik Akun B) untuk menginstal paket
a_to_b_pkg.ALLOW PROJECT Project_b TO INSTALL PACKAGE a_to_b_pkg;Di proyek Project_b, gunakan Akun Alibaba Cloud B untuk menginstal paket
a_to_b_pkg.INSTALL PACKAGE Project_a.a_to_b_pkg;Berikan izin kepada RAM user dari Akun B pada tabel dalam paket tersebut.
add user ram$B:b_user1; add user ram$B:b_user2; GRANT Describe , Select ON TABLE t1 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Berikan izin baca pada tabel t1 kepada b_user1 GRANT Describe , Select ON TABLE t2 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Berikan izin baca pada tabel t2 kepada b_user1 GRANT Describe , Select ON TABLE t3 TO USER ram$B:b_user2 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");--Berikan izin baca pada tabel t3 kepada b_user2
Kontrol akses tingkat baris melalui paket
Kasus penggunaan:
Sebuah tabel bernama
table_orderdi proyekProjectAberisi informasi pesanan untuk semua merchant. Tabel ini harus dibagikan dengan para merchant, tetapi setiap merchant hanya boleh melihat pesanan yang sesuai dengan tokonya sendiri.Solusi:
Tabel
table_orderberisi kolom ID merchant yang dapat digunakan untuk memfilter data. Meskipun MaxCompute tidak mendukung secara langsung kontrol akses tingkat baris, implementasikan hal ini dengan membuat view terpisah untuk setiap merchant berdasarkan tabeltable_order. Lalu berikan izin kepada setiap merchant pada view yang sesuai menggunakan paket. Metode ini secara efektif mencapai kontrol akses tingkat baris.Prosedur:
Di ProjectA, buat view khusus untuk setiap merchant.
CREATE VIEW <viewname> as select * from table_order WHERE sellerid='xxxx';<viewname> adalah nama view yang akan dibuat.
Di ProjectA, buat paket dan bagikan view tersebut dengan merchant.
create package <packagename>; add table <viewname> to package <packagename>; allow project <Projectname_seller> to install package <packagename>;<packagename> adalah nama paket. <Projectname_seller> adalah nama proyek MaxCompute milik merchant.
Merchant menginstal paket di proyeknya dan melakukan kueri terhadap view tersebut.
USE <Projectname_seller>; install package <ProjectA>.<packagename>; grant read on package <ProjectA>.<packagename> to user <username>; select * from <ProjectA>.<viewname>;<username> adalah pengguna di proyek merchant yang perlu melakukan kueri terhadap view tersebut.