プロジェクトにパッケージをインストールした後、きめ細かなアクセス制御を適用して、パッケージ内の特定のリソースにアクセスできるユーザーやロールを制限します。MaxCompute は、オブジェクトレベルの権限に対するアクセス制御リスト (ACL) ベースのアクセス制御と、列レベルのデータ秘密度を適用するための LabelSecurity という、2つの補完的なポリシーをサポートしています。まず ACL ベースのアクセス制御を適用し、その後オプションで LabelSecurity を重ねて、セキュリティレベルによるアクセスを制限します。
前提条件
開始する前に、以下を確認してください:
プロジェクトにパッケージがインストールされていること。詳細については、「パッケージに基づくプロジェクト間のリソースアクセス」をご参照ください。
パッケージがインストールされているプロジェクトのプロジェクトオーナーまたは admin ロールを持っていること。
ACL ベースのアクセス制御
ACL ベースのアクセス制御により、プロジェクトオーナーまたは admin ロールを持つユーザーは、パッケージ内の特定のオブジェクトに対する権限を付与または取り消すことができます。これにより、インストール先のプロジェクトのユーザーは、それらのオブジェクトに対して明示的に付与された操作のみを実行できます。
これらのコマンドは、MaxCompute クライアント、MaxCompute Studio、または DataWorks コンソールから実行します。
権限の付与
パッケージ内の特定のオブジェクトに権限を付与するには:
grant <actions> on <object_type> <object_name> to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");テーブル内の特定の列に権限を付与するには:
-- 列レベルの付与:テーブル名の後に列リストを指定します
grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");| パラメーター | 必須 | 説明 |
|---|---|---|
actions | はい | 付与する権限。各オブジェクトの利用可能な権限を確認するには、describe package <project_name>.<package_name>; を実行します。 |
object_type | はい | describe package <project_name>.<package_name>;オブジェクトのタイプ。`describe package <project_name>.<package_name>;` を実行して、パッケージに含まれるオブジェクトタイプを確認します。 |
object_name | はい | describe package <project_name>.<package_name>;オブジェクトの名前。`describe package <project_name>.<package_name>;` を実行して、オブジェクト名を確認します。 |
name | はい | ユーザーまたはロールの名前。詳細については、「ユーザーの表示」または「ロールの表示」をご参照ください。 |
table_name | はい (列レベル) | テーブルの名前です。パッケージ内のテーブルを表示するには、describe package <project_name>.<package_name>; を実行します。 |
column_list | いいえ | 1つ以上の列名。カンマで区切ります。 |
"refobject"="true" | はい | パッケージのきめ細かなアクセス制御を有効にします。 |
"refproject"="<project_name>" | はい | パッケージを所有する MaxCompute プロジェクトの名前。 |
"package"="<package_name>" | はい | パッケージの名前。 |
権限の表示
パッケージ内のオブジェクトに現在設定されている ACL ベースの権限を表示するには:
show grants on <object_type> <object_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");権限の取り消し
特定のオブジェクトから権限を取り消すには:
revoke <actions> on <object_type> <object_name> from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");テーブル内の特定の列から権限を取り消すには、
revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");例:テーブル権限の付与と取り消し
次の例では、パッケージに基づくプロジェクト間のリソースアクセス のシナリオを使用し、prj2 のプロジェクトオーナーである John が、Bob に prj1 が所有する datamining パッケージ内の sampletable テーブルに対する SELECT 権限を付与した後、それを取り消します。
use prj2;
-- テーブルに対する SELECT 権限を bob に付与します
grant Select on table sampletable to user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- 権限付与を確認します
show grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- 権限を取り消します
revoke Select on table sampletable from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");ラベルベースのアクセス制御
LabelSecurity は、ACL ベースのアクセス制御の上に、第2の制御レイヤーを追加します。ACL 権限を付与した後、LabelSecurity を有効にすることで、データ秘密度レベルによってアクセスをさらに制限できます。これにより、ユーザーは指定したレベル以下のセキュリティレベルのデータのみを読み取ることができます。
LabelSecurity を適用する前に、ACL ベースのアクセス制御を実行してください。LabelSecurity は、パッケージ内のテーブルリソースにのみ適用されます。
ラベルベース権限の付与
grant label <number> on table <table_name>[(<column_list>)] to [user|role] <name>
[with exp <days>]
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");| パラメーター | 必須 | 説明 |
|---|---|---|
number | — | 機密データのセキュリティレベル。詳細については、「ラベルベースのアクセス制御」をご参照ください。 |
table_name | はい | describe package <project_name>.<package_name>;テーブルの名前。`describe package <project_name>.<package_name>;` を実行して、パッケージ内のテーブルを確認します。 |
column_list | いいえ | 1つ以上の列名。カンマで区切ります。 |
name | はい | ユーザーまたはロールの名前。詳細については、「ユーザーの表示」または「ロールの表示」をご参照ください。 |
days | いいえ | 権限が有効な日数。デフォルト:180日。 |
"refobject"="true" | はい | パッケージのきめ細かなアクセス制御を有効にします。 |
"refproject"="<project_name>" | はい | パッケージを所有する MaxCompute プロジェクトの名前。 |
"package"="<package_name>" | はい | パッケージの名前。 |
ラベルベース権限の表示
show label grants on table <table_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");ラベルベース権限の取り消し
revoke label on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");例:ACL とラベルベースのアクセス制御の階層化
以下の例は、上記の ACL の例から続きます。sampletable テーブルには、異なるセキュリティレベルを持つ 3 つの列があります:t1(レベル 1)、t2(レベル 2)、および t3(レベル 3)。John は、Bob にセキュリティレベル 2 までのデータへのアクセスを許可し、その有効期間は 7 日間です。
use prj2;
-- ステップ 1: LabelSecurity を有効化する
set LabelSecurity=true;
-- ステップ 2: 各列にセキュリティレベルを割り当てる
set label 1 to table sampletable(t1);
set label 2 to table sampletable(t2);
set label 3 to table sampletable(t3);
-- ステップ 3: Bob に t2 のラベル 2 アクセスを付与し、7 日間有効にする
-- Bob はすでに上記の ACL による付与からテーブルに対する SELECT 権限を保持しています。
-- これにより、Bob は t2 (レベル 2) を読み取れますが、t3 (レベル 3) は読み取れません。
grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- ラベル付与を確認する
show label grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
-- ラベルアクセスを取り消す
revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");パッケージの所有者(prj1 内)が他のプロジェクトにパッケージのインストール権限を付与する場合、ラベルベースのアクセス制御が必要なときは、ラベルも指定する必要があります:allowproject <project_name> to install package <package_name> using label <number>;次のステップ
パッケージに基づくプロジェクト間のリソースアクセス — パッケージの作成、インストール、管理
ラベルベースのアクセス制御 — MaxCompute での LabelSecurity の仕組みを理解する