Topik ini menjelaskan cara membatasi akses ke resource, seperti tabel dan user-defined functions (UDF), hanya untuk pengguna tertentu. Metode ini sering digunakan untuk keamanan dan kontrol data, terutama ketika UDF melibatkan enkripsi atau dekripsi data.
Prasyarat
Instal klien MaxCompute. Untuk informasi selengkapnya, lihat Instal dan konfigurasikan klien MaxCompute.
Informasi latar belakang
Metode standar untuk mengonfigurasi izin akses pengguna mencakup hal-hal berikut:
-
Menggunakan packages untuk kontrol izin detail halus
Package digunakan untuk berbagi data dan memberikan otorisasi akses ke resource di berbagai proyek. Namun, memberikan peran developer kepada pengguna melalui package memberikan izin penuh kepada pengguna tersebut, yang menimbulkan risiko keamanan. Untuk informasi selengkapnya, lihat Akses resource di berbagai proyek menggunakan packages.
-
Output berikut menunjukkan izin dari peran developer DataWorks:
odps@ xxx desc role role_project_dev; Authorization Type: Policy A projects/sz_mc: * A projects/sz_mc/instances/*: * A projects/sz_mc/jobs/*: * A projects/sz_mc/offlinemodels/*: * A projects/sz_mc/packages/*: * A projects/sz_mc/registration/functions/*: * A projects/sz_mc/resources/*: * A projects/sz_mc/tables/*: * A projects/sz_mc/volumes/*:Peran developer secara default memiliki izin penuh atas packages, functions, resources, dan tables di ruang kerja. Pendekatan ini memberikan izin yang terlalu luas.
-
Output berikut menunjukkan izin yang diberikan kepada RAM user setelah pengguna tersebut diberi peran developer di DataWorks:
odps@ xxx> show grants for RAM$yxxx.pt@aliyun-test.com:ramtest; [roles] role_project_dev Authorization Type: Policy [role/role_project_dev] A projects/sz_mc: * A projects/sz_mc/instances/*: * A projects/sz_mc/jobs/*: * A projects/sz_mc/offlinemodels/*: * A projects/sz_mc/packages/*: * A projects/sz_mc/registration/functions/*: * A projects/sz_mc/resources/*: * A projects/sz_mc/tables/*: * A projects/sz_mc/volumes/*: *
Oleh karena itu, baik otorisasi berbasis package maupun peran default di DataWorks tidak dapat memenuhi kebutuhan agar pengguna tertentu dapat mengakses UDF tertentu. Misalnya, jika Anda memberikan peran developer kepada RAM user
RAM$xxxxx.pt@aliyun-test.com:ramtest, RAM user tersebut secara default memiliki semua izin atas semua objek di ruang kerja saat ini. Untuk informasi selengkapnya, lihat User Authorization. -
-
Membuat peran kustom di DataWorks untuk mengontrol izin
Pada halaman MaxCompute Advanced Settings di konfigurasi ruang kerja DataWorks Anda, Anda dapat mengelola izin untuk peran pengguna kustom. Namun, pada halaman ini, Anda hanya dapat memberikan izin pada tabel atau proyek tertentu, bukan pada resource atau UDF individual.
CatatanUntuk informasi selengkapnya tentang properti MaxCompute di ruang kerja DataWorks, lihat Configure MaxCompute engine permissions.
-
Menggabungkan role policy dan project policy untuk memberikan akses pengguna tertentu ke UDF tertentu
Kebijakan memungkinkan kontrol detail halus atas izin pengguna pada resource tertentu.
CatatanUntuk alasan keamanan, uji kebijakan di proyek pengujian sebelum menerapkannya di lingkungan produksi.
Oleh karena itu, Anda dapat menggunakan kebijakan untuk memberikan akses pengguna tertentu ke UDF tertentu dengan mengikuti pola berikut:
-
Jika Anda ingin mencegah pengguna lain mengakses resource tertentu di ruang kerja, Anda dapat terlebih dahulu memberikan izin data developer di DataWorks kepada mereka, lalu menggunakan role policy di klien MaxCompute untuk secara eksplisit menolak akses tersebut.
-
Jika Anda perlu memberikan akses pengguna tertentu ke resource tertentu, pertama-tama berikan izin data developer di DataWorks kepada pengguna tersebut, lalu gunakan project policy di klien MaxCompute untuk secara eksplisit mengizinkan akses tersebut.
Langkah-langkah
-
Buat peran yang secara default menolak akses ke UDF.
-
Di klien MaxCompute, jalankan perintah berikut untuk membuat peran bernama denyudfrole.
create role denyudfrole; -
Buat file kebijakan dengan konten berikut.
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": ["odps:Read","odps:List"], "Resource": "acs:odps:*:projects/sz_mc/resources/getaddr.jar" }, { "Effect": "Deny", "Action": ["odps:Read","odps:List"], "Resource": "acs:odps:*:projects/sz_mc/registration/functions/getregion" } ] } -
Tetapkan role policy.
Jalankan perintah berikut untuk menerapkan kebijakan dari file kebijakan Anda ke peran tersebut.
put policy /Users/yangyi/Desktop/role_policy.json on role denyudfrole; -
Jalankan perintah berikut untuk melihat role policy.
get policy on role denyudfrole;Hasil berikut dikembalikan:
odps@ get policy on role denyudfrole; { "Statement": [{ "Action": ["odps:Read", "odps:List"], "Effect": "Deny", "Resource": ["acs:odps:*:projects/sz_mc/resources/getaddr.jar"]}, { "Action": ["odps:Read", "odps:List"], "Effect": "Deny", "Resource": ["acs:odps:*:projects/sz_mc/registration/functions/getregion"]}], "Version": "1"} -
Jalankan perintah berikut untuk menambahkan RAM user ke peran denyudfrole.
grant denyudfrole to RAM$xxxx.pt@aliyun-test.com:ramtest;
-
-
Verifikasi bahwa peran penolakan UDF telah dibuat.
-
Masuk ke klien dan masukkan
whoami;untuk mengonfirmasi peran.odps@ xxx>whoami; Name: RAM$xxx pt@aliyun-test.com:ramtest End_Point: http://service.odps.aliyun.com/api Tunnel_End_Point: http://dt.cn-shanghai.maxcompute.aliyun.com Project: xxx -
Jalankan
show grants;untuk melihat izin pengguna saat ini.odps@xxx >show grants; [roles] role_project_dev, denyudfrole Authorization Type: Policy [role/denyudfrole] D projects/xxx/registration/functions/getregion: List | Read D projects/xxx/resources/getaddr.jar: List | Read [role/role_project_dev] A projects/xxx: * A projects/xxx/instances/*: * A projects/xxx/jobs/*: * A projects/xxx/offlinemodels/*: * A projects/xxx/packages/*: * A projects/xxx/registration/functions/*: * A projects/xxx/resources/*: * A projects/xxx/tables/*: * A projects/xxx/volumes/*: *Hasil kueri menunjukkan bahwa RAM user memiliki dua peran: role_project_dev (peran developer default di DataWorks) dan denyudfrole (peran kustom yang Anda buat).
-
Verifikasi izin UDF kustom dan package dependensinya.
odps@ xxx>desc function getregion; FAILED: ODPS-0420095: Access Denied - Authorization Failed [4011], You have NO privilege 'odps:Read' on {acs:odps:*:projects/xxx/resources/xxx}. -->Tips: Pricipal:RAMS xxx.pl@aliyun-esl.com.ramlesl by policy ID:38747231-386f-4018-b792-1da11700dc7e. odps@ xxx>desc resource getaddr.jar; FAILED: ODPS-0420095: Access Denied - Authorization Failed [4011], You have NO privilege 'odps:Read' on {acs:odps:*:pro 1-5788-49b1-82b8-1f4a95c2f9c5. -->Tips: Pricipal:RAMS xxx.pt@aliyun-test.com [xxx] [DEBUG]: com.aliyun.odps.OdpsException: ODPS-0420095: Access Denied - Authorization Failed [4011], You have NO privilegHasil menunjukkan bahwa meskipun RAM user memiliki peran developer, pengguna tersebut tidak memiliki izin baca untuk UDF kustom getregion. Anda harus mengonfigurasi project policy untuk memberikan akses eksplisit kepada pengguna ini.
-
-
Konfigurasikan project policy.
-
Tulis kebijakan.
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest", "Action":["odps:Read","odps:List","odps:Select"], "Resource":"acs:odps:*:projects/sz_mc/resources/getaddr.jar" }, { "Effect":"Allow", "Principal":"RAM$yangyi.pt@aliyun-test.com:yangyitest", "Action":["odps:Read","odps:List","odps:Select"], "Resource":"acs:odps:*:projects/sz_mc/registration/functions/getregion" }] } -
Terapkan project policy.
Jalankan perintah berikut untuk menerapkan project policy dari file yang ditentukan.
put policy /Users/yangyi/Desktop/project_policy.json; -
Jalankan perintah berikut untuk melihat project policy.
get policy;Hasil berikut dikembalikan:
odps@ xxx>get policy; { "Statement": [{ "Action": ["odps:Read", "odps:List", "odps:Select"], "Effect": "Allow", "Principal": ["RAM$xxxl.pt@aliyun-test.com:yangyitest"], "Resource": ["acs:odps:*:projects/sz_mc/resources/getaddr.jar"]}, { "Action": ["odps:Read", "odps:List", "odps:Select"], "Effect": "Allow", "Principal": ["RAM$yangyi.pt@aliyun-test.com:yangyitest"], "Resource": ["acs:odps:*:projects/sz_mc/registrxxx"] "Version": "1"} -
Verifikasi dengan menjalankan
whoami;danshow grants;.odps@ xxx whoami; Name: RAM$xxx.pt@aliyun-test.com:yangyitest End_Point: http://service.odps.aliyun.com/api Tunnel_End_Point: http://dt.cn-shanghai.maxcompute.aliyun.com Project: sz_mc odps@ xxx show grants; [roles] role_project_dev Authorization Type: Policy [role/role_project_dev] A projects/sz_mc: * A projects/sz_mc/instances/*: * A projects/sz_mc/jobs/*: * A projects/sz_mc/offlinemodels/*: * A projects/sz_mc/packages/*: * A projects/sz_mc/registration/functions/*: * A projects/sz_mc/resources/*: * A projects/sz_mc/tables/*: * A projects/sz_mc/volumes/*: * [user/RAM$yangyi.pt@aliyun-test.com:yangyitest] -
Jalankan tugas SQL untuk memverifikasi bahwa hanya RAM user yang ditentukan yang dapat mengakses UDF dan package dependensinya.
-
RAM user yang ditentukan dapat mengakses UDF:
odps@ xxx:select getregion('172.xxx.xxx.1'); ID = 2019011409xxx Log view: http://logview.odps.aliyun.com/logview/?h=http://service.odps.aliyun.com/api&p=sz_xxx U00DA2MTU2Myx7IlN0YXR1xxx/hZCJdLCJFZmZlY3QiOiJBbGxvxxx biI6IjEifQ== Job Queueing. STAGES STATUS TOTAL COMPLETED RUNNING PENDING BACKU M1_job_0 .......... TERMINATED 1 1 0 0 STAGES: 01/01 [==============================>>] 100% ELAPSED TIME: 24.34 s Summary: resource cost: cpu 0.27 Core * Min, memory 0.53 GB * Min inputs: outputs: Job run time: 18.000 Job run mode: fuxi job Job run engine: execution engine M1: instance count: 1 run time: 18.000 instance time: min: 16.000 -
Pengguna dapat mengakses package dependensi:
odps# desc resource getaddr.jar; Name getaddr.jar Owner ALIYUNSxxx.pt@oliyun-test.com Type JAR Comment IDE RESOURCE UPDATE TO ODPS /home/admin/oxs-base-biz-phoenix/temp/4d3efccz0l9eiirin53o5n4/getaddr.jar CreatedTime 2018-05-24 19:51:16 LastModifiedTime 2018-05-24 19:51:16 LastUpdator Size 1353716 Md5sum 770497a9f605e09e198cb166cec7fa08
-
-