GRANT 文を使用して、MaxCompute オブジェクトに対する権限をユーザーまたはロールに付与します。MaxCompute は、次の 2 つのアクセス制御メソッドをサポートしています。
ACL ベースのアクセス制御:ホワイトリストを使用して、既存のオブジェクトに対する権限をユーザーまたはロールに直接付与します。これは、ほとんどのユースケースにおける標準的なメソッドです。
ポリシーベースのアクセス制御:ホワイトリストまたはブラックリストを使用して、ロールに権限を付与します。アクションを明示的に拒否したり、組み込みロールに加えてきめ細かなアクセスを適用したりする必要がある場合に使用します。
ユーザーにロールを割り当てるには、「ユーザーへのロールの付与」をご参照ください。パッケージへのアクセスを付与するには、「パッケージへのアクセスの付与」をご参照ください。
基本概念
| 用語 | 説明 |
|---|---|
| サブジェクト | 権限を付与されるエンティティ。有効な値:USER (Alibaba Cloud アカウントまたは RAM ユーザー) と ROLE。 |
| オブジェクト | 権限が付与される MaxCompute リソース (プロジェクト、テーブル、ビュー、リソース、関数、インスタンスなど)。 |
| アクション | オブジェクトに対して許可される操作 (Select、Describe、Drop、CreateTable など)。完全なリストについては、「MaxCompute の権限」をご参照ください。 |
| Alibaba Cloud アカウント | フォーマット:ALIYUN$<account>。例:ALIYUN$Tanaka@aliyun.com。 |
| RAM ユーザー | 形式: RAM$<親アカウント>:<ユーザー名>。例: RAM$Bob@aliyun.com:Allen。 |
プロジェクト内の既存のユーザーとロールをクエリするには、MaxCompute クライアントで list users; または list roles; を実行します。
ACL ベースのアクセス制御
ACL ベースのアクセス制御は、既存のオブジェクトに対する権限をユーザーまたはロールに付与します。ホワイトリストメカニズムのみを使用するため、アクションを拒否することはできません。
前提条件
権限を付与する前に:
ユーザーアカウントまたはロールがプロジェクトにすでに存在していること。ユーザーまたはロールを追加するには、「ユーザーの計画と管理」または「ロールの計画」をご参照ください。
権限を付与するオブジェクトがすでに存在していること。
制限事項
権限は、既存のサブジェクトに対して、既存のオブジェクトにのみ付与できます。削除されたオブジェクトと同じ名前で作成された新しいオブジェクトは、削除されたオブジェクトの権限を継承しません。
ACL ベースのアクセス制御は
[with grant option]句をサポートしていません。つまり、権限の委任はサポートされていません。ユーザー A がユーザー B にオブジェクトへのアクセスを付与した場合、ユーザー B はそのアクセス権をユーザー C に再付与することはできません。ホワイトリストメカニズムのみがサポートされています。アクションを拒否するには、ポリシーベースのアクセス制御を使用してください。
注意事項
オブジェクトを削除すると、そのオブジェクトに対するすべての 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 つ以上のアクションをカンマで区切って指定します。サポートされているアクションについては、「MaxCompute の権限」をご参照ください。 |
object_type | はい | オブジェクトのタイプ。1 つの文につき 1 つのタイプ。サポートされているタイプについては、「MaxCompute の権限」をご参照ください。 |
object_name | はい | オブジェクトの名前。ワイルドカード (*) は、subject_type が ROLE の場合にのみサポートされます。たとえば、table taobao* は、名前が taobao で始まるすべてのテーブルに一致します。オブジェクト名を取得するには、テーブルまたはビューの場合は show tables;、リソースの場合は list resources;、関数の場合は list functions;、インスタンスの場合は show instances; を実行します。プロジェクト名については、MaxCompute コンソールに移動し、リージョンを選択して、[プロジェクト管理] タブを表示します。 |
column_list | いいえ | 列レベルのアクセス制御のための列名。object_type が table で、特定の列へのアクセスを制御する場合にのみ必要です。複数の列名はカンマで区切ります。列レベルの制御でサポートされている権限:Describe、Select、Alter、Update、Drop、ShowHistory、および All。列に感度レベルが割り当てられている場合は、代わりにラベルベースのアクセス制御を使用してください。 |
subject_type | はい | サブジェクトのタイプ。有効な値:USER (Alibaba Cloud アカウントまたは RAM ユーザー) と ROLE。 |
subject_name | はい | ユーザーまたはロールの名前。1 つの文につき 1 つのサブジェクト。MaxCompute クライアントで list users; または list roles; を実行して名前を取得します。 |
conditions (privilegeproperties 内) | いいえ | リクエスト元やアクセス方法など、アクセス制御の条件。フォーマット:"<var_name> <Operation> Constant" and "<var_name> <Operation> Constant" and ...。有効な値については、「条件」をご参照ください。 |
days (privilegeproperties 内) | いいえ | 権限の有効期間 (日数)。省略した場合、権限は永続的に有効です。MaxCompute は指定された日数が経過すると権限レコードをクリアします。 |
条件
privilegeproperties の conditions を使用して、リクエスト属性に基づくアクセス制限を追加します。
| var_name | タイプ | サポートされている操作 | 説明 |
|---|---|---|---|
acs:UserAgent | STRING | = (StringEquals)、<> (StringNotEquals)、like (StringLike)、not like (StringNotLike) | クライアントのユーザーエージェント |
acs:Referer | STRING | = (StringEquals)、<> (StringNotEquals)、like (StringLike)、not like (StringNotLike) | リクエストの HTTP リファラー |
acs:SourceIp | IP アドレス | in (...) (IpAddress)、not in (...) (NotIpAddress) | クライアントの IP アドレス |
acs:SecureTransport | BOOLEAN | True、False | リクエストが HTTPS などのセキュアチャネル経由で送信されたかどうか |
acs:CurrentTime | DATEANDTIME | = (DateEquals)、<> (DateNotEquals)、< (DateLessThan)、<= (DateLessThanEquals)、> (DateGreaterThan)、>= (DateGreaterThanEquals) | サーバーがリクエストを受信した時刻。ISO 8601 形式:yyyy-MM-ddTHH:mm:ssZ。例:2012-11-11T23:59:59Z。 |
例
以下の例では、Alibaba Cloud アカウント Bob@aliyun.com が所有するプロジェクト test_project_a を使用します。Allen、Alice、および Tom は Bob@aliyun.com の RAM ユーザーです。すべての文は MaxCompute クライアントで実行されます。
例 1:ユーザーにテーブルレベルの権限を付与する
Describe 権限および Select 権限をテーブル sale_detail に対して RAM ユーザー Allen に付与します。
-- プロジェクトに切り替えます
use test_project_a;
-- パーティションテーブルを作成します
create table if not exists sale_detail
(
shop_name string,
customer_id string,
total_price double
)
partitioned by (sale_date string, region string);
-- プロジェクトに Allen を追加します
add user RAM$Bob@aliyun.com: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:ユーザーに列レベルの権限を付与する
sale_detail のカラム shop_name および customer_id に対するすべての権限を、RAM ユーザー Alice に付与します。
例 3:ロールを使用して複数のユーザーに同じ権限を付与する
RAM ユーザー Alice と Tom、および Alibaba Cloud アカウント Lily@aliyun.com に、プロジェクト test_project_a に対する CreateInstance、CreateResource、CreateFunction、CreateTable、および List 権限を付与します。
use test_project_a;
-- プロジェクトにメンバーを追加します
add user RAM$Bob@aliyun.com:Alice;
add user RAM$Bob@aliyun.com:Tom;
add user ALIYUN$Lily@aliyun.com;
-- Worker という名前のロールを作成します
create role Worker;
-- 3 人のメンバー全員にロールを割り当てます
grant Worker TO RAM$Bob@aliyun.com:Alice;
grant Worker TO RAM$Bob@aliyun.com:Tom;
grant Worker TO ALIYUN$Lily@aliyun.com;
-- プロジェクトに対する権限をロールに付与します
grant CreateInstance, CreateResource, CreateFunction, CreateTable, List on project test_project_a TO ROLE Worker;
-- 確認: Lily の権限をクエリします
show grants for ALIYUN$Lily@aliyun.com;
-- 期待される出力:
-- [roles]
-- worker
--
-- Authorization Type: ACL
-- [role/worker]
-- A projects/test_project_a: CreateTable | CreateResource | CreateInstance | CreateFunction | Listポリシーベースのアクセス制御
ポリシーベースのアクセス制御は、ホワイトリスト (allow=true) またはブラックリスト (allow=false) を使用してロールに権限を付与します。ACL ベースのアクセス制御とは異なり、まだ存在しないオブジェクトに適用でき、明示的な拒否ルールをサポートします。
前提条件
権限を付与する前:
ロールがプロジェクトにすでに存在していること。
list roles;を実行して確認します。ロールを作成するには、「ロールの計画」をご参照ください。付与または拒否するオブジェクトタイプとアクションが特定されていること。
制限事項
権限はロールにのみ付与でき、ユーザーに直接付与することはできません。
注意事項
ホワイトリストとブラックリストの両方のルールが適用される場合、ブラックリストが優先されます。
存在しないオブジェクトに対しても権限を付与できます。削除されたオブジェクトが同じ名前で再作成されると、保持されている権限レコードが自動的に適用されるため、セキュリティリスクが生じる可能性があります。
プロジェクトからユーザーを削除しても、そのユーザーのロールベースの権限は保持されます。ユーザーが再度追加された場合、過去の権限が再度有効になります。残留権限をクリアするには、「削除されたユーザーの残留権限情報を完全にクリアする」をご参照ください。
構文
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 つの文につき 1 つのタイプ。 |
object_name | はい | オブジェクトの名前。ワイルドカード (*) がサポートされています。たとえば、table tb_* は、名前が tb_ で始まるすべてのテーブルに一致します。 |
role_name | はい | ロールの名前。1 つの文につき 1 つのロール。MaxCompute クライアントで list roles; を実行して名前を取得します。 |
policy | はい | ポリシーベースのアクセス制御を使用するには true に設定します。 |
allow | 必須 | アクションを許可するかどうか。true はホワイトリストメカニズム (許可) を適用します。false はブラックリストメカニズム (拒否) を適用します。 |
conditions | いいえ | アクセス制御の条件。設定の詳細については、「条件」をご参照ください。 |
days | いいえ | 権限の有効期間 (日数)。省略した場合、権限は永続的に有効です。MaxCompute は指定された日数が経過すると権限レコードをクリアします。 |
例
以下の例では、Alibaba Cloud アカウント Bob@aliyun.com が所有するプロジェクト test_project_a を使用します。Allen および Tom は、Bob@aliyun.com の RAM ユーザーです。RAM ユーザー Allen には、test_project_a の管理者ロールが割り当てられています。すべての文は、MaxCompute クライアントで実行されます。
例 1:ブラックリストメカニズムを使用してアクションを拒否する
ロール Worker (およびそれに割り当てられたユーザー) が、プロジェクト内で名前が tb_ で始まるテーブルを削除することを拒否します。
use test_project_a;
-- Worker という名前のロールを作成します
create role Worker;
-- Tom をプロジェクトに追加し、ロールを割り当てます
add user RAM$Bob@aliyun.com:Tom;
grant Worker TO RAM$Bob@aliyun.com:Tom;
-- マッチするテーブルに対する Drop 操作を拒否します
grant Drop on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
-- 確認: Tom の権限を照会します
show grants for RAM$Bob@aliyun.com:Tom;
-- 期待される出力(D = 拒否):
-- 承認タイプ: ポリシー
-- [role/worker]
-- D projects/test_project_a/tables/tb_*: Drop例 2:拒否ルールを取り消す
ユーザーからロールを削除することで、例 1 の Drop 拒否ルールを取り消します。
use test_project_a;
-- Tom から Worker ロールを取り消す
revoke Worker from RAM$Bob@aliyun.com:Tom;
-- 確認: Tom はもはや Drop 拒否ルールを持っていません
show grants for RAM$Bob@aliyun.com:Tom;例 3:ホワイトリストメカニズムを使用してアクションを許可する
ロール Worker が、プロジェクト内で名前が tb_ で始まるテーブルを更新することを許可します。
use test_project_a;
create role Worker;
add user RAM$Bob@aliyun.com:Tom;
grant Worker TO RAM$Bob@aliyun.com:Tom;
-- 一致するテーブルに対する Update 操作を許可
grant Update on table tb_* to ROLE Worker privilegeproperties("policy" = "true", "allow"="true");
-- 検証: Tom の権限をクエリ
show grants for RAM$Bob@aliyun.com:Tom;
-- 予想される出力 (A = 許可):
-- Authorization Type: Policy
-- [role/worker]
-- A projects/test_project_a/tables/tb_*: Update例 4:許可ルールを取り消す
ユーザーからロールを削除することで、例 3 の Update 許可ルールを取り消します。
use test_project_a;
revoke Worker from RAM$Bob@aliyun.com:Tom;
-- Tom に Update 権限がなくなったことを確認します。
show grants for RAM$Bob@aliyun.com:Tom;例 5:組み込みロールが割り当てられたユーザーを制限する
Allen には、すべての権限を付与する Admin ロールが割り当てられています。ポリシーブラックリストを使用して、Allen がテーブルを削除するのを防ぎます。
use test_project_a;
create role Worker;
grant Worker TO RAM$Tanaka@aliyun.com:Sato;
-- すべてのテーブルに対する Drop アクションを拒否
grant Drop on table * to ROLE Worker privilegeproperties("policy" = "true", "allow"="false");
-- 検証:Sato の権限をクエリ
show grants for RAM$Tanaka@aliyun.com:Sato;
-- 想定される出力:
-- [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:組み込みロールユーザーから制限ルールを取り消す
Drop 拒否ルールを例 5 から取り消すには、Allen からロールを削除します。
USE test_project_a;
REVOKE Worker FROM RAM$Bob@aliyun.com:Allen;
-- 確認: Allen は、Drop 拒否ルールを保持しなくなりました。
SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen;ユーザーへのロールの付与
ロールがユーザーに割り当てられると、ユーザーはそのロールのすべての権限を継承します。
制限事項
ロールをユーザーに割り当てる前に、プロジェクトオブジェクトに対する必要な権限をロールに付与してください。詳細については、「ロールまたはユーザーへの権限付与」をご参照ください。
構文
grant <role_name> to <user_name>;パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
role_name | はい | 割り当てるロールの名前。 |
user_name | はい | ユーザーの名前。Alibaba Cloud アカウントのフォーマット: ALIYUN$**@aliyun.com`. RAM ユーザーのフォーマット: `RAM$**。 |
例
-- player ロールを Alibaba Cloud アカウント test_user@aliyun.com に付与
grant player to ALIYUN$test_user@aliyun.com;パッケージへのアクセスの付与
パッケージは MaxCompute の独立したオブジェクトタイプです。パッケージ内のリソースにアクセスするには、ユーザーまたはロールにそのパッケージに対する Read 権限が必要です。プロジェクトの所有者、および Super_Administrator または Admin ロールが割り当てられたユーザーは、アクセス制御リスト (ACL) を使用してこの権限を付与できます。
構文
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;注意事項
Read 権限が付与された後、ユーザーまたはロールはパッケージがインストールされているプロジェクト内でのみパッケージリソースにアクセスできます。きめ細かなパッケージ権限管理については、「パッケージのアクセス制御」をご参照ください。
パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
actions | はい | Read に設定します。 |
project_name | はい | パッケージが属する MaxCompute プロジェクトの名前。プロジェクト名を取得するには、MaxCompute コンソールに移動し、リージョンを選択して、[プロジェクト管理] タブを表示します。 |
package_name | はい | パッケージの名前。MaxCompute クライアントで show packages; を実行してパッケージをリスト表示します。 |
name | はい | アクセスを付与するユーザーまたはロールの名前。1 つの文につき 1 つのサブジェクト。list users; または list roles; を実行して名前を取得します。 |
例
Bella は、Alibaba Cloud アカウント Amy@aliyun.com の RAM ユーザーです。Bella にパッケージ datashare へのアクセスを付与します。
grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;次のステップ
CREATE PACKAGE:パッケージを作成します。
CREATE ROLE:MaxCompute プロジェクトにロールを作成します。
REVOKE:ユーザーまたはロールからアクセス権限を取り消します。