Topik ini mencakup skenario otorisasi umum untuk MaxCompute, termasuk kontrol akses berbasis kebijakan dan berbasis paket. Setiap skenario menjelaskan konteks bisnis, solusi yang direkomendasikan, serta petunjuk langkah demi langkah baik untuk klien MaxCompute maupun Konsol MaxCompute.
Pilih mekanisme kontrol akses
Gunakan tabel berikut untuk mengidentifikasi mekanisme yang sesuai dengan skenario Anda sebelum memulai.
| Scenario | Recommended mechanism |
|---|---|
| Memberikan atau menolak aksi tertentu pada resource proyek kepada suatu role | Kontrol akses berbasis kebijakan |
| Menerapkan kondisi berbasis waktu atau IP pada izin | Kontrol akses berbasis kebijakan |
| Berbagi tabel tertentu antar proyek dalam Akun Alibaba Cloud yang sama | Kontrol akses berbasis paket |
| Berbagi tabel tertentu antar proyek yang dimiliki oleh Akun Alibaba Cloud berbeda | Kontrol akses berbasis paket |
| Membatasi akses tabel hanya ke baris tertentu per pengguna (isolasi tingkat baris) | Kontrol akses berbasis paket (melalui view) |
Kontrol akses berbasis kebijakan
Izinkan suatu role untuk melakukan aksi tertentu
Scenario: Sebuah kelompok anggota proyek perlu membuat tabel, mengunggah file resource, membuat fungsi, menjalankan task, dan melakukan kueri pada tabel yang namanya diawali dengan t_app_.
Solution: Buat role, sambungkan kebijakan yang memberikan aksi yang diperlukan, lalu tetapkan role tersebut kepada pengguna.
Gunakan klien MaxCompute
Buat role.
create role <role_name>;Buat file kebijakan bernama
policy_1.jsondan letakkan di direktoribinklien MaxCompute. File ini memberikan aksi tingkat proyek dan akses penuh ke tabel, fungsi, instans, serta resource yang sesuai dengan awalan yang ditentukan.{ "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" }Ganti
<project_name>dengan nama proyek MaxCompute Anda.Sambungkan kebijakan ke role dan tetapkan role tersebut kepada pengguna.
Akun Alibaba Cloud:
ALIYUN$<account>Pengguna RAM:
RAM$<account>:<ram_username>
-- Attach the policy to the role. put policy policy_1.json on role <role_name>; -- Assign the role to the user. grant <role_name> to <user_name>;Untuk
<user_name>, gunakan salah satu format berikut:
Gunakan Konsol MaxCompute
Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Workspace > Projects.
Temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, pilih Resource dari daftar drop-down Role Type, masukkan nama role di bidang Role Name, dan pilih Policy untuk Authorization Method. Masukkan dokumen kebijakan berikut:
{ "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" }Di tab Role Permissions, temukan role tersebut dan klik Manage Members di kolom Actions untuk menambahkan Akun Alibaba Cloud atau Pengguna RAM ke dalam role tersebut.
Tolak role dari menghapus tabel
Scenario: Tabel yang namanya diawali dengan tb_ bersifat kritis. Akun tertentu tidak boleh diizinkan menghapusnya.
Solution: Buat role dengan kebijakan Deny yang menargetkan aksi odps:Drop pada tabel yang dilindungi, lalu tetapkan role tersebut kepada pengguna terkait.
Gunakan klien MaxCompute
Buat role.
create role <role_name>;Buat file kebijakan bernama
policy_2.jsondi direktoribinklien MaxCompute.{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" } ] }Ganti
<project_name>dengan nama proyek MaxCompute Anda.Sambungkan kebijakan ke role dan tetapkan role tersebut kepada pengguna.
Akun Alibaba Cloud:
ALIYUN$<account>Pengguna RAM:
RAM$<account>:<ram_username>
-- Attach the policy to the role. put policy policy_2.json on role <role_name>; -- Assign the role to the user. grant <role_name> to <user_name>;Untuk
<user_name>, gunakan salah satu format berikut:
Gunakan Konsol MaxCompute
Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Workspace > Projects.
Temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, pilih Resource dari daftar drop-down Role Type, masukkan nama role di bidang Role Name, dan pilih Policy untuk Authorization Method. Masukkan dokumen kebijakan berikut:
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" } ] }Di tab Role Permissions, temukan role tersebut dan klik Manage Members di kolom Actions untuk menambahkan Akun Alibaba Cloud atau Pengguna RAM ke dalam role tersebut.
Berikan izin dengan kondisi waktu dan IP
Scenario: Akun a****@aliyunid.com memerlukan izin CreateInstance, CreateTable, dan List pada proyek test_project, tetapi hanya dari Blok CIDR 10.32.180.0/23 dan hanya hingga 11 November 2018 pukul 23:59:59 UTC. Akun tersebut juga harus diblokir dari menghapus tabel apa pun di proyek tersebut.
Solution: Buat role dengan kebijakan yang menggabungkan pernyataan Allow (dengan kondisi waktu dan IP) dan pernyataan Deny untuk aksi Drop.
Gunakan klien MaxCompute
Buat role bernama
policy_3.create role policy_3;Buat file kebijakan bernama
policy_3.jsondi direktoribinklien MaxCompute.{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": ["odps:CreateTable", "odps:CreateInstance", "odps:List"], "Resource": "acs:odps:*:projects/<project_name>", "Condition": { "DateLessThan": { "acs:CurrentTime": "2018-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp": "10.32.180.0/23" } } }, { "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/*" } ] }Ganti
<project_name>dengan nama proyek MaxCompute Anda.Sambungkan kebijakan ke role dan tetapkan role tersebut kepada pengguna.
-- Attach the policy to the role. put policy policy_3.json on role policy_3; -- Assign the role to the user. grant policy_3 to ALIYUN$a****@aliyunid.com;
Gunakan Konsol MaxCompute
Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.
Di panel navigasi kiri, pilih Workspace > Projects.
Temukan proyek target dan klik Manage di kolom Actions.
Di tab Role Permissions, klik Create Project-level Role.
Di kotak dialog Create Role, pilih Resource dari daftar drop-down Role Type, masukkan nama role di bidang Role Name, dan pilih Policy untuk Authorization Method. Masukkan dokumen kebijakan berikut:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": ["odps:CreateTable", "odps:CreateInstance", "odps:List"], "Resource": "acs:odps:*:projects/<project_name>", "Condition": { "DateLessThan": { "acs:CurrentTime": "2018-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp": "10.32.180.0/23" } } }, { "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/*" } ] }Di tab Role Permissions, temukan role tersebut dan klik Manage Members di kolom Actions untuk menambahkan Akun Alibaba Cloud atau Pengguna RAM ke dalam role tersebut.
Kontrol akses berbasis paket
Berbagi tabel antar proyek dalam akun yang sama
Scenario: Analis bisnis perlu melakukan kueri pada tabel produksi tertentu tetapi tidak boleh mengakses kode task produksi. Data produksi tersebar di beberapa proyek.
Solution: Buat paket di setiap proyek produksi, tambahkan tabel yang diperlukan ke dalam paket, instal paket tersebut di proyek analisis khusus, dan berikan akses baca pada paket tersebut kepada para analis. Pendekatan ini menghindari penambahan analis ke setiap proyek produksi dan membatasi akses mereka hanya pada tabel yang dibagikan.
Dalam contoh ini:
Proyek produksi:
Project_aProyek analisis:
Project_analyzePaket:
Package_testTabel yang dibagikan:
table_aAkun analis:
A*****@aliyunid.com
Di proyek produksi, buat paket dan tambahkan tabel yang akan dibagikan.
USE Project_a; CREATE PACKAGE Package_test; ADD table table_a TO PACKAGE Package_test;Izinkan proyek analisis untuk menginstal paket tersebut.
ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test;Di proyek analisis, instal paket tersebut.
USE Project_analyze; INSTALL PACKAGE Project_a.Package_test;Berikan akses baca pada paket tersebut kepada analis.
GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com;Analis kini dapat melakukan kueri pada tabel yang dibagikan menggunakan sintaks berikut.
select * from Project_a.table_a;
Berbagi tabel antar Akun Alibaba Cloud
Scenario: Dua departemen menggunakan Akun Alibaba Cloud terpisah untuk mengelola lingkungan MaxCompute mereka karena alokasi biaya internal. Mereka perlu bertukar data, tetapi Pengguna RAM dari satu akun tidak dapat ditambahkan ke proyek yang dimiliki oleh akun lain.
Solution: Gunakan paket di akun penyedia untuk berbagi tabel tertentu dengan akun konsumen. Pengguna RAM dari akun konsumen diberikan akses tingkat tabel melalui paket tersebut, tanpa harus ditambahkan langsung ke proyek penyedia.
Setelah otorisasi lintas akun, data dapat dibaca lintas akun. Namun, jika Anda menggunakan MaxCompute melalui Konsol DataWorks, dependensi penjadwalan antar ruang kerja DataWorks dari Akun Alibaba Cloud berbeda tidak didukung.
Dalam contoh ini:
Akun A memiliki
Project_a; Akun B memilikiProject_bPaket:
a_to_b_pkgb_user1(Pengguna RAM Akun B) memerlukan akses baca ket1dant2b_user2(Pengguna RAM Akun B) memerlukan akses baca ket3
Menggunakan Akun A, buat paket di
Project_adan tambahkan tabel-tabel tersebut.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
Project_buntuk menginstal paket tersebut.ALLOW Project_b TO INSTALL PACKAGE a_to_b_pkg;Menggunakan Akun B, instal paket tersebut di
Project_b.INSTALL PACKAGE Project_a.a_to_b_pkg;Tambahkan Pengguna RAM Akun B ke
Project_bdan berikan akses ke tabel tertentu dalam paket tersebut.add user ram$B:b_user1; add user ram$B:b_user2; -- Grant b_user1 access to t1 and t2. 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"); 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"); -- Grant b_user2 access to t3. 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");
Terapkan kontrol akses tingkat baris
Scenario: Tabel table_order di ProjectA berisi pesanan dari semua merchant. Setiap merchant hanya boleh melakukan kueri pada pesanan miliknya sendiri.
Cara kerjanya: MaxCompute tidak mendukung kontrol akses tingkat baris secara native. Untuk mencapai isolasi baris per merchant, buat view terpisah untuk setiap merchant yang memfilter table_order berdasarkan ID merchant (sellerid). Berikan setiap merchant akses ke view-nya melalui paket. Karena merchant mengakses view dan bukan tabel dasar secara langsung, mereka hanya dapat melihat baris yang sesuai dengan sellerid mereka sendiri.
Di
ProjectA, buat view terfilter untuk setiap merchant.CREATE VIEW <viewname> AS SELECT * FROM table_order WHERE sellerid='<merchant_id>';Ganti
<viewname>dengan nama view dan<merchant_id>dengan ID merchant tersebut.Buat paket, tambahkan view ke dalamnya, dan izinkan proyek merchant untuk menginstalnya.
<packagename>: nama paket<Projectname_seller>: proyek MaxCompute yang dimiliki oleh merchant
create package <packagename>; add table <viewname> to package <packagename>; allow project <Projectname_seller> to install package <packagename>;Di proyek merchant, instal paket tersebut dan berikan akses baca kepada merchant.
USE <Projectname_seller>; install package <ProjectA>.<packagename>; grant read on package <ProjectA>.<packagename> to user <username>;Merchant kemudian dapat melakukan kueri pada datanya dengan:
select * from <ProjectA>.<viewname>;Ganti
<username>dengan akun yang digunakan merchant untuk melakukan kueri pada view tersebut.