全部产品
Search
文档中心

MaxCompute:Praktik Otorisasi

更新时间:Jun 19, 2025

Untuk memastikan keamanan data dalam Proyek MaxCompute, pemilik proyek atau pengguna dengan kemampuan otorisasi harus mengelola izin anggota di dalam proyek. Topik ini memberikan contoh kasus pengelolaan izin di MaxCompute.

Kasus kontrol akses berbasis kebijakan

Mengizinkan pengguna dengan peran tertentu untuk melakukan operasi berdasarkan kebijakan

  • Deskripsi skenario:

    Anggota proyek tertentu diberi izin untuk membuat tabel, mengunggah file sumber daya, membuat fungsi, dan menjalankan tugas untuk membaca tabel yang namanya dimulai dengan t_app_.

  • Prosedur:

    Gunakan klien MaxCompute

    1. Buat peran.

      create role <role_name>;

      Parameter role_name menentukan nama dari peran.

    2. Siapkan skrip kebijakan dan letakkan file skrip di direktori bin tempat file klien MaxCompute berada. File skrip bernama policy_1.json dan berisi konten 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"}

      Parameter project_name menentukan nama Proyek MaxCompute Anda.

    3. Berikan izin yang diperlukan.

      -- Berikan izin kepada peran yang dibuat.
      put policy policy_1.json on role <role_name>;
      
      -- Tetapkan peran kepada pengguna tertentu.
      grant <role_name> to <user_name>;

      Parameter user_name menentukan akun yang ingin Anda tetapkan peran kepadanya. Untuk akun Alibaba Cloud, formatnya adalah ALIYUN$Alibaba Cloud account. Untuk pengguna RAM, formatnya adalah RAM$Alibaba Cloud account:RAM username.

    Gunakan Konsol MaxCompute

    1. Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah.

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

    3. Di halaman Projects, temukan proyek yang diinginkan 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, konfigurasikan parameter Role Name, lalu pilih Policy untuk Metode Otorisasi.

      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 peran yang dibuat dan klik Manage Members di kolom Actions untuk menambahkan akun Alibaba Cloud atau pengguna RAM ke peran.

Larang pengguna dengan peran tertentu melakukan operasi berdasarkan kebijakan

  • Deskripsi skenario: Kontrol akses pada tabel dengan nama yang dimulai dengan tb_ sangat penting. Beberapa akun tidak memiliki izin untuk menghapus tabel tersebut, dan kontrol akses diterapkan berdasarkan kebijakan.

  • Prosedur:

    Gunakan klien MaxCompute

    1. Buat peran.

      create role <role_name>;

      Parameter role_name menentukan nama dari peran.

    2. Siapkan skrip kebijakan dan letakkan file skrip di direktori bin tempat file klien MaxCompute berada. File skrip bernama policy_2.json dan berisi konten berikut:

      { 
        "Version": "1", 
        "Statement": [{ 
          "Effect": "Deny", 
          "Action": "odps:Drop", 
          "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }]
      }

      Parameter project_name menentukan nama Proyek MaxCompute Anda.

    3. Berikan izin yang diperlukan.

      -- Berikan izin kepada peran yang dibuat.
      put policy policy_2.json on role <role_name>;
      
      -- Tetapkan peran kepada pengguna tertentu.
      grant <role_name> to <user_name>;  

      Parameter user_name menentukan akun yang ingin Anda tetapkan peran kepadanya. Untuk akun Alibaba Cloud, formatnya adalah ALIYUN$Alibaba Cloud account. Untuk pengguna RAM, formatnya adalah RAM$Alibaba Cloud account:RAM username.

    Gunakan Konsol MaxCompute

    1. Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah.

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

    3. Di halaman Projects, temukan proyek yang diinginkan dan klik Manage di kolom Actions.

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

    5. Dalam kotak dialog Create Role, pilih Resource dari daftar drop-down Role Type, atur parameter Role Name, lalu pilih Policy untuk Metode Otorisasi.

      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 peran yang dibuat dan klik Manage Members di kolom Actions untuk menambahkan akun Alibaba Cloud atau pengguna RAM ke peran.

Berikan izin kepada peran berdasarkan kebijakan

  • Deskripsi skenario:

    Akun a****@aliyunid.com diberi otorisasi untuk mengirimkan permintaan menggunakan blok CIDR 10.32.180.0/23 sebelum 2018-11-11 23:59:59. Akun tersebut diberi izin CreateInstance, CreateTable, dan List pada proyek bernama test_project dan tidak diizinkan untuk menghapus tabel di proyek test_project.

  • Prosedur:

    Gunakan klien MaxCompute

    1. Buat peran.

      create role policy_3;
    2. Siapkan skrip kebijakan dan letakkan file skrip di direktori bin tempat file klien MaxCompute berada. File skrip bernama policy_3.json dan berisi konten 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/*"
      }]
      }

      Parameter project_name menentukan nama Proyek MaxCompute Anda.

    3. Berikan izin yang diperlukan.

      -- Berikan izin kepada peran yang dibuat.
      put policy policy_3.json on role policy_3;
      
      -- Tetapkan peran kepada pengguna tertentu.
      grant policy_3 to ALIYUN$a****@aliyunid.com;

    Gunakan Konsol MaxCompute

    1. Masuk ke Konsol MaxCompute. Di bilah navigasi atas, pilih wilayah.

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

    3. Di halaman Projects, temukan proyek yang diinginkan 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, konfigurasikan parameter Role Name, lalu pilih Policy untuk Metode Otorisasi.

      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 peran yang dibuat dan klik Manage Members di kolom Actions untuk menambahkan akun Alibaba Cloud atau pengguna RAM ke peran.

Kasus kontrol akses berbasis paket

Akses sumber daya lintas proyek berdasarkan paket

  • Deskripsi skenario:

    Analis bisnis perlu melihat tabel produksi, tetapi mereka tidak diizinkan untuk melihat kode tugas produksi. Izin untuk mengakses beberapa tabel dari beberapa proyek produksi perlu diberikan kepada analis bisnis.

  • Solusi:

    Buat proyek analisis terpisah dalam skenario ini. Anda dapat membuat paket di proyek produksi dan menambahkan tabel yang perlu diakses ke paket, instal paket di proyek analisis, dan berikan izin pada paket kepada para analis. Anda dapat melakukan operasi ini di beberapa proyek produksi. Ini dapat mengurangi biaya manajemen anggota, menghilangkan kebutuhan untuk menambahkan analis ke semua proyek produksi, dan memastikan bahwa analis ini hanya dapat melihat tabel produksi tertentu di proyek analisis.

    Dalam contoh ini, paket bernama Package_test dibuat di proyek produksi bernama Project_a, dan tabel produksi bernama table_a ditambahkan ke paket. Paket diinstal di proyek analisis bernama Project_analyze, dan analis yang menggunakan akun A*****@aliyunid.com diberi otorisasi untuk menanyakan data dari tabel table_a di paket.

  • Prosedur:

    1. Buat paket di proyek produksi.

      USE Project_a;
      CREATE PACKAGE Package_test;
    1. Tambahkan sumber daya yang ingin Anda bagikan ke paket di proyek produksi.

      ADD table table_a TO PACKAGE Package_test;
    1. Izinkan proyek analisis untuk menggunakan paket yang dibuat di proyek produksi.

      ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test;
    1. Instal paket di proyek analisis.

      USE Project_analyze;
      INSTALL PACKAGE Project_a.Package_test;
    1. Berikan izin yang diperlukan pada paket kepada akun yang digunakan oleh analis.

      GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com;
    2. Tanyakan data dari tabel. Langkah ini dilakukan oleh analis.

      select * from Project_a.table_a;

Akses sumber daya lintas akun Alibaba Cloud berdasarkan paket

  • Deskripsi skenario:

    Untuk perusahaan yang sama, departemen yang berbeda menggunakan akun Alibaba Cloud yang berbeda untuk mengaktifkan MaxCompute karena biaya internal dan persyaratan bisnis lainnya. Namun, pertukaran data antar departemen diperlukan. Untuk alasan keamanan data, diharapkan pengguna paket di proyek yang berbeda hanya dapat membaca data di tabel tertentu dari penyedia. Oleh karena itu, manajemen mendetail terhadap izin data dari akun Alibaba Cloud yang berbeda diperlukan.

    null
    • Pengguna RAM dari akun Alibaba Cloud tidak dapat ditambahkan ke proyek MaxCompute dari akun Alibaba Cloud lain. Misalnya, pengguna RAM dari Akun Alibaba Cloud B tidak dapat ditambahkan ke proyek yang dimiliki oleh Akun Alibaba Cloud A.

    • Jika Anda hanya ingin memberikan izin baca pada tabel, sumber daya, dan fungsi, Anda dapat menggunakan paket untuk berbagi sumber daya lintas proyek dari akun Alibaba Cloud yang berbeda.

  • Solusi:

    Dua proyek bernama Project_a dan Project_b tersedia. Proyek Project_a dimiliki oleh Akun Alibaba Cloud A, dan proyek Project_b dimiliki oleh Akun Alibaba Cloud B. Izin baca pada tabel t1 dan t2 di proyek Project_a perlu diberikan kepada pengguna RAM b_user1 dari Akun Alibaba Cloud B. Izin baca pada tabel t3 di proyek Project_a perlu diberikan kepada pengguna RAM b_user2 dari Akun Alibaba Cloud B.

    null

    Data dapat dipertukarkan antar akun Alibaba Cloud setelah otorisasi. Namun, jika Anda menggunakan MaxCompute di konsol DataWorks, Anda tidak dapat mengonfigurasi dependensi penjadwalan antara tugas ruang kerja DataWorks dari akun Alibaba Cloud yang berbeda.

  • Prosedur:

    1. Gunakan Akun Alibaba Cloud A untuk masuk ke proyek Project_a, dan buat paket bernama a_to_b_pkg. Tambahkan tabel t1, t2, dan t3 di proyek Project_a ke paket a_to_b_pkg.

    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;
    1. Izinkan Akun Alibaba Cloud B untuk menginstal paket a_to_b_pkg di proyek Project_b.

    ALLOW Project_b TO INSTALL PACKAGE a_to_b_pkg;
    1. Gunakan Akun Alibaba Cloud B untuk masuk ke proyek Project_b dan instal paket a_to_b_pkg di proyek tersebut.

    INSTALL PACKAGE Project_a.a_to_b_pkg;
    1. Berikan izin pada tabel dalam paket kepada pengguna RAM Akun Alibaba Cloud B.

    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 pada tabel t1 di paket kepada pengguna RAM 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 pada tabel t2 di paket kepada pengguna RAM 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 pada tabel t3 di paket kepada pengguna RAM b_user2.

Kontrol akses tingkat baris berdasarkan paket

  • Deskripsi skenario:

    Tabel table_order di proyek ProjectA adalah tabel yang berisi informasi tentang pesanan dan transaksi semua pedagang. Pedagang perlu melihat tabel tersebut, tetapi mereka hanya dapat melihat pesanan dan transaksi dari toko mereka sendiri.

  • Solusi:

    Gunakan mekanisme kontrol akses tingkat baris yang memungkinkan setiap pedagang menyaring data berdasarkan ID pedagang ID di tabel table_order dan hanya membaca data dari toko mereka sendiri. Secara default, MaxCompute tidak mendukung kontrol akses tingkat baris. Anda dapat membuat tampilan terpisah dari tabel table_order untuk setiap pedagang di hilir dan memberikan izin pada tampilan kepada setiap pedagang menggunakan paket.

  • Prosedur:

    1. Buat tampilan terpisah untuk setiap pedagang di proyek ProjectA.

      CREATE VIEW <viewname> as select * from table_order WHERE sellerid='xxxx';

      Parameter viewname menentukan nama dari tampilan.

    1. Buat paket di proyek ProjectA dan berikan izin pada tampilan di paket kepada setiap pedagang.

      create package <packagename>;
      add table <viewname> to package <packagename>;
      allow project <Projectname_seller> to install package <packagename>;

      Parameter packagename menentukan nama paket. Parameter Projectname_seller menentukan nama proyek MaxCompute yang dimiliki pedagang.

    1. Instal paket di proyek yang dimiliki pedagang dan berikan izin baca pada tampilan kepada pedagang.

      USE <Projectname_seller>;
      install package <ProjectA>.<packagename>;
      grant read on package <ProjectA>.<packagename> to user <username>;
      select * from <ProjectA>.<viewname>;

      Parameter username menentukan akun yang digunakan untuk menanyakan data dari tampilan di proyek yang dimiliki pedagang.