MaxCompute では、ACL ベースのアクセス制御方式またはポリシーベースのアクセス制御方式を用いて、特定のオブジェクトに対する指定された操作権限をユーザーまたはロールから取り消すことができます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
-
権限を取り消す対象となるユーザーのアカウントまたはロール名。該当のユーザーまたはロールは、すでに MaxCompute プロジェクトに追加済みである必要があります。MaxCompute クライアントで
list users;またはlist roles;コマンドを実行して、アカウント名またはロール名を確認します。ユーザーまたはロールの追加方法については、「ユーザー計画と管理」および「ロール計画」をご参照ください。-
Alibaba Cloud アカウントの形式:
ALIYUN$<Alibaba Cloud アカウント> -
RAM ユーザーの形式:
RAM$<Alibaba Cloud アカウント>:<RAM ユーザー名>
-
-
権限を取り消す対象のオブジェクトタイプ、オブジェクト名、および操作。サポートされるオブジェクトタイプおよび操作については、「MaxCompute の権限」をご参照ください。
権限を取り消すことができるユーザー
-
ラベルベースの権限取り消し:プロジェクトの所有者、または Admin ロールが割り当てられたユーザー。
制限事項
ACL ベースのアクセス制御:
-
既存のオブジェクトおよび既存のサブジェクトに対してのみ権限を取り消すことができます。オブジェクトを削除して同名の新しいオブジェクトを作成した場合、新規オブジェクトは削除されたオブジェクトの権限を継承しません。
-
WITH GRANT OPTION句はサポートされていません。ユーザー A がユーザー B にオブジェクトへのアクセスを許可した場合、ユーザー B はそのアクセス権限をユーザー C に再許可できません。 -
ACL ベースのアクセス制御はホワイトリスト方式のみを採用しており、オブジェクトに対する操作の拒否(deny)は行えません。
ポリシーベースのアクセス制御:
-
権限は既存のロールに対してのみ付与できます。
注意事項
ACL ベースのアクセス制御:
-
オブジェクトを削除すると、そのオブジェクトに対して ACL で付与されたすべての権限が自動的に取り消されます。
-
ユーザーがプロジェクトから削除されると、そのユーザーの権限は保持されます。ユーザーが再び追加された場合、そのユーザーの過去の権限が復元されます。残存する権限データをクリアするには、「削除されたユーザーの残存する権限情報を完全にクリアする」をご参照ください。
ポリシーベースのアクセス制御:
-
まだ存在しないオブジェクトに対してもポリシーベースの権限を付与できます。許可されたオブジェクトが削除された場合、権限レコードは保持されます。同名のオブジェクトを再作成すると、これらの権限が復元されるため、セキュリティリスクを引き起こす可能性があります。
-
ユーザーが削除されると、権限は保持され、ユーザーが再追加された場合に復元されます。残存する権限データをクリアするには、「削除されたユーザーの残存する権限情報を完全にクリアする」をご参照ください。
ACL ベースまたはポリシーベースの権限の取り消し
構文
ACL ベース:
revoke <actions> on <object_type> <object_name>
[(<column_list>)] from <subject_type> <subject_name>;
ポリシーベース:
revoke <actions> on <object_type> <object_name>
from ROLE <role_name>
privilegeproperties ("policy" = "true", "allow"="{true|false}");
パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
actions |
はい | 取り消す操作をカンマ区切りで 1 つ以上指定します。サポートされる操作については、「MaxCompute の権限」をご参照ください。 |
object_type |
はい | オブジェクトのタイプです。1 つの文では 1 つのタイプのみ指定できます。サポートされるタイプについては、「MaxCompute の権限」をご参照ください。 |
object_name |
はい | オブジェクトの名前です。subject_type が ROLE の場合に限り、ワイルドカードマッチングとしてアスタリスク (*) を使用できます(例: table 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; |
role_name |
はい(ポリシーベース) | 権限を取り消す対象のロール名です。1 つの文では 1 つのロールのみ指定できます。list roles; コマンドを実行して、ロール名を確認します。 |
privilegeproperties → policy |
はい(ポリシーベース) | ポリシーベースのアクセス制御を使用する場合は true に設定します。 |
privilegeproperties → allow |
ホワイトリストの場合に必須 | 操作を許可するかどうかを指定します。true の場合、操作を許可(ホワイトリスト)します。false の場合、操作を拒否(ブラックリスト)します。 |
実行環境
-
これらの文は MaxCompute クライアント 上で実行します。
実行例
以下の例では、Alibaba Cloud アカウント Bob@aliyun.com が所有するプロジェクト test_project_a を使用します。Allen、Alice、および Tom は、Bob@aliyun.com 配下の RAM ユーザーです。すべての文は MaxCompute クライアントで実行されます。
例 1:ユーザーからの列レベル権限の取り消し
次の例では、sale_detail の 2つの列に対する Describe 権限および Select 権限を Allen から取り消し、それらの列に対するすべての権限を Alice から取り消します。
-- test_project_a プロジェクトに切り替えます。
use test_project_a;
-- Allen から shop_name および customer_id に対する Describe および Select 権限を取り消します。
revoke Describe, Select on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Allen;
-- Alice から shop_name および customer_id に対するすべての権限を取り消します。
revoke All on table sale_detail (shop_name, customer_id) from USER RAM$Bob@aliyun.com:Alice;
-- 確認: Allen には Describe および Select 権限がなくなりました。
show grants for RAM$Bob@aliyun.com:Allen;
-- 確認: Alice にはこれらの列に対する権限がなくなりました。
show grants for RAM$Bob@aliyun.com:Alice;
例 2:複数のユーザーからロールの割り当てを解除
次の例では、Worker ロールを Alice、Tom、および Lily@aliyun.com から削除します。各ユーザーには、個別の文が必要です。
-- test_project_a プロジェクトに切り替えます。
use test_project_a;
-- Alice から Worker ロールを取り消します。
revoke Worker from RAM$Bob@aliyun.com:Alice;
-- Tom から Worker ロールを取り消します。
revoke Worker from RAM$Bob@aliyun.com:Tom;
-- Lily@aliyun.com から Worker ロールを取り消します。
revoke Worker from ALIYUN$Lily@aliyun.com;
-- 確認: Lily@aliyun.com は Worker ロールの権限を持っていません。
show grants for ALIYUN$Lily@aliyun.com;
パッケージ権限の取り消し
パッケージがインストールされている MaxCompute プロジェクト内で、ユーザーまたはロールのパッケージへのアクセス権限を取り消します。
構文
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;
パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
actions |
はい | Read を指定します。 |
project_name |
はい | パッケージが属する MaxCompute プロジェクトです。MaxCompute コンソールにアクセスし、リージョンを選択した後、プロジェクト管理 タブでプロジェクト名を確認します。 |
package_name |
はい | パッケージの名前です。show packages; コマンドを MaxCompute クライアント で実行して、パッケージ名を確認できます。 |
name |
はい | アクセス権限を取り消す対象のアカウントまたはロール名です。1 つの文では 1 つのサブジェクトのみ指定できます。list users; または list roles; コマンドを実行して、名前を確認します。 |
実行例
次の例では、Bella の datashare パッケージへの読み取りアクセスを取り消します。
revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;
ラベルベースの権限の取り消し
プロジェクトの所有者または Admin ロールが割り当てられたユーザーが、ユーザーまたはロールに対して明示的に付与されたラベルベースの権限を取り消します。
構文
revoke Label on table <table_name> [(<column_list>)] from {USER|ROLE} <name>;
注意事項
-
テーブルに対するラベルベースの権限を取り消すと、そのテーブル内のすべての列レベルラベル権限も同時に取り消されます。
-
明示的なラベル権限を取り消しても、ユーザーまたはロールのアクセスレベルラベルは変更されません。たとえば、ユーザーのアクセスレベルが 2 であり、感度レベル 3 までのデータアクセスを許可する明示的なラベル権限を取り消した場合でも、ユーザーは依然として感度レベル 2 以下のデータにアクセスできます。
パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
table_name |
はい | テーブルまたはビューの名前です。show tables; コマンドを実行して、名前を確認します。 |
column_list |
いいえ | ラベル権限を取り消す対象の列名をカンマ区切りで指定します。機密性の高い特定の列を対象とする場合に使用します。 |
name |
はい | ユーザーのアカウント名またはロール名です。list users; または list roles; コマンドを実行して、名前を確認します。 |
実行例
次の例では、Allen が sale_detail の機密データに対して明示的に付与されたアクセス権限を取り消します。このテーブルには、shop_name、customer_id、および total_price の各列があります。Allen は Bob@aliyun.com の下の RAM ユーザーです。
-- 特定の列に対するラベル権限を取り消します。
revoke Label on table sale_detail(shop_name, customer_id, total_price) from USER RAM$Bob@aliyun.com:Allen;
-- Allen の現在のラベル付与を表示します。
show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen;
-- 出力: Allen のアクセスレベルは 1 です。total_price には依然としてレベル 3 の明示的な付与があります。
-- ユーザー ラベル: 1
-- +-------------+--------------+--------------------------+
-- | Column | GrantedLabel | Expires |
-- +-------------+--------------+--------------------------+
-- | total_price | 3 | 2021-12-31T19:56:18+0800 |
-- +-------------+--------------+--------------------------+
-- テーブルレベルのすべてのラベル権限を取り消します。
revoke Label on table sale_detail from USER RAM$Bob@aliyun.com:Allen;
-- Allen の付与を再度表示します。
show label grants on table sale_detail for USER RAM$Bob@aliyun.com:Allen;
-- 出力: ユーザー ラベル: 1
ユーザーをロールから削除
構文
revoke <role_name> from <user_name>;
パラメーター
-
role_name:ユーザーを削除する対象のロール名。 -
user_name:削除対象の Alibaba Cloud アカウントまたは RAM ユーザー。Alibaba Cloud アカウントの形式はALIYUN$<account>@aliyun.com、RAM ユーザーの形式はRAM$<account>です。
実行例
次の例では、alice@aliyun.com を プレーヤー ロールから削除します。
revoke player from ALIYUN$alice@aliyun.com;
関連する文
-
GRANT:ACL ベースのアクセス制御方式を用いて、ユーザーまたはロールにオブジェクトに対する権限を付与します。
-
SET LABEL:ユーザーまたはロールのアクセスレベルラベル、およびテーブルまたは列のデータの感度レベルラベルを設定します。
-
CREATE ROLE:MaxCompute プロジェクト内にロールを作成します。
-
CREATE PACKAGE:パッケージを作成します。