MaxCompute でユーザーに組み込みロールが割り当てられている場合、そのユーザーは組み込みロールの権限を持ちます。たとえば、ユーザーに開発ロールが割り当てられている場合、そのユーザーにはテーブルとリソースに対する操作権限が付与されます。実際のビジネス シナリオでは、このようなユーザーの操作権限をきめ細かく管理する必要がある場合があります。たとえば、ユーザーが重要なテーブルを削除することを禁止する必要がある場合があります。このトピックでは、組み込みロールが割り当てられたユーザーに対してポリシーベースの権限管理を実行する方法について説明します。
前提条件
MaxCompute クライアントがインストールされています。詳細については、「MaxCompute クライアントのインストールと構成」をご参照ください。
背景情報
ユーザーに組み込みロールが割り当てられており、そのユーザーの権限をきめ細かく管理する場合は、アクセス コントロール リスト(ACL)メカニズムではなく、ポリシーベースの権限管理メカニズムを使用することをお勧めします。組み込みロールの詳細については、「ユーザーとロール」をご参照ください。ポリシーベースの権限管理メカニズムの詳細については、「ポリシーベースのアクセス制御とダウンロード制御」をご参照ください。
ポリシーベースのアクセス制御メカニズムは、ロールに基づいて権限を管理するために使用されます。このメカニズムにより、プロジェクト オブジェクト(テーブルなど)に対する操作権限をロールに付与または取り消すことができます。操作には、読み取り操作と書き込み操作が含まれます。ユーザーにロールを割り当てると、そのロールに付与または取り消された権限もユーザーに適用されます。GRANT 構文と REVOKE 構文の詳細については、「ポリシーベースのアクセス制御とダウンロード制御」をご参照ください。
ポリシーベースのアクセス制御メカニズムを使用した権限の付与
次の例では、RAM ユーザー Alice に MaxCompute プロジェクトの開発ロールが割り当てられています。RAM ユーザー Alice が、名前が tb_ で始まるすべてのテーブルを削除することを禁止する必要があります。RAM ユーザー Alice は、Alibaba Cloud アカウント Bo*@aliyun.com に属しています。
この操作は、プロジェクト所有者、または Super_Administrator ロールまたは Admin ロールが割り当てられたユーザーのみが実行できます。
CREATE ROLE文を実行して、delete_test という名前のロールを作成します。GRANT文を実行して、delete_test ロールに、名前が tb_ で始まるすべてのテーブルを削除することを禁止する権限を付与します。文の例:
GRANT DROP ON TABLE tb_* TO ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");GRANT 構文の詳細については、「ポリシーベースのアクセス制御とダウンロード制御」の「GRANT 文を使用したポリシーベースのアクセス制御」セクションをご参照ください。
GRANT文を実行して、delete_test ロールを RAM ユーザー Alice に割り当てます。文の例:
GRANT delete_test TO ram$bo*@aliyun.com:Alice;RAM ユーザーが属する Alibaba Cloud アカウントがわからない場合は、MaxCompute クライアントで
LIST USERS;文を実行してアカウントを取得できます。ユーザーにロールを割り当てる方法の詳細については、「ロール計画」をご参照ください。SHOW GRANTS文を実行して、RAM ユーザー Alice の権限を表示します。文の例:
SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;次の結果が返されます。
[roles] role_project_admin, delete_test -- Alice には delete_test ロールが割り当てられています。 Authorization Type: Policy -- 承認方法はポリシーです。 [role/delete_test] D projects/mcproject_name/tables/tb_*: Drop -- Alice は、プロジェクト内の名前が tb_ で始まるテーブルを削除することはできません。D は拒否を示します。 [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: Allユーザー権限の表示方法の詳細については、「MaxCompute SQL を使用した権限のクエリ」をご参照ください。
Alice として MaxCompute クライアントにログオンし、
DROP TABLE文を実行して、名前が tb_ で始まるテーブルを削除します。文の例:
DROP TABLE tb_test;次の結果が返されます。結果は、権限が有効であることを示しています。テーブルが削除された場合、権限は有効になりません。この場合、前の手順が正しく実行されているかどうかを確認する必要があります。
FAILED: Catalog Service Failed, ErrorCode: 50, Error Message: ODPS-0130013:Authorization exception - Authorization Failed [4011], You have NO privilege 'odps:Drop' on {acs:odps:*:projects/mcproject_name/tables/tb_test}. Explicitly denied by policy. Context ID:85efa8e9-40da-4660-bbfd-b503dfa64c0a. --->Tips: Pricipal:RAM$bo*@aliyun.com:Alice; Deny by policy
ポリシーベースのアクセス制御メカニズムを使用した権限の取り消し
ポリシーベースのアクセス制御メカニズムを使用した権限の付与 で説明したように、RAM ユーザー Alice は、名前が tb_ で始まるテーブルを削除することはできません。テーブルが不要になり、RAM ユーザー Alice がテーブルを削除できるようにする場合は、RAM ユーザー Alice から関連する権限を取り消すことができます。
この操作は、プロジェクト所有者、または Super_Administrator ロールまたは Admin ロールが割り当てられたユーザーのみが実行できます。ビジネス要件に基づいて、次のいずれかの方法を使用して、RAM ユーザー Alice から権限を取り消すことができます。
ロールに付与されている権限を取り消し、ロールを保持する
次の手順を実行します。
REVOKE文を実行して、delete_test ロールに付与されている権限を取り消します。これにより、delete_test ロールは、名前が tb_ で始まるテーブルを削除できるようになります。文の例:
REVOKE DROP ON TABLE tb_* FROM ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");REVOKE 構文の詳細については、「ポリシーベースのアクセス制御とダウンロード制御」の「GRANT 文を使用したポリシーベースのアクセス制御」セクションをご参照ください。
SHOW GRANTS文を実行して、RAM ユーザー Alice の権限を表示します。文の例:SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;次の結果が返されます。
[roles] role_project_admin, delete_test -- delete_test ロールは保持されます。 Authorization Type: Policy -- 権限は取り消されます。 [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/tb_test: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: Allユーザー権限の表示方法の詳細については、「MaxCompute SQL を使用した権限のクエリ」をご参照ください。
Alice として MaxCompute クライアントにログオンし、
DROP TABLE文を実行して、名前が tb_ で始まるテーブルを削除します。文の例:
DROP TABLE tb_test;OK が返された場合、権限は取り消されます。
ユーザーからロールを取り消し、必要に応じてロールを削除する
次の手順を実行します。
REVOKE文を実行して、Alice から delete_test ロールを取り消します。文の例:
REVOKE delete_test FROM ram$bo*@aliyun.com:Alice;ユーザーからロールを取り消す方法の詳細については、「ロール計画」をご参照ください。
SHOW GRANTS文を実行して、RAM ユーザー Alice の権限を表示します。文の例:SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;次の結果が返されます。
[roles] role_project_admin -- delete_test ロールは取り消されます。 Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: AllAlice として MaxCompute クライアントにログオンし、
DROP TABLE文を実行して、名前が tb_ で始まるテーブルを削除します。文の例:
DROP TABLE tb_test;OK が返された場合、権限は取り消されます。
オプション。
DROP ROLE文を実行して、delete_test ロールを削除します。文の例:
DROP ROLE delete_test;OK が返された場合、ロールは削除されます。ロールの削除方法の詳細については、「ロール計画」をご参照ください。