All Products
Search
Document Center

DataWorks:Praktik terbaik: Berikan akses pengguna tertentu ke UDF

Last Updated:Jul 25, 2026

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.

    Catatan

    Untuk 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.

    Catatan

    Untuk 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

  1. Buat peran yang secara default menolak akses ke UDF.

    1. Di klien MaxCompute, jalankan perintah berikut untuk membuat peran bernama denyudfrole.

      create role denyudfrole;
    2. 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"
          }
        ]
      }
    3. 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;
    4. 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"}
    5. Jalankan perintah berikut untuk menambahkan RAM user ke peran denyudfrole.

      grant denyudfrole to RAM$xxxx.pt@aliyun-test.com:ramtest;
  2. Verifikasi bahwa peran penolakan UDF telah dibuat.

    1. 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
    2. 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).

    3. 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 privileg

      Hasil 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.

  3. Konfigurasikan project policy.

    1. 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"
      }] }
    2. Terapkan project policy.

      Jalankan perintah berikut untuk menerapkan project policy dari file yang ditentukan.

      put policy /Users/yangyi/Desktop/project_policy.json;
    3. 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"}
    4. Verifikasi dengan menjalankan whoami; dan show 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]
    5. 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