All Products
Search
Document Center

MaxCompute:Praktik terbaik otorisasi

Last Updated:Jun 24, 2026

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

    1. Buat peran baru.

      create role <role_name>;

      <role_name> adalah nama role tersebut.

    2. Di direktori bin client MaxCompute, buat file bernama policy_1.json dan 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.

    3. 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 format RAM$<parent_account_email>:<ram_user_name>.

    Gunakan console

    1. Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

    3. Di halaman Projects, klik Manage di kolom Actions untuk proyek target.

    4. Di halaman Project Settings, klik tab Role Permissions.

    5. Klik Create Project-level Role untuk membuat role tingkat proyek dengan izin MaxCompute yang diperlukan.

    6. 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"}
    7. 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

    1. Buat role baru.

      create role <role_name>;

      <role_name> adalah nama role tersebut.

    2. Di direktori bin client MaxCompute, buat file bernama policy_2.json dan 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.

    3. 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 format RAM$<parent_account_email>:<ram_user_name>.

    Gunakan console

    1. Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.

    2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

    3. Di halaman Projects, klik Manage di kolom Actions untuk proyek target.

    4. Di halaman Project Settings, klik tab Role Permissions.

    5. 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_*" }]
      }
    6. 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

Penting
  • 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 aksi CreateInstance, CreateTable, dan List di proyek test_project, hanya jika permintaan diajukan sebelum 23:59:59 pada 11 November 2026 dan berasal dari rentang alamat IP 10.32.180.0/23. Pengguna juga harus ditolak izinnya untuk menghapus tabel apa pun di proyek tersebut.

    • Prosedur:

      Gunakan client MaxCompute

      1. Buat role baru.

        create role policy_3;
      2. Di direktori bin client MaxCompute, buat file bernama policy_3.json dan 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.

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

      1. Login ke MaxCompute console dan pilih wilayah di pojok kiri atas.

      2. Di panel navigasi sebelah kiri, pilih Manage Configurations > Projects.

      3. Di halaman Projects, klik Manage di kolom Actions untuk proyek target.

      4. Di halaman Project Settings, klik tab Role Permissions.

      5. 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/*"
        }]
        }
      6. 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 package bernama Package_test dibuat di proyek produksi (Project_a). Sebuah table produksi (table_a) ditambahkan ke package ini. package tersebut kemudian diinstal di proyek analisis (Project_analyze), dan pengguna (A*****@aliyunid.com) diberikan izin untuk melakukan kueri terhadap tabel melalui paket.

  • Prosedur:

    1. Di proyek produksi, buat paket.

      USE Project_a;
      CREATE PACKAGE Package_test;
    2. Di proyek produksi, tambahkan resource yang akan dibagikan ke dalam paket.

      ADD table table_a TO PACKAGE Package_test;
    3. Di proyek produksi, izinkan proyek analisis untuk menginstal paket.

      ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test;
    4. Di proyek analisis, instal paket.

      USE Project_analyze;
      INSTALL PACKAGE Project_a.Package_test;
    5. Berikan izin baca kepada analis pada paket tersebut.

      GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com;
    6. 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.

    Catatan
    • RAM 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 bernama Project_b. RAM user dari Akun B, b_user1, diberikan izin baca pada tabel t1 dan t2 di Project_a. RAM user lain dari Akun B, b_user2, diberikan izin baca pada tabel t3 di Project_a.

    Penting

    Meskipun 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:

    1. Di Project_a, gunakan Akun Alibaba Cloud A untuk membuat paket bernama a_to_b_pkg dan tambahkan tabel t1, t2, dan t3 ke 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;
    2. 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;
    3. Di proyek Project_b, gunakan Akun Alibaba Cloud B untuk menginstal paket a_to_b_pkg.

      INSTALL PACKAGE Project_a.a_to_b_pkg;
    4. 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_order di proyek ProjectA berisi 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_order berisi 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 tabel table_order. Lalu berikan izin kepada setiap merchant pada view yang sesuai menggunakan paket. Metode ini secara efektif mencapai kontrol akses tingkat baris.

  • Prosedur:

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

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

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