Projeler ve tablolar gibi MaxCompute nesneleri üzerinde birden fazla kullanıcının çalışmasına olanak tanımanız gerekiyorsa, Access Control List (ACL) kullanarak belirli kullanıcı veya rollere özel izinler verebilirsiniz. Birden çok kullanıcı için izinleri verimli bir şekilde yönetmek amacıyla izinleri bir role verin ve ardından bu rolü kullanıcılara atayın. Bu konuda, MaxCompute'ün desteklediği ACL yetkilendirme komutları açıklanmakta ve örnekler sunulmaktadır.
Arka plan bilgileri
ACL tabanlı erişim denetimi, bir izin listesi yetkilendirme modeli kullanır. Bir kullanıcının veya rolün belirli bir nesne üzerinde belirli eylemleri gerçekleştirmesine açıkça izin verirsiniz. Bu yaklaşım, yetkilendirmeyi basit ve hassas hale getirir.
Bir MaxCompute projesi oluşturduktan sonra, ACL tabanlı erişim denetimi varsayılan olarak etkinleştirilir. Proje sahibi, projede set CheckPermissionUsingACL=true|false; komutunu çalıştırarak bu özelliği etkinleştirebilir veya devre dışı bırakabilir.
ACL tabanlı erişim denetimi aşağıdaki senaryolarda uygulanır.
|
Senaryo |
Açıklama |
İzin veren |
Giriş noktası |
|
Kullanıcıya izin verme |
Belirli bir nesne üzerindeki bir veya daha fazla eylemi doğrudan tek bir kullanıcıya verin. |
İzinler listesindeki Desteklenen izin verenler sütununa bakın. |
|
|
Rollere dayalı olarak kullanıcılara izin verme |
Belirli bir nesne üzerindeki bir veya daha fazla eylemi doğrudan bir role verin ve ardından rolü birden çok kullanıcıya atayın. Kullanıcılar, rolün izinlerini devralır. Rol oluşturma ve kullanıcılara rol atama hakkında daha fazla bilgi için Rol planlama ve Kullanıcıya rol ekleme konularına bakın. Not
Roller, verimli kullanıcı yönetimi için tasarlanmıştır. Aynı nesne üzerindeki aynı izinleri birden çok role vermeyin. |
Ön koşullar
ACL tabanlı erişim denetimini kullanmadan önce aşağıdaki bilgilere sahip olduğunuzdan emin olun:
-
İzin alanın hesap adı veya rol adı. Kullanıcı veya rol MaxCompute projesine eklenmiş olmalıdır. Hesap formatları şu şekildedir: Alibaba Cloud hesabı ALIYUN$<account_id> formatındadır, RAM kullanıcı hesabı RAM$<account_id>:<RAM user UID> formatındadır ve RAM rolü
RAM$<account_id>:role/<RAM role name>formatındadır.Hesap veya rol adlarını almak için MaxCompute istemcisinde
list users;veyalist roles;komutunu çalıştırabilirsiniz.Kullanıcı veya rol eklemek için Kullanıcı planlama ve yönetimi veya Rol planlama konularına bakın.
-
Nesne türü, nesne adı ve verilecek eylemler.
Nesne türleri ve eylemler hakkında daha fazla bilgi için MaxCompute izinleri konusuna bakın.
Sınırlamalar
ACL tabanlı erişim denetimi için aşağıdaki sınırlamalar geçerlidir:
İzinleri yalnızca mevcut nesnelerdeki mevcut kullanıcılara veya rollere verebilirsiniz. Bu, aynı ada sahip bir nesnenin silinip yeniden oluşturulmasından kaynaklanan güvenlik risklerini önler.
ACL tabanlı erişim denetimi,
[with grant option]yan tümcesi ile yetkilendirmeyi desteklemez. Örneğin, A kullanıcısı B kullanıcısına bir nesneye erişim izni verirse, B kullanıcısı bu izni C kullanıcısına veremez.ACL yetkilendirmesi bir izin listesi modeli kullanır ve engelleme listesi modelini desteklemez.
Kullanım notları
ACL tabanlı erişim denetimini kullanırken aşağıdaki hususlara dikkat edin:
Bir nesneyi sildiğinizde, MaxCompute bununla ilişkili tüm ACL izinlerini otomatik olarak iptal eder.
Bir kullanıcı kaldırıldığında, izinleri korunur. Kullanıcı daha sonra projeye tekrar eklenirse önceki izinleri otomatik olarak geri yüklenir. Bir kullanıcının izinlerini kalıcı olarak temizlemek için Kaldırılan bir kullanıcının kalan izinlerini temizleme konusuna bakın.
Söz dizimi
ACL tabanlı erişim denetimi komutları aşağıdaki söz dizimini kullanır:
-
ACL izinleri verme
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")]; -
ACL izinlerini iptal etme
revoke <actions> on <object_type> <object_name> [(<column_list>)] from <subject_type> <subject_name>; -
Sütun düzeyinde erişim denetimi
grant <actions> on table <table_name> (<column_list>) to <subject_type> <subject_name>; revoke <actions> on table <table_name> (<column_list>) from <subject_type> <subject_name>;
Aşağıdaki tabloda parametreler açıklanmaktadır.
|
Parametre |
Gerekli |
Açıklama |
|
|
actions |
Evet |
Verilecek eylemler. Tek bir 'grant' ifadesinde bir veya daha fazla eylem belirtebilirsiniz. Birden fazla eylemi virgül (,) ile ayırın. Geçerli eylemlerin listesi için MaxCompute izinleri konusuna bakın. |
|
|
object_type |
Evet |
İzin verilecek nesnenin türü. Tek bir ifadede yalnızca bir nesne türü belirtebilirsiniz. Geçerli nesne türlerinin listesi için MaxCompute izinleri konusuna bakın. |
|
|
object_name |
Evet |
Nesnenin adı. Adı aşağıdaki şekilde bulabilirsiniz:
Nesne adında joker karakter olarak yıldız işareti () kullanabilirsiniz. Örneğin, Not
Joker karakter (*) yalnızca ROLE için izin verirken kullanılabilir. USER için izin verirken joker karakterler desteklenmez. |
|
|
column_list |
Hayır |
Bu parametre yalnızca object_type tablo olduğunda ve sütun düzeyinde erişim denetimi uygulamak istediğinizde gereklidir. Bir veya daha fazla sütun belirtebilirsiniz. Birden fazla sütun adını virgül (,) ile ayırın. Not
Bu parametre, belirtilen sütunlardaki Describe, Select, Alter, Update, Drop, ShowHistory ve ALL izinlerini kontrol eder. Bir sütun için duyarlılık düzeyi yapılandırılmışsa, duyarlılık etiketlerine göre hassas verilere erişimi kontrol etmek için Etiket tabanlı erişim denetimi kullanabilirsiniz. |
|
|
privilegeproperties |
conditions |
Hayır |
İstek kaynağı ve erişim yöntemi gibi niteliklere göre izinleri kontrol eder. Formatı |
|
days |
Hayır |
İznin sona ermesine kadar geçen gün sayısı. Bu parametreyi belirtmezseniz izin süresiz olur. Bu parametreyi belirtirseniz, MaxCompute süre dolduktan sonra izin kaydını otomatik olarak kaldırır. |
|
|
subject_type |
Evet |
İzin alanın türü. Geçerli değerler:
|
|
|
subject_name |
Evet |
İzin alanın kullanıcı hesabı veya rol adı. Her izin verme işlemi için yalnızca bir kullanıcı veya rol belirtebilirsiniz. Formatlar:
Kullanıcı hesabını veya rol adını almak için MaxCompute istemcisinde |
|
Koşullar
Aşağıdaki tabloda, conditions için desteklenen var_name ve Operation değerleri listelenmektedir.
|
var_name |
Tür |
Operation |
Açıklama |
|
acs:UserAgent |
STRING |
|
İstekte bulunan istemcinin User-Agent değeri. |
|
acs:Referer |
STRING |
İsteğin HTTP Referer değeri. |
|
|
acs:SourceIp |
IP adresi |
|
İstekte bulunan istemcinin IP adresi. |
|
acs:SecureTransport |
BOOLEAN |
|
İsteğin HTTPS gibi güvenli bir kanal üzerinden gönderilip gönderilmediğini belirtir. |
|
acs:CurrentTime |
DATEANDTIME |
|
Web sunucusunun isteği aldığı zaman, ISO 8601 formatında (örneğin 2012-11-11T23:59:59Z). |
Örnekler
Bob@aliyun.com (hesap kimliği: 5527xxxxxxxx5788) kullanıcısının test_project_a projesinin proje sahibi olduğunu ve Allen (UID: 1652xxxxxxxxxx1538), Alice (UID: 2763xxxxxxxxxx1649) ile Tom (UID: 3874xxxxxxxxxx1850) kullanıcılarının Bob@aliyun.com altında RAM kullanıcıları olduğunu varsayalım. Aşağıdaki örneklerde, MaxCompute istemcisi kullanılarak yetkilendirme işlemleri gösterilmektedir.
-
Örnek 1: Kullanıcıya izin verme
test_project_a projesinde sale_detail tablosunu oluşturun ve Allen kullanıcısına tabloda Describe (meta verileri okuma) ve Select (verileri okuma) izinlerini verin. Aşağıda örnek komutlar sağlanmıştır.
-- Bob switches to the test_project_a project. use test_project_a; --Create a partitioned table named sale_detail. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); --Add the user Allen as a project member. add user RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Grant permissions to Allen. grant Describe, Select on table sale_detail to USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --View the permissions granted to Allen. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --The authorization result is as follows. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538] A projects/test_project_a/tables/sale_detail: Describe | Select -
Örnek 2: Kullanıcıya sütun düzeyinde izinler verme
Örnek 1'de oluşturulan sale_detail tablosunu kullanarak, Alice kullanıcısına sale_detail tablosundaki shop_name ve customer_id sütunları üzerinde tüm izinleri verin. Aşağıda örnek komutlar sağlanmıştır.
-- Bob switches to the test_project_a project. use test_project_a; --Add user Alice as a project member. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --Grant column-level permissions to Alice. grant All on table sale_detail (shop_name, customer_id) to USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --View the permissions granted to Alice. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --The authorization result is as follows. Authorization Type: ACL [user/RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649] A projects/test_project_a/tables/sale_detail/customer_id: All A projects/test_project_a/tables/sale_detail/shop_name: All -
Örnek 3: Kullanıcılardan izinleri iptal etme
Örnek 1 ve Örnek 2'ye dayanarak, Allen ve Alice kullanıcılarından izinleri iptal edin. Aşağıda örnek komutlar sağlanmıştır.
-- Bob switches to the test_project_a project. use test_project_a; --Revoke the permissions from Allen. revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Revoke the permissions from Alice. revoke All on table sale_detail (shop_name, customer_id) from USER RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; --Check Allen's permissions after revocation. The Describe and Select permissions are removed from the permission list. show grants for RAM$5527xxxxxxxx5788:1652xxxxxxxxxx1538; --Check Alice's permissions after revocation. The All permission is removed from the permission list. show grants for RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; -
Örnek 4: Bir rol kullanarak birden çok kullanıcıya aynı izinleri verme
Alice, Tom ve başka bir Alibaba Cloud hesabı olan Lily@aliyun.com (hesap kimliği: 5638xxxxxxxx6899) kullanıcılarına test_project_a projesinde örnekler, kaynaklar, işlevler ve tablolar oluşturma ve tüm nesne türlerini listeleme izinlerini verin. Aşağıda örnek komutlar sağlanmıştır.
-- Bob switches to the test_project_a project. use test_project_a; --Add the users Alice, Tom, and Lily@aliyun.com as project members. add user RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; add user RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; add user ALIYUN$5638xxxxxxxx6899; --Create the Worker role. create role Worker; --Assign the Worker role to the users. grant Worker TO RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; grant Worker TO RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; grant Worker TO ALIYUN$5638xxxxxxxx6899; --Grant the Worker role the permissions to create instances, resources, functions, and tables, and to list all object types in the test_project_a project. grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; --View the permissions for the user Lily. show grants for ALIYUN$5638xxxxxxxx6899; --The following authorization result indicates that the user Lily has the specified permissions. [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List -
Örnek 5: Birden çok kullanıcıdan aynı rol tabanlı izinleri iptal etme
Örnek 4'e dayanarak, Alice, Tom ve Lily@aliyun.com kullanıcılarından izinleri iptal edin. Aşağıda örnek komutlar sağlanmıştır.
-- Bob switches to the test_project_a project. use test_project_a; --Revoke the Worker role from the users Alice, Tom, and Lily@aliyun.com. revoke Worker from RAM$5527xxxxxxxx5788:2763xxxxxxxxxx1649; revoke Worker from RAM$5527xxxxxxxx5788:3874xxxxxxxxxx1850; revoke Worker from ALIYUN$5638xxxxxxxx6899; --Check Lily's permissions after revocation. The permission list no longer includes the Worker role. show grants for ALIYUN$5638xxxxxxxx6899;
Sonraki adımlar
ACL yetkilendirmesinin nasıl çalıştığını anladığınızda, iş ihtiyaçlarınıza göre izinleri yönetebilirsiniz: