MaxCompute は、複雑で柔軟な権限設定のためのポリシーベースのアクセス制御メソッドを提供します。このメソッドは、詳細な制御を必要とする大企業や複雑なシナリオに最適です。アクセス制御リスト (ACL) 権限付与とは異なり、ポリシーベースのアクセス制御はブラックリストもサポートします。この機能を使用すると、特定のオブジェクトに対して特定の操作を実行する権限をロールに付与または拒否するポリシーを作成できます。ロールをユーザーにアタッチすると、ロールの権限が有効になります。このトピックでは、MaxCompute がサポートするポリシー承認コマンドと承認の例について説明します。
背景情報
ポリシーベースのアクセス制御は、ホワイトリストとブラックリストの権限付与をサポートします。特定のオブジェクトに対して特定の操作を実行する権限をロールに付与 (ホワイトリスト) または拒否 (ブラックリスト) できます。
このアクセス制御メソッドは、ACL ベースのアクセス制御では解決できない権限付与の問題を解決します。たとえば、ユーザーに開発者ロールが割り当てられ、デフォルトでテーブルを削除する権限があるとします。ロールがテーブルを削除するのを拒否したい場合は、このアクセス制御メソッドを使用できます。
MaxCompute プロジェクトが作成されると、ポリシーベースのアクセス制御はデフォルトで有効になります。プロジェクトオーナーは、MaxCompute プロジェクトで set CheckPermissionUsingPolicy=true|false; コマンドを実行して、この機能を有効または無効にできます。
ポリシーベースのアクセス制御は、次のシナリオに適用されます。
シナリオ | 説明 | 承認者 | 権限付与エンドポイント |
ロールに基づいてユーザーに権限を付与する | 特定のオブジェクトに対する 1 つ以上の操作を許可または拒否する権限をロールに付与します。次に、そのロールを複数のユーザーにアタッチします。ユーザーはロールの権限を継承します。 | MaxCompute の権限の 承認者 列をご参照ください。 | |
組み込みロールを持つユーザーに対して、カスタムロールを使用して詳細な権限付与を行う | ユーザーにすでに組み込みロールが割り当てられており、その権限をより詳細に制御する必要がある場合、ACL 権限付与では不十分です。この場合、ポリシーベースのアクセス制御を使用して新しいロールを作成します。その後、プロジェクトオブジェクトに対する操作を実行する権限をロールに付与または拒否し、そのロールをユーザーにアタッチして、詳細な権限管理を行うことができます。 |
範囲
ポリシーベースのアクセス制御機能を使用する前に、その前提条件、制限、および注意事項に注意してください。
前提条件:
ポリシーベースのアクセス制御は、既存のロールに対する権限付与のみをサポートします。権限を付与するロールの名前を確認し、そのロールが MaxCompute プロジェクトに追加されていることを確認してください。MaxCompute クライアントで
list roles;コマンドを実行して、ロール情報を取得できます。新しいロールを作成するには、「ロール計画」をご参照ください。オブジェクトタイプ、オブジェクト名、および権限を付与する操作。
オブジェクトタイプと操作の詳細については、「MaxCompute の権限」をご参照ください。
注意事項:
ホワイトリストとブラックリストの両方の権限付与が設定されている場合、ブラックリストが優先されます。
ポリシーベースのアクセス制御では、存在しないオブジェクトに権限を付与できます。オブジェクトを削除しても、関連付けられたポリシー承認情報は削除されません。承認者は、同じ名前のオブジェクトを削除してから再作成することで発生する可能性のあるセキュリティリスクを認識している必要があります。
ユーザーが削除された後も、そのユーザーに付与された権限は保持されます。ユーザーが再度プロジェクトに追加されると、そのユーザーの過去のアクセス権限が再度有効になります。削除されたユーザーの残存権限情報をクリアする方法の詳細については、「削除されたユーザーの残存権限情報を完全にクリアする」をご参照ください。
コマンドのフォーマット
ポリシーベースのアクセス制御コマンドのフォーマットは次のとおりです:
ポリシーの権限付与
GRANT <actions> ON <object_type> <object_name> TO ROLE <role_name> PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>"]);ポリシーの権限付与の取り消し
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 | はい | 権限を付与するオブジェクトの名前。名前は次のいずれかの方法で取得できます:
権限付与オブジェクトには、ワイルドカード文字としてアスタリスク (*) を使用できます。たとえば、 説明 アスタリスク (*) をワイルドカード文字として使用できるのは、ROLE に権限を付与する場合のみです。USER に権限を付与する場合は、ワイルドカード文字を使用できません。 | |
role_name | はい | 権限を付与するロールの名前。1 つのコマンドで指定できるロールは 1 つだけです。 MaxCompute クライアントで | |
privilegeproperties | policy | はい | 値を true に設定します。これは、ポリシーベースのアクセス制御メソッドが使用されることを示します。 |
allow | ホワイトリスト権限付与に必須 | 権限付与メカニズムを指定します。有効な値:
| |
conditions | いいえ | リクエストメッセージのソースやアクセス方法などのディメンションに基づいて権限を制御します。有効な値の詳細については、「条件」をご参照ください。 | |
ポリシーベースのアクセス制御の例
Bob@aliyun.com が test_project_a プロジェクトのオーナーであり、Allen と Tom が Bob@aliyun.com アカウントの Resource Access Management (RAM) ユーザーであると仮定します。Allen には test_project_a プロジェクトの Admin ロールが割り当てられています。次の例は、MaxCompute クライアントで権限付与操作を実行する方法を示しています:
例 1: ロールに基づいてユーザーに権限を付与する (ブラックリスト)
tb_で始まるテーブルを Tom が削除するのを拒否します。次の例は、コマンドを使用してポリシー承認を実装する方法を示しています:
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Worker ロールを作成します。 CREATE ROLE Worker; -- ユーザー Tom をプロジェクトメンバーとして追加します。 ADD USER RAM$Bob@aliyun.com:Tom; -- Worker ロールをユーザー Tom にアタッチします。 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"); -- ユーザー 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次の例は、コンソールでポリシー承認を実装する方法を示しています:
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
[プロジェクト] ページで、ターゲットプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールを作成] をクリックします。
[ロールの作成] ダイアログボックスで、リソースロールを作成し、[ロール名] を入力して、権限付与ポリシーを定義します。
以下はサンプルポリシーです:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }[ロール権限] タブで、新しいロールの [操作] 列にある [メンバーの管理] をクリックし、
RAM$Bob@aliyun.com:Tomをロールに追加します。
例 2: ポリシーの権限付与を取り消す (ブラックリスト)
例 1 に基づいて、ユーザー Tom から権限付与を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 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: ロールに基づいてユーザーに権限を付与する (ホワイトリスト)
tb_で始まるテーブルのデータを Tom が更新できるようにします。次の例は、コマンドを使用してポリシー承認を実装する方法を示しています:
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Worker ロールを作成します。 CREATE ROLE Worker; -- ユーザー Tom をプロジェクトメンバーとして追加します。 ADD USER RAM$Bob@aliyun.com:Tom; -- Worker ロールをユーザー Tom にアタッチします。 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"); -- ユーザー 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次の例は、コンソールでポリシー承認を実装する方法を示しています:
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
[プロジェクト] ページで、ターゲットプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールを作成] をクリックします。
[ロールの作成] ダイアログボックスで、リソースロールを作成し、[ロール名] を入力して、権限付与ポリシーを定義します。
以下はサンプルポリシーです:
{ "Statement":[ { "Action":[ "odps:Update" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/tb_*" ] } ], "Version":"1" }[ロール権限] タブで、新しいロールの [操作] 列にある [メンバーの管理] をクリックし、
RAM$Bob@aliyun.com:Tomをロールに追加します。
例 4: ポリシーの権限付与を取り消す (ホワイトリスト)
例 3 に基づいて、ユーザー Tom から権限付与を取り消します。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- ユーザー Tom から Worker ロールを取り消します。 REVOKE Worker FROM RAM$Bob@aliyun.com:Tom; -- ユーザー Tom の権限付与結果を表示します。権限リストには Update 権限情報が含まれていません。 SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;例 5: 組み込みロールを持つユーザーに詳細な権限付与を実行する
test_project_a プロジェクト内のすべてのテーブルを Allen が削除するのを拒否します。
次の例は、コマンドを使用してポリシー承認を実装する方法を示しています:
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Worker ロールを作成します。 CREATE ROLE Worker; -- Worker ロールをユーザー Allen にアタッチします。 GRANT Worker TO RAM$Bob@aliyun.com:Allen; -- test_project_a プロジェクト内のすべてのテーブルを Worker ロールが削除するのを拒否します。 GRANT Drop ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false"); -- ユーザー 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 -- AG の A は Allow を示します。AG の G は With Grant Option を示し、オブジェクトに対する権限を付与できます。 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次の例は、コンソールでポリシー承認を実装する方法を示しています:
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
[プロジェクト] ページで、ターゲットプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールを作成] をクリックします。
[ロールの作成] ダイアログボックスで、リソースロールを作成し、[ロール名] と権限付与ポリシーを指定します。
以下はサンプルポリシーです:
{ "Statement":[ { "Action":[ "odps:Drop" ], "Effect":"Deny", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }[ロール権限] タブで、新しいロールの [操作] 列にある [メンバーの管理] をクリックし、
RAM$Bob@aliyun.com:Allenをロールに追加します。
例 6: 組み込みロールを持つユーザーの権限付与を取り消す
例 5 に基づいて、ユーザー Allen から権限付与を取り消します。以下はサンプルコマンドです。
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- ユーザー Allen から Worker ロールを取り消します。 REVOKE Worker FROM RAM$Bob@aliyun.com:Allen; -- ユーザー Allen の権限付与結果を表示します。権限リストには Drop 権限情報が含まれていません。 SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen;例 7: ロールに基づいてユーザー (Tom) にすべてのテーブルをクエリする権限を付与する (ホワイトリスト)
次の例は、コマンドを使用してポリシー承認を実装する方法を示しています:
-- Bob が test_project_a プロジェクトに入ります。 USE test_project_a; -- Worker ロールを作成します。 CREATE ROLE Worker; -- ユーザー Tom をプロジェクトメンバーとして追加します。 ADD USER RAM$Bob@aliyun.com:Tom; -- Worker ロールをユーザー Tom にアタッチします。 GRANT Worker TO RAM$Bob@aliyun.com:Tom; -- test_project_a プロジェクト内のすべてのテーブルを Worker ロールがクエリできるようにします。 GRANT Describe,Select ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true"); -- ユーザー Tom の権限付与結果を表示します。 SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; -- 次の権限付与結果が返されます。A は Allow を示します。test_project_a プロジェクト内のすべてのテーブルをクエリできます。 Authorization Type: Policy [role/worker] A projects/test_project_a/tables/*: Describe | Select次の例は、コンソールでポリシー承認を実装する方法を示しています:
MaxCompute コンソールにログインし、左上隅でリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
[プロジェクト] ページで、ターゲットプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールを作成] をクリックします。
[ロールの作成] ダイアログボックスで、ロールタイプをリソースに設定し、[ロール名] を指定し、権限付与メソッドをポリシーに設定します。
以下はサンプルポリシーです:
{ "Statement":[ { "Action":[ "odps:Describe", "odps:Select" ], "Effect":"Allow", "Resource":[ "acs:odps:*:projects/test_project_a/tables/*" ] } ], "Version":"1" }[ロール権限] タブで、新しいロールの [操作] 列にある [メンバーの管理] をクリックし、
RAM$Bob@aliyun.com:Tomをロールに追加します。
次のステップ
ポリシー承認メカニズムを理解したら、必要に応じて次の権限付与操作を実行できます:
ポリシー承認メカニズムの詳細については、次のトピックをご参照ください。
ポリシーベースのアクセス制御の権限付与プラクティスの詳細については、「ポリシーベースのアクセス制御プラクティス」をご参照ください。
組み込みロールを持つユーザーの操作権限をより詳細に管理するには、「ポリシーに基づいて組み込みロールを持つユーザーの権限を管理する」をご参照ください。
MaxCompute の権限管理に関するよくある質問については、「権限管理に関する FAQ」をご参照ください。