All Products
Search
Document Center

MaxCompute:Praktik otorisasi

Last Updated:Mar 26, 2026

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.

ScenarioRecommended mechanism
Memberikan atau menolak aksi tertentu pada resource proyek kepada suatu roleKontrol akses berbasis kebijakan
Menerapkan kondisi berbasis waktu atau IP pada izinKontrol akses berbasis kebijakan
Berbagi tabel tertentu antar proyek dalam Akun Alibaba Cloud yang samaKontrol akses berbasis paket
Berbagi tabel tertentu antar proyek yang dimiliki oleh Akun Alibaba Cloud berbedaKontrol 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

  1. Buat role.

    create role <role_name>;
  2. Buat file kebijakan bernama policy_1.json dan letakkan di direktori bin klien 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.

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

  1. Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Workspace > Projects.

  3. Temukan proyek target dan klik Manage di kolom Actions.

  4. Di tab Role Permissions, klik Create Project-level Role.

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

  1. Buat role.

    create role <role_name>;
  2. Buat file kebijakan bernama policy_2.json di direktori bin klien 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.

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

  1. Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Workspace > Projects.

  3. Temukan proyek target dan klik Manage di kolom Actions.

  4. Di tab Role Permissions, klik Create Project-level Role.

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

  1. Buat role bernama policy_3.

    create role policy_3;
  2. Buat file kebijakan bernama policy_3.json di direktori bin klien 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.

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

  1. Masuk ke Konsol MaxCompute dan pilih wilayah di bilah navigasi atas.

  2. Di panel navigasi kiri, pilih Workspace > Projects.

  3. Temukan proyek target dan klik Manage di kolom Actions.

  4. Di tab Role Permissions, klik Create Project-level Role.

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

  • Proyek analisis: Project_analyze

  • Paket: Package_test

  • Tabel yang dibagikan: table_a

  • Akun analis: A*****@aliyunid.com

  1. 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;
  2. Izinkan proyek analisis untuk menginstal paket tersebut.

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

    USE Project_analyze;
    INSTALL PACKAGE Project_a.Package_test;
  4. Berikan akses baca pada paket tersebut kepada analis.

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

Penting

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 memiliki Project_b

  • Paket: a_to_b_pkg

  • b_user1 (Pengguna RAM Akun B) memerlukan akses baca ke t1 dan t2

  • b_user2 (Pengguna RAM Akun B) memerlukan akses baca ke t3

  1. Menggunakan Akun A, buat paket di Project_a dan 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;
  2. Izinkan Project_b untuk menginstal paket tersebut.

    ALLOW Project_b TO INSTALL PACKAGE a_to_b_pkg;
  3. Menggunakan Akun B, instal paket tersebut di Project_b.

    INSTALL PACKAGE Project_a.a_to_b_pkg;
  4. Tambahkan Pengguna RAM Akun B ke Project_b dan 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.

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

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