MaxComputeプロジェクトのデータのセキュリティを確保するには、プロジェクトの所有者または承認機能を持つユーザーが、プロジェクトのメンバーの権限を管理する必要があります。 このトピックでは、MaxComputeでのアクセス許可の管理について説明します。
ポリシーベースのアクセス制御ケース
特定のロールを持つユーザーがポリシーに基づいて操作を実行できるようにする
シナリオの説明
特定のプロジェクトメンバーには、テーブルの作成、リソースファイルのアップロード、関数の作成、および名前が
t_app_で始まるテーブルの読み取りタスクの実行権限が付与されます。手順
MaxComputeクライアントの使用
ロールを作成します。
create role <role_name>;role_nameパラメーターは、ロールの名前を指定します。
ポリシースクリプトを準備し、MaxComputeクライアントファイルが配置されている
binディレクトリにスクリプトファイルを配置します。 スクリプトファイルの名前はpolicy_1.jsonで、次の内容が含まれています。{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"}project_nameパラメーターは、MaxComputeプロジェクトの名前を指定します。
必要な権限を付与します。
-- Grant permissions to the created role. put policy policy_1.json on role <role_name>; -- Assign the role to the specified user. grant <role_name> to <user_name>;user_nameパラメーターは、ロールを割り当てるアカウントを指定します。 Alibaba Cloudアカウントの場合、形式は
ALIYUN$Alibaba Cloudアカウントです。 RAMユーザーの場合、形式はRAM$Alibaba Cloud account:RAM usernameです。
MaxComputeコンソールの使用
MaxComputeコンソールにログインします。 上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークエリア] > [プロジェクト管理] を選択します。
[プロジェクト管理] ページで目的のプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールの作成] をクリックします。
[ロールの作成] ダイアログボックスで、[ロールの種類] ドロップダウンリストから [リソース] を選択し、[ロール名] パラメーターを設定してから、[権限付与方法のポリシー] を選択します。
次のポリシードキュメントを入力します。
{ "Statement": [ { "Action": ["odps:List", "odps:CreateTable", "odps:CreateInstance", "odps:CreateResource", "odps:CreateFunction"], "Effect": "Allow", "Resource": ["acs:odps:*:projects/<project_name>"]}, { "Action": ["odps:*"], "Effect": "Allow", "Resource": [ "acs:odps:*:projects/<project_name>/tables/t_app_*", "acs:odps:*:projects/<project_name>/registration/functions/*", "acs:odps:*:projects/<project_name>/instances/*", "acs:odps:*:projects/<project_name>/resources/*"]}], "Version": "1"}[ロールの権限] タブで、作成したロールを見つけ、[操作] 列の [メンバーの管理] をクリックして、Alibaba CloudアカウントまたはRAMユーザーをロールに追加します。
特定のロールを持つユーザーがポリシーに基づいて操作を実行することを禁止
シナリオの説明: 名前が
tb_で始まるテーブルのアクセス制御が重要です。 一部のアカウントはテーブルを削除できません。 アクセス制御はポリシーに基づいて実装されます。手順
MaxComputeクライアントの使用
ロールを作成します。
create role <role_name>;role_nameパラメーターは、ロールの名前を指定します。
ポリシースクリプトを準備し、MaxComputeクライアントファイルが配置されている
binディレクトリにスクリプトファイルを配置します。 スクリプトファイルの名前はpolicy_2.jsonで、次の内容が含まれています。{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] }project_nameパラメーターは、MaxComputeプロジェクトの名前を指定します。
必要な権限を付与します。
-- Grant permissions to the created role. put policy policy_2.json on role <role_name>; -- Assign the role to the specified user. grant <role_name> to <user_name>;user_nameパラメーターは、ロールを割り当てるアカウントを指定します。 Alibaba Cloudアカウントの場合、形式は
ALIYUN$Alibaba Cloudアカウントです。 RAMユーザーの場合、形式はRAM$Alibaba Cloud account:RAM usernameです。
MaxComputeコンソールの使用
MaxComputeコンソールにログインします。 上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークエリア] > [プロジェクト管理] を選択します。
[プロジェクト管理] ページで目的のプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールの作成] をクリックします。
[ロールの作成] ダイアログボックスで、[ロールの種類] ドロップダウンリストから [リソース] を選択し、[ロール名] パラメーターを設定してから、[権限付与方法のポリシー] を選択します。
次のポリシードキュメントを入力します。
{ "Version": "1", "Statement": [{ "Effect": "Deny", "Action": "odps:Drop", "Resource": "acs:odps:*:projects/<project_name>/tables/tb_*" }] }[ロールの権限] タブで、作成したロールを見つけ、[操作] 列の [メンバーの管理] をクリックして、Alibaba CloudアカウントまたはRAMユーザーをロールに追加します。
ポリシーに基づいてロールに権限を付与する
シナリオの説明
アカウント
a **** @ aliyunid.comは、2018-11-11 23:59:59より前に、CIDRブロック10.32.180.0/23を使用してリクエストを送信する権限があります。 アカウントには、test_projectという名前のプロジェクトに対するCreateInstance、CreateTable、およびList権限が付与され、test_projectプロジェクトにテーブルをドロップすることはできません。手順
MaxComputeクライアントの使用
ロールを作成します。
create role policy_3;ポリシースクリプトを準備し、MaxComputeクライアントファイルが配置されている
binディレクトリにスクリプトファイルを配置します。 スクリプトファイルの名前はpolicy_3.jsonで、次の内容が含まれています。{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2018-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] }project_nameパラメーターは、MaxComputeプロジェクトの名前を指定します。
必要な権限を付与します。
-- Grant permissions to the created role. put policy policy_3.json on role policy_3; -- Assign the role to the specified user. grant policy_3 to ALIYUN$a****@aliyunid.com;
MaxComputeコンソールの使用
MaxComputeコンソールにログインします。 上部のナビゲーションバーで、リージョンを選択します。
左側のナビゲーションウィンドウで、[ワークエリア] > [プロジェクト管理] を選択します。
[プロジェクト管理] ページで目的のプロジェクトを見つけ、[操作] 列の [管理] をクリックします。
[ロール権限] タブで、[プロジェクトレベルのロールの作成] をクリックします。
[ロールの作成] ダイアログボックスで、[ロールの種類] ドロップダウンリストから [リソース] を選択し、[ロール名] パラメーターを設定してから、[権限付与方法のポリシー] を選択します。
次のポリシードキュメントを入力します。
{ "Version": "1", "Statement": [{ "Effect":"Allow", "Action":["odps:CreateTable","odps:CreateInstance","odps:List"], "Resource":"acs:odps:*:projects/<project_name>", "Condition":{ "DateLessThan": { "acs:CurrentTime":"2018-11-11T23:59:59Z" }, "IpAddress": { "acs:SourceIp":"10.32.180.0/23" } } }, { "Effect":"Deny", "Action":"odps:Drop", "Resource":"acs:odps:*:projects/<project_name>/tables/*" }] }[ロールの権限] タブで、作成したロールを見つけ、[操作] 列の [メンバーの管理] をクリックして、Alibaba CloudアカウントまたはRAMユーザーをロールに追加します。
パッケージベースのアクセス制御ケース
パッケージに基づくプロジェクト間のリソースへのアクセス
シナリオの説明
ビジネスアナリストは生産テーブルを表示する必要がありますが、生産タスクコードを表示することはできません。 複数の生産プロジェクトの一部のテーブルにアクセスする権限は、ビジネスアナリストに付与する必要があります。
解決策
このシナリオでは、別の分析プロジェクトを作成します。 実稼働プロジェクトでパッケージを作成し、パッケージにアクセスする必要があるテーブルを追加したり、分析プロジェクトにパッケージをインストールしたり、分析者にパッケージに対する権限を付与したりできます。 この操作は、複数の運用プロジェクトで実行できます。 これにより、メンバー管理コストが削減され、すべての生産プロジェクトにアナリストを追加する必要がなくなり、これらのアナリストが分析プロジェクトの特定の生産テーブルのみを表示できるようになります。
この例では、Package_testという名前のパッケージがProject_aという名前の本番プロジェクトで作成され、table_aという名前の本番テーブルがパッケージに追加されます。 パッケージはProject_analyzeという名前の分析プロジェクトにインストールされ、A ***** @ aliyunid.comアカウントを使用するアナリストは、パッケージ内のtable_aテーブルのデータを照会する権限を与えられます。
手順
本番プロジェクトでパッケージを作成します。
USE Project_a; CREATE PACKAGE Package_test;共有するリソースを本番プロジェクトのパッケージに追加します。
ADD table table_a TO PACKAGE Package_test;分析プロジェクトで、本番プロジェクトで作成されたパッケージを使用できるようにします。
ALLOW PROJECT Project_analyze TO INSTALL PACKAGE Package_test;分析プロジェクトにパッケージをインストールします。
USE Project_analyze; INSTALL PACKAGE Project_a.Package_test;アナリストが使用するアカウントに、パッケージに必要な権限を付与します。
GRANT read on package Package_test TO USER ALIYUN$A*****@aliyunid.com;テーブルからデータを照会します。 このステップは分析者によって実行される。
select * from Project_a.table_a;
パッケージに基づくAlibaba Cloudアカウント間のリソースへのアクセス
シナリオの説明
同じ企業では、内部コストやその他のビジネス要件により、異なる部門が異なるAlibaba Cloudアカウントを使用してMaxComputeを有効化します。 ただし、部門間のデータ交換が必要です。 データセキュリティ上の懸念から、異なるプロジェクトのパッケージユーザーはプロバイダーの特定のテーブルのデータのみを読み取ることができます。 したがって、さまざまなAlibaba Cloudアカウントのデータ権限の詳細な管理が必要です。
説明Alibaba CloudアカウントのRAMユーザーは、別のAlibaba CloudアカウントのMaxComputeプロジェクトに追加できません。 たとえば、Alibaba CloudアカウントBのRAMユーザーは、Alibaba CloudアカウントAが所有するプロジェクトに追加できません。
テーブル、リソース、および関数に対する読み取り権限のみを付与する場合は、パッケージを使用して、さまざまなAlibaba Cloudアカウントのプロジェクト間でリソースを共有できます。
解決策
Project_aとProject_bという2つのプロジェクトが利用可能です。 Project_aプロジェクトはAlibaba CloudアカウントAが所有しています。project_aプロジェクトの
t1およびt2テーブルの読み取り権限は、Alibaba CloudアカウントBのRAMユーザーb_user1に付与する必要があります。Project_aプロジェクトのt3テーブルの読み取り権限は、Alibaba CloudアカウントbのRAMユーザーb_user2に付与する必要があります。重要認証後、Alibaba Cloudアカウント間でデータを交換できます。 ただし、DataWorksコンソールでMaxComputeを使用する場合、異なるAlibaba CloudアカウントのDataWorksワークエリアのタスク間のスケジューリング依存関係を設定することはできません。
手順
Alibaba CloudアカウントAを使用してProject_aプロジェクトを入力し、
a_to_b_pkgという名前のパッケージを作成します。 Project_aプロジェクトのt1、t2、およびt3テーブルをa_to_b_pkgパッケージに追加します。
USE Project_a; CREATE PACKAGE a_to_b_pkg; ADD table t1 TO PACKAGE a_to_b_pkg; ADD table t2 TO PACKAGE a_to_b_pkg; ADD table t3 TO PACKAGE a_to_b_pkg;Alibaba CloudアカウントBが
a_to_b_pkgパッケージをProject_bプロジェクトにインストールできるようにします。
ALLOW Project_b TO INSTALL PACKAGE a_to_b_pkg;Alibaba CloudアカウントBを使用してProject_bプロジェクトに入り、
a_to_b_pkgパッケージをプロジェクトにインストールします。
INSTALL PACKAGE Project_a.a_to_b_pkg;パッケージ内のテーブルに対する権限をAlibaba CloudアカウントBのRAMユーザーに付与します。
add user ram$B:b_user1; add user ram$B:b_user2; GRANT Describe , Select ON TABLE t1 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");-- Grant permissions on the t1 table in the package to the RAM user b_user1. GRANT Describe , Select ON TABLE t2 TO USER ram$B:b_user1 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");-- Grant permissions on the t2 table in the package to the RAM user b_user1. GRANT Describe , Select ON TABLE t3 TO USER ram$B:b_user2 PRIVILEGEPROPERTIES ("refobject" = "true", "refproject"="project_a", "package"="project_a.a_to_b_pkg");-- Grant permissions on the t3 table in the package to the RAM user b_user2.
パッケージに基づく行レベルのアクセス制御
シナリオの説明
ProjectAプロジェクトの
table_orderテーブルは、すべてのマーチャントの注文と取引に関する情報を含むテーブルです。 商人はテーブルを表示する必要がありますが、自分の店舗の注文と取引しか表示できません。解決策
行レベルのアクセス制御メカニズムを使用すると、各マーチャントは
table_orderテーブルのマーチャントIDでデータをフィルタリングし、独自のストアのデータのみを読み取ることができます。 デフォルトでは、MaxComputeは行レベルのアクセス制御をサポートしていません。 下流のマーチャントごとにtable_orderテーブルの個別のビューを作成し、パッケージを使用してビューの権限を各マーチャントに付与できます。手順
ProjectAプロジェクトのマーチャントごとに個別のビューを作成します。
CREATE VIEW <viewname> as select * from table_order WHERE sellerid='xxxx';viewnameパラメーターは、ビューの名前を指定します。
ProjectAプロジェクトでパッケージを作成し、パッケージ内のビューに対する権限を各マーチャントに付与します。
create package <packagename>; add table <viewname> to package <packagename>; allow project <Projectname_seller> to install package <packagename>;packagenameパラメーターは、パッケージの名前を指定します。 Projectname_sellerパラメーターは、マーチャントが属するMaxComputeプロジェクトの名前を指定します。
マーチャントが属するプロジェクトにパッケージをインストールし、ビューの読み取り権限をマーチャントに付与します。
USE <Projectname_seller>; install package <ProjectA>.<packagename>; grant read on package <ProjectA>.<packagename> to user <username>; select * from <ProjectA>.<viewname>;usernameパラメーターは、マーチャントが属するプロジェクトのビューからデータをクエリするために使用されるアカウントを指定します。