MaxCompute では、アクセス制御リスト (ACL) またはポリシーベースの権限付与を使用して、オブジェクトに対してアクションを実行する権限をユーザーまたはロールに付与できます。
ACLベースのアクセス制御
前提条件
ACLベースのアクセス制御を使用する前に、以下の情報が揃っていることを確認してください。
権限を付与するアカウントまたはロールの名前。アカウントまたはロールは MaxCompute プロジェクトに追加されている必要があります。Alibaba Cloud アカウントの形式は
ALIYUN$<Alibaba Cloud アカウント>で、RAM ユーザーの形式はRAM$<Alibaba Cloud account to which the RAM user belongs>:<RAM user name>です。MaxCompute クライアントで
list users;またはlist roles;コマンドを実行して、アカウントまたはロールの情報を取得できます。新しいユーザーまたはロールを追加するには、「ユーザーの計画と管理」または「ロールの計画」をご参照ください。
オブジェクトタイプ、オブジェクト名、および付与するアクション。
オブジェクトタイプとサポートされるアクションの詳細については、「MaxCompute の権限」をご参照ください。
制限事項
ACLベースのアクセス制御には、以下の制限があります。
ACLベースのアクセス制御では、既存のオブジェクトおよび既存のサブジェクトに対してのみ権限を付与できます。これにより、同じ名前のオブジェクトを削除してから再作成することによって生じるセキュリティリスクを防ぎます。
ACLベースのアクセス制御は、
[with grant option]句による権限委任をサポートしていません。たとえば、ユーザー A がユーザー B にオブジェクトへのアクセス権を付与した場合、ユーザー B はその権限をユーザー C に付与することはできません。ACL での権限付与は、ホワイトリスト (許可) モデルを使用し、ブラックリスト (拒否) モデルはサポートしていません。
利用上の注意
ACLベースのアクセス制御を使用する場合:
オブジェクトが削除されると、MaxCompute はそのオブジェクトに関連するすべての ACL 権限を自動的に取り消します。
-
ユーザーを削除しても、権限は保持されます。その後、ユーザーをプロジェクトに再度追加すると、以前の権限が自動的に復元されます。ユーザーの権限を完全にクリアするには、「削除されたユーザーの残存権限をクリアする」をご参照ください。
構文
ACLベースのアクセス制御では、以下の構文を使用します。
ACL権限の付与
grant <actions> on <object_type> <object_name> [(<column_list>)] to <subject_type> <subject_name> [privilegeproperties("conditions" = "<conditions>", "expires"="<days>")];列レベルのアクセス制御
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>;次の表にパラメーターを示します。
パラメーター
必須
説明
actions
はい
付与するアクションを指定します。1 つのステートメントで 1 つ以上のアクションを指定できます。
複数のアクションを指定する場合は、コンマ (,) で区切ります。サポートされているアクションのリストについては、「MaxCompute の権限」をご参照ください。
object_type
はい
権限を付与するオブジェクトのタイプを指定します。ステートメントごとに指定できるオブジェクトタイプは 1 つだけです。
サポートされているオブジェクトタイプのリストについては、「MaxCompute の権限」をご参照ください。
object_name
はい
権限を付与するオブジェクトの名前を指定します。名前は以下のいずれかの方法で取得できます。
プロジェクト名:MaxCompute コンソールにログインし、左上のコーナーでリージョンを切り替えてから、プロジェクト管理 タブに移動して特定の MaxCompute プロジェクト名を確認してください。
テーブル名:MaxCompute クライアントで
show tables;コマンドを実行して、テーブル名またはビュー名を取得します。リソース名:MaxCompute クライアントで
list resources;コマンドを実行して、リソース名を取得します。関数名:MaxCompute クライアントで
list functions;コマンドを実行して、関数名を取得します。インスタンス名:MaxCompute クライアントで
show instances;コマンドを実行して、インスタンス ID を取得します。
オブジェクト名にはワイルドカード文字 (*) を使用できます。たとえば、
table taobao*は、名前がtaobaoで始まるすべてのテーブルに一致します。説明ワイルドカード文字 (*) は、ROLE に権限を付与する場合にのみ使用できます。USER ではワイルドカード文字はサポートされていません。
column_list
いいえ
このパラメーターは、object_type が
Tableで、列レベルのアクセス制御を設定する必要がある場合にのみ必須です。1 つ以上の列名をコンマ (,) で区切って指定できます。説明このパラメーターを使用すると、テーブルの特定の列に対する
Describe、Select、Alter、Update、Drop、ShowHistory、およびALL権限を制御できます。テーブル内の列に機密レベルが設定されている場合は、ラベルベースのアクセス制御を使用して、機密レベルに基づいて機密データへのアクセスを管理できます。privilegeproperties
conditions
いいえ
リクエスト元やアクセス方法などの条件に基づいて権限を制御します。形式は
"<var_name> <Operation> constant" and "<var_name> <Operation> constant" and ...です。使用できる var_name と Operation の値のリストについては、「条件」をご参照ください。days
いいえ
権限の有効期限を日数で指定します。このパラメーターを指定しない場合、権限は期限切れになりません。このパラメーターを指定した場合、MaxCompute は有効期限が切れると自動的に権限を取り消します。
subject_type
はい
権限を付与するサブジェクトのタイプを指定します。有効な値:
USER:Alibaba Cloud アカウントまたは RAM ユーザー
ROLE:ロール
subject_name
はい
権限を付与するユーザーまたはロールの名前を指定します。ステートメントごとに指定できるユーザーまたはロールは 1 つだけです。
MaxCompute クライアントで
list users;またはlist roles;コマンドを実行して、ユーザーアカウントまたはロール名を取得できます。
条件
conditions で使用できる var_name と Operation の値を次の表に示します。
var_name
タイプ
Operation
説明
acs:UserAgent
STRING
StringEquals:
=StringNotEquals:
<>StringLike:
likeStringNotLike:
not like
リクエストを送信するクライアントの User-Agent。
acs:Referer
STRING
リクエストの HTTP リファラー。
acs:SourceIp
IP Address
IpAddress:
in (...)NotIpAddress:
not in (...)
リクエストを送信するクライアントの送信元 IP アドレス。
acs:SecureTransport
BOOLEAN
True
False
リクエストが HTTPS などのセキュアなチャネルを使用しているかどうかを示します。
acs:CurrentTime
DATEANDTIME
DateEquals:
=DateNotEquals:
<>DateLessThan:
<DateLessThanEquals:
<=DateGreaterThan:
>DateGreaterThanEquals:
>=
Web サーバーがリクエストを受信した時刻 (ISO 8601 形式)。例:2012-11-11T23:59:59Z。
例
Alibaba Cloud アカウント Bob@aliyun.com が test_project_a のプロジェクト所有者であり、Allen、Alice、Tom が Bob@aliyun.com に属する RAM ユーザーであるとします。
例1:ユーザーへの権限の付与
test_project_a プロジェクトに sale_detail という名前のテーブルを作成し、そのテーブルに対する Describe (メタデータの読み取り) と Select (データの読み取り) の権限をユーザー Allen に付与します。コマンド例:
--test_project_aプロジェクトに切り替えます。 use test_project_a; --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); --RAM ユーザーAllenをプロジェクトメンバーとして追加します。 add user RAM$Bob@aliyun.com:Allen; --Allenに権限を付与します。 grant Describe, Select on table sale_detail to USER RAM$Bob@aliyun.com:Allen; --Allenに付与された権限を表示します。 show grants for RAM$Bob@aliyun.com:Allen; --次の結果が返されます。 Authorization Type: ACL [user/RAM$Bob@aliyun.com:Allen] A projects/test_project_a/tables/sale_detail: Describe | Select例2:ユーザーへの列レベルの権限の付与
例 1 で作成した sale_detail テーブルに基づいて、shop_name 列と customer_id 列に対するすべての権限を Alice に付与します。コマンド例:
--test_project_aプロジェクトに切り替えます。 use test_project_a; --RAM ユーザーAliceをプロジェクトメンバーとして追加します。 add user RAM$Bob@aliyun.com:Alice; --Aliceに列レベルの権限を付与します。 grant All on table sale_detail (shop_name, customer_id) to USER RAM$Bob@aliyun.com:Alice; --Aliceに付与された権限を表示します。 show grants for RAM$Bob@aliyun.com:Alice; --次の結果が返されます。 Authorization Type: ACL [user/RAM$Bob@aliyun.com:Alice] A projects/test_project_a/tables/sale_detail/customer_id: All A projects/test_project_a/tables/sale_detail/shop_name: All例3:ロールを使用して複数のユーザーに同じ権限を付与
test_project_a プロジェクトでインスタンス、リソース、関数、テーブルを作成し、すべてのオブジェクトタイプを一覧表示する権限を、RAM ユーザーの Alice と Tom、および Alibaba Cloud アカウントの Lily@aliyun.com に付与します。コマンド例:
--test_project_aプロジェクトに切り替えます。 use test_project_a; --ユーザーAlice、Tom、およびLily@aliyun.comをプロジェクトメンバーとして追加します。 add user RAM$Bob@aliyun.com:Alice; add user RAM$Bob@aliyun.com:Tom; add user ALIYUN$Lily@aliyun.com; --Workerという名前のロールを作成します。 create role Worker; --Workerロールをユーザーに割り当てます。 grant Worker TO RAM$Bob@aliyun.com:Alice; grant Worker TO RAM$Bob@aliyun.com:Tom; grant Worker TO ALIYUN$Lily@aliyun.com; --test_project_aプロジェクトに対するCreateInstance、CreateResource、CreateFunction、CreateTable、およびList権限をWorkerロールに付与します。 grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker; --ユーザーLilyに付与された権限を表示します。 show grants for ALIYUN$Lily@aliyun.com; --次の結果が返されます。この結果は、ユーザーLilyに権限が付与されたことを示しています。 [roles] worker Authorization Type: ACL [role/worker] A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | List
ポリシーベースのアクセス制御
前提条件
ポリシーベースのアクセス制御を使用するには、以下の情報が必要です。
権限が付与されるロールの名前。そのロールは MaxCompute プロジェクトにすでに存在している必要があります。
MaxCompute クライアントで
list roles;コマンドを実行して、既存のロールを表示します。新しいロールを追加するには、「ロールの計画」をご参照ください。
-
オブジェクトタイプ、オブジェクト名、付与するアクション。
オブジェクトタイプとアクションの詳細については、「MaxCompute の権限」をご参照ください。
制限事項
ポリシーベースのアクセス制御は、既存のロールへの権限付与のみをサポートします。
注意事項
ポリシーベースのアクセス制御を使用する場合:
許可リストと拒否リストの両方が設定されている場合、拒否リストが優先されます。
ポリシーベースのアクセス制御では、存在しないオブジェクトに権限を付与できます。オブジェクトが削除されても、関連するポリシー権限は削除されません。これにより、その後同じ名前のオブジェクトを再作成した場合にセキュリティリスクが生じる可能性があります。
-
ユーザーを削除しても、権限は保持されます。その後、ユーザーをプロジェクトに再度追加すると、以前の権限が自動的に復元されます。ユーザーの権限を完全にクリアするには、「削除されたユーザーの残存権限をクリアする」をご参照ください。
構文
ポリシーベースのアクセス制御では、以下の構文を使用します。
grant <actions> on <object_type> <object_name> to ROLE <role_name> privilegeproperties("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>" ,"expires"="<days>"]);パラメーター
パラメーター
必須
説明
actions
はい
付与するアクション。1 つのステートメントで複数のアクションを指定できます。
複数のアクションを指定する場合は、コンマ (,) で区切ります。有効なアクションのリストについては、「MaxCompute の権限」をご参照ください。
object_type
はい
権限を付与するオブジェクトのタイプ。ステートメントごとに指定できるオブジェクトタイプは 1 つだけです。
有効なオブジェクトタイプのリストについては、「MaxCompute の権限」をご参照ください。
object_name
はい
オブジェクトの名前。名前は以下の方法で取得できます。
プロジェクト名:MaxCompute コンソールにログインし、左上のコーナーでリージョンを切り替えてから、プロジェクト管理 タブで MaxCompute プロジェクト名を確認してください。
テーブル名:MaxCompute クライアントで
show tables;コマンドを実行して、テーブルまたはビューの名前を取得します。リソース名:MaxCompute クライアントで
list resources;コマンドを実行して、リソース名を取得します。関数名:MaxCompute クライアントで
list functions;コマンドを実行して、関数名を取得します。インスタンス名:MaxCompute クライアントで
show instances;コマンドを実行して、インスタンス ID を取得します。
オブジェクト名には、アスタリスク (*) をワイルドカードとして使用できます。たとえば、
table taobao*は、名前がtaobaoで始まるすべてのテーブルを示します。説明ワイルドカード (*) は、ROLE に権限を付与する場合にのみ使用できます。USER に権限を付与する場合、ワイルドカードはサポートされていません。
role_name
はい
権限が付与されるロールの名前。ステートメントごとに指定できるロールは 1 つだけです。
MaxCompute クライアントで
list roles;コマンドを実行して、ロール名を取得できます。privilegeproperties
policy
はい
true に設定する必要があります。これにより、ポリシーベースのアクセス制御が有効になります。
allow
はい
権限付与のメカニズムを指定します。有効な値:
true:指定されたオブジェクトに対する指定されたアクションを許可します。
false:指定されたオブジェクトに対する指定されたアクションを拒否します。これは拒否リストとして機能します。
conditions
いいえ
リクエスト元やアクセス方法などの条件に基づいて権限を制御します。有効なパラメーター値のリストについては、「条件」をご参照ください。
days
いいえ
権限の有効期間 (日数)。このパラメーターが指定されていない場合、権限は期限切れになりません。指定された場合、MaxCompute は有効期限が切れると自動的に権限を取り消します。
例
Alibaba Cloud アカウント Bob@aliyun.com が test_project_a プロジェクトのプロジェクト所有者であり、Allen と Tom が Bob@aliyun.com に属する RAM ユーザーであるとします。Allen は test_project_a プロジェクトの Admin ロールを持っています。
例1:ロールに基づいてユーザーに権限を付与する (拒否リスト)
RAM ユーザー Tom が、名前が
tb_で始まるテーブルを削除する権限を拒否します。コマンド例:--test_project_aプロジェクトに切り替えます。 use test_project_a; --Workerという名前のロールを作成します。 create role Worker; --RAM ユーザーTomをプロジェクトメンバーとして追加します。 add user RAM$Bob@aliyun.com:Tom; --RAM ユーザーTomにWorkerロールを割り当てます。 grant Worker TO RAM$Bob@aliyun.com:Tom; --test_project_aプロジェクト内で名前がtb_で始まるテーブルを削除する権限をWorkerロールに拒否します。 grant Drop on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="false"); --RAM ユーザーTomに付与された権限を表示します。 show grants for RAM$Bob@aliyun.com:Tom; --次の結果が返されます。DはDeny (拒否) を示します。名前がtb_で始まるテーブルを削除する権限は拒否されます。 Authorization Type: Policy [role/worker] D projects/test_project_a/tables/tb_*: Drop例2:ポリシーベースの権限を取り消す (拒否リスト)
例 1 に基づいて、ユーザー Tom から権限を取り消します。
--test_project_aプロジェクトに切り替えます。 use test_project_a; --RAM ユーザーTomからWorkerロールを取り消します。 revoke Worker from RAM$Bob@aliyun.com:Tom; --RAM ユーザーTomの権限を表示します。Drop権限は権限リストに表示されなくなります。 show grants for RAM$Bob@aliyun.com:Tom;例3:ロールに基づいてユーザーに権限を付与する (許可リスト)
RAM ユーザー Tom が、名前が
tb_で始まるテーブルのデータを更新できるようにします。コマンド例:--test_project_aプロジェクトに切り替えます。 use test_project_a; --Workerという名前のロールを作成します。 create role Worker; --RAM ユーザーTomをプロジェクトメンバーとして追加します。 add user RAM$Bob@aliyun.com:Tom; --RAM ユーザーTomにWorkerロールを割り当てます。 grant Worker TO RAM$Bob@aliyun.com:Tom; --test_project_aプロジェクト内で名前がtb_で始まるテーブルのデータを更新する権限をWorkerロールに許可します。 grant Update on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="true"); --RAM ユーザーTomに付与された権限を表示します。 show grants for RAM$Bob@aliyun.com:Tom; --次の結果が返されます。AはAllow (許可) を示します。名前がtb_で始まるテーブルのデータを更新する権限が付与されます。 Authorization Type: Policy [role/worker] A projects/test_project_a/tables/tb_*: Update例4:ポリシーベースの権限を取り消す (許可リスト)
例 3 に基づいて、ユーザー Tom から権限を取り消します。
--test_project_aプロジェクトに切り替えます。 use test_project_a; --RAM ユーザーTomからWorkerロールを取り消します。 revoke Worker from RAM$Bob@aliyun.com:Tom; --RAM ユーザーTomの権限を表示します。Update権限は権限リストに表示されなくなります。 show grants for RAM$Bob@aliyun.com:Tom;例5:組み込みロールを持つユーザーにきめ細かい権限を付与する
RAM ユーザー Allen が test_project_a プロジェクト内の任意のテーブルを削除する権限を拒否します。コマンド例:
--test_project_aプロジェクトに切り替えます。 use test_project_a; --Workerという名前のロールを作成します。 create role Worker; --RAM ユーザーAllenにWorkerロールを割り当てます。 grant Worker TO RAM$Bob@aliyun.com:Allen; --test_project_aプロジェクト内の任意のテーブルを削除する権限をWorkerロールに拒否します。 grant Drop on table * to ROLE Worker privilegeproperties("policy" = "true", "allow"="false"); --RAM ユーザーAllenに付与された権限を表示します。 show grants for RAM$Bob@aliyun.com:Allen; --次の結果が返されます。任意のテーブルの削除が拒否されます。 [roles] role_project_admin, worker Authorization Type: Policy [role/role_project_admin] A projects/test_project_a: * A projects/test_project_a/instances/*: * A projects/test_project_a/jobs/*: * A projects/test_project_a/offlinemodels/*: * A projects/test_project_a/packages/*: * A projects/test_project_a/registration/functions/*: * A projects/test_project_a/resources/*: * A projects/test_project_a/tables/*: * A projects/test_project_a/volumes/*: * [role/worker] A projects/test_project_a/tables/tb_*: Update D projects/test_project_a/tables/*: Drop Authorization Type: ObjectCreator AG projects/test_project_a/tables/local_test: All AG projects/test_project_a/tables/mr_multiinout_out1: All AG projects/test_project_a/tables/mr_multiinout_out2: All AG projects/test_project_a/tables/ramtest: All AG projects/test_project_a/tables/wc_in: All AG projects/test_project_a/tables/wc_in1: All AG projects/test_project_a/tables/wc_in2: All AG projects/test_project_a/tables/wc_out: All例6:組み込みロールを持つユーザーから権限を取り消す
例 5 に基づいて、ユーザー Allen から権限を取り消します。コマンド例:
--test_project_aプロジェクトに切り替えます。 use test_project_a; --RAM ユーザーAllenからWorkerロールを取り消します。 revoke Worker from RAM$Bob@aliyun.com:Allen; --RAM ユーザーAllenの権限を表示します。Drop権限は権限リストに表示されなくなります。 show grants for RAM$Bob@aliyun.com:Allen;
ユーザーへのロールの付与
ユーザーにロールを付与すると、そのユーザーはそのロールに割り当てられているすべての権限を取得します。
制限事項
ユーザーにロールを付与する前に、まずプロジェクト内のオブジェクトに対する必要な権限をロールに付与する必要があります。詳細については、「ロールまたはユーザーへの権限の付与」をご参照ください。
構文
grant <role_name> to <user_name>;パラメーター
role_name:必須。付与するロールの名前。
user_name:必須。ロールが付与される Alibaba Cloud アカウントまたは RAM ユーザー。Alibaba Cloud アカウントの形式は
ALIYUN$****@aliyun.comで、RAM ユーザーの形式はRAM$****です。
例
-- Alibaba Cloud アカウント test_user@aliyun.com に player ロールを付与します。 grant player to ALIYUN$test_user@aliyun.com;
パッケージアクセスの付与
パッケージがインストールされている MaxCompute プロジェクト内のパッケージへのアクセス権をユーザーまたはロールに付与します。
インストールされたパッケージは、MaxCompute 内の独立したオブジェクトタイプです。パッケージ内のリソースにアクセスするには、そのパッケージに対する Read 権限が必要です。プロジェクト所有者または Super_Administrator もしくは Admin ロールを持つユーザーは、ACLベースのアクセス制御を使用してこの権限を付与できます。
構文
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;利用上の注意
権限を付与した後、ユーザーまたはロールは、パッケージがインストールされているプロジェクト内でのみパッケージ内のリソースにアクセスできます。パッケージの権限をきめ細かく管理するには、「パッケージの権限制御」をご参照ください。
パラメーター
パラメーター
必須
説明
actions
はい
パッケージ内のリソースに対して実行するアクション。このパラメーターは
Readに設定する必要があります。project_name
はい
パッケージがインストールされている MaxCompute プロジェクトの名前。
プロジェクト名を確認するには、MaxCompute コンソールにログインし、左上のコーナーでリージョンを選択して、プロジェクト管理 タブに移動してください。
package_name
はい
パッケージの名前。
作成したすべてのパッケージを一覧表示するには、MaxCompute クライアントで
show packages;を実行してください。name
はい
権限が付与されるユーザーまたはロール。一度に指定できるユーザーまたはロールは 1 つだけです。
ユーザーまたはロールの名前を取得するには、MaxCompute クライアントで
list users;またはlist roles;コマンドを実行してください。例
Bella が Alibaba Cloud アカウント
Amy@aliyun.comに属する RAM ユーザーであるとします。次の例は、Bella にパッケージへのアクセス権を付与する方法を示しています。-- Bella にパッケージへのアクセスを許可します。 grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
関連コマンド
CREATE PACKAGE:パッケージを作成します。
CREATE ROLE:MaxCompute プロジェクトにロールを作成します。
REVOKE:ユーザーまたはロールからパッケージへのアクセス権を取り消します。