MaxComputeでは、プロジェクトレベルで、ユーザーのアクセスレベルのラベルと、テーブルまたはテーブル内の列の機密レベルのラベルを設定できます。 これらのラベルを設定すると、ユーザーは、機密レベルがユーザーアクセスレベル以下のテーブルまたは列にのみアクセスできます。 このトピックでは、ラベルベースのアクセス制御メカニズムについて説明し、ラベルベースのアクセス制御メカニズムの使用方法の例を示します。
背景情報
ラベルベースのアクセス制御はLabelSecurityとも呼ばれます。 これは、プロジェクトレベルで必須のアクセス制御 (MAC) ポリシーとして使用されます。 MaxComputeプロジェクトを作成すると、MaxComputeプロジェクトのLabelSecurityはデフォルトで無効になります。 プロジェクト所有者は、プロジェクトレベルでSet LabelSecurity=true | false; コマンドを実行して、MaxComputeプロジェクトのLabelSecurityを有効または無効にできます。
MaxComputeプロジェクトでLabelSecurityが有効になっている場合、プロジェクト所有者は、テーブル内のテーブルまたは列の機密レベルとユーザーまたはロールのアクセスレベルを定義し、テーブル内のテーブルまたは列の機密レベルラベルとユーザーまたはロールのアクセスレベルラベルを設定する必要があります。 ユーザーが機密レベルでデータにアクセスしたい場合、ユーザーはデータを格納するテーブルに対してSELECT権限を持っている必要があり、機密レベルがユーザーアクセスレベル以下のテーブルまたは列のデータにのみアクセスできます。
LabelSecurityは、機密データに対して次の機能を提供します。
テーブル内の列は、感度レベルを設定するためにサポートされる最小の粒度です。
感度レベルのラベルは、テーブル内の任意の列に設定できます。 テーブルには、さまざまな感度レベルの列を含めることができます。
感度レベルのラベルをビューに設定できます。 ビューの感度レベルラベルは、ビューに対応するソーステーブルの感度レベルラベルとは関係ありません。
次の表に、LabelSecurityでサポートされている操作を示します。
セクション | 説明 | Performed by | 操作プラットフォーム |
テーブルまたはテーブル内の列に機密レベルのラベルを設定できます。 |
| ||
ユーザーまたはロールのアクセスレベルラベルを設定して、機密レベルのデータにアクセスできます。 | |||
アクセスレベルの低いユーザーまたはロールに、機密レベルの高いデータへのアクセスを許可できます。 | |||
ユーザーまたはロールから機密レベルの高いデータに対するアクセス許可を取り消すことができます。 | |||
期限切れの権限に関する情報をクリアできます。 |
ラベルベースのアクセス制御のデフォルトポリシー
テーブルまたは列、ユーザーまたはロールのラベルを設定した後、ラベルベースのアクセス制御には次のデフォルトポリシーが使用されます。
No-ReadUp: ユーザーは、ユーザーアクセスレベルよりも高い機密レベルのテーブルまたは列にアクセスできません。 ユーザーがユーザーのアクセスレベルよりも高い機密レベルのテーブルまたは列にアクセスする場合は、明示的な権限付与操作が必要です。 明示的権限付与操作の詳細については、「ラベルベースの明示的権限付与の有効化」をご参照ください。
Trusted-User: ユーザーは、機密レベルがユーザーのアクセスレベル以下のデータを書き込むことができます。 新しく作成されたテーブルまたはビューのデフォルトの機密レベルは0です。 これは、すべてのユーザーまたはロールがテーブルまたはビューにアクセスできることを示します。 新しく追加されたユーザーのデフォルトのアクセスレベルは0です。
前提条件
ラベルベースのアクセス制御を実行する前に、次の情報が取得されていることを確認してください。
権限を付与するユーザーのアカウントまたは権限を付与するロールの名前を取得します。 ロールまたはアカウントがMaxComputeプロジェクトに追加されます。 ユーザーのアカウントがAlibaba Cloudアカウントの場合、Alibaba Cloudアカウントをの形式で記録します。
ALIYUN$<account_id> ユーザーのアカウントがRAMユーザーの場合は、RAMユーザーを RAM$<account_id >:< RAMユーザーID> をします。 ユーザーのアカウントがRAMロールの場合は、RAMロールを 'RAM$<account_id>:role/<RAMロールの名前> '
MaxComputeクライアントで
list users;またはlist roles;コマンドを実行して、アカウントまたはロール名を照会できます。オブジェクト名 オブジェクトは、テーブルまたは列にすることができます。
MaxComputeクライアントで
SHOW TABLES;コマンドを実行して、テーブルまたはビューの名前とテーブルまたはビューの列の名前を取得できます。
制限事項
パーティションキー列に機密レベルのラベルを設定することはできません。
注意事項
LabelSecurityを使用する場合は、次の項目に注意してください。
一部の従来のMACシステムでは、ラベルベースのアクセス制御を実行するときに複雑なセキュリティポリシーを使用できます。 これにより、プロジェクト内の権限のないユーザーによるデータの配布を防ぎます。 たとえば、No-WriteDownポリシーは、ユーザーアクセスレベル以下の機密レベルを持つデータをユーザーが書き込むことを禁止します。 デフォルトでは、MaxComputeはNo-WriteDownポリシーをサポートしていません。 これにより、データ機密レベルの管理コストが削減されます。 プロジェクトに同様の要件がある場合は、
Set ObjectCreatorHasGrantPermission=false;コマンドを実行して、プロジェクトのセキュリティ構成を変更できます。プロジェクト間のデータ転送を防ぐには、
set ProjectProtection=true;コマンドを実行してプロジェクトデータ保護を有効にします。 これにより、ユーザーはプロジェクト内のデータのみにアクセスできます。 これにより、ユーザーがプロジェクト間でデータを転送できなくなります。 プロジェクトデータ保護の詳細については、「プロジェクトデータ保護」をご参照ください。オブジェクトを削除すると、MaxComputeはオブジェクトに関連付けられているすべてのラベルを自動的に取り消します。
ユーザーが削除されると、ユーザーに付与された権限は保持されます。 ユーザーがプロジェクトに再度追加されると、ユーザーの履歴アクセス権限が再度有効になります。 削除されたユーザーの残りの権限情報をクリアする方法の詳細については、「削除されたユーザーの残りの権限情報を完全にクリアする」をご参照ください。
テーブルまたは列のデータの機密レベルのラベルを設定する
プロジェクト所有者または管理者ロールが割り当てられているユーザーは、テーブルまたはテーブル内の列の機密レベルのラベルを構成します。
構文
SET Label <number> TO TABLE <table_name>[(<column_list>)];注意事項
テーブルに機密レベルのラベルを設定し、テーブル内の列に機密レベルのラベルを設定しない場合、テーブル内のすべての列の機密レベルはテーブルの機密レベルと同じになります。 たとえば、テーブルの機密レベルが2で、テーブル内のすべての列に機密レベルが設定されていない場合、テーブル内のすべての列の機密レベルは2になります。
テーブルの列に設定したラベルは、列の機密レベルが高いか低いかに関係なく、テーブルに設定したラベルを上書きします。 テーブル用に構成したラベルは、テーブルの列用に構成したラベルを上書きしません。 たとえば、テーブルに設定した初期感度レベルが2で、テーブルのcol1に設定した感度レベルが3の場合、col1を除くすべての列の感度レベルは2で、col1の感度レベルは3です。
テーブルまたは列に設定した機密レベルのラベルを変更する場合は、コマンドを再実行して機密レベルのラベルを設定できます。
パラメーター
パラメーター
必須 / 任意
説明
number
対象
感度レベル。 有効な値: 0-9。 値が大きいほどセキュリティレベルが高いことを示す。
table_name
対象
テーブルまたはビューの名前。
MaxComputeクライアントで
show tables;コマンドを実行して、テーブルまたはビューの名前を取得できます。column_list
非対象
テーブル内の列の名前。 複数の列名を指定できます。 列名はコンマ (,) で区切ります。
ユーザーまたはロールのアクセスレベルラベルの構成
プロジェクト所有者または管理者ロールが割り当てられているユーザーは、プロジェクト内の他のユーザーまたはロールのアクセスレベルラベルを構成します。
構文
SET Label <number> TO {USER|ROLE} <name>;注意事項
ユーザーのアクセスレベルラベルを設定すると、ユーザーは機密レベルがユーザーアクセスレベル以下のデータにのみアクセスできます。 たとえば、ユーザーのアクセスレベルが3の場合、ユーザーは機密レベルが0から3の範囲のテーブルまたは列にアクセスできます。
ユーザーまたはロールに対して構成されているアクセスレベルラベルを変更する場合は、コマンドを再実行して新しいアクセスレベルラベルを構成する必要があります。
パラメーター
パラメーター
必須 / 任意
説明
number
対象
ユーザーまたはロールがアクセスできるデータの最高機密レベル。 有効な値の範囲は0〜9で、感度レベルのラベルに対応します。
name
対象
ユーザーまたはロールの名前。
MaxComputeクライアントで
list users;またはlist roles;コマンドを実行して、アカウントまたはロール名を照会できます。
ラベルベースの明示的権限付与の有効化
プロジェクト所有者または管理者ロールが割り当てられているユーザーは、アクセスレベルの低いユーザーまたはロールに、機密レベルの高いデータへのアクセスを許可します。
構文
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];注意事項
テーブルの列に明示的に構成されているラベルは、テーブルに明示的に構成されているラベルを上書きします。
パラメーター
パラメーター
必須 / 任意
説明
number
対象
ユーザーまたはロールがアクセスできるデータの最高機密レベル。
有効な値の範囲は0から9で、データの機密レベルのラベルに対応します。
table_name
対象
テーブルまたはビューの名前。
MaxComputeクライアントで
show tables;コマンドを実行して、テーブルまたはビューの名前を取得できます。column_list
非対象
このパラメーターは、ユーザーまたはロールにテーブルまたはビューの指定した列へのアクセスを許可する場合に必要です。 1つの権限付与操作に対して複数の列名を指定できます。 列名はコンマ (,) で区切ります。
name
対象
ユーザーまたはロールの名前。
MaxComputeクライアントで
list users;またはlist roles;コマンドを実行して、アカウントまたはロール名を照会できます。days
非対象
指定された権限の有効期限。 単位:日 有効値: 0 ~ 2 63- 1。 このパラメーターを指定しない場合、デフォルトの有効期限は180日です。
ラベルベースの明示的権限付与の取り消し
プロジェクト所有者または管理者ロールが割り当てられたユーザーは、ユーザーまたはロールから明示的に構成されたラベルを取り消します。
構文
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;注意事項
テーブルに明示的に構成されているラベルをユーザーから取り消すと、テーブルの列に明示的に構成されているラベルも取り消されます。
テーブルまたは列に明示的に構成されているラベルを取り消すと、ユーザーまたはロールに構成されているアクセスレベルのラベルは影響を受けません。 たとえば、アクセスレベルが2のユーザーが、機密レベルが3以下のテーブルデータへのアクセス許可を取り消された場合でも、機密レベルが2以下のテーブルデータにアクセスできます。
パラメーター
パラメーター
必須 / 任意
説明
table_name
対象
テーブルまたはビューの名前。
MaxComputeクライアントで
show tables;コマンドを実行して、テーブルまたはビューの名前を取得できます。column_list
非対象
このパラメーターは、テーブルまたはビューの指定した列の機密データへのアクセス権限を取り消す場合に必要です。 複数の列名を指定できます。 列名はコンマ (,) で区切ります。
name
対象
ユーザーまたはロールの名前。
MaxComputeクライアントで
list users;またはlist roles;コマンドを実行して、アカウントまたはロール名を照会できます。
期限切れの権限に関する情報をクリアする
プロジェクト所有者または管理者ロールが割り当てられたユーザーは、明示的な権限付与を使用して付与された期限切れの権限に関する情報をクリアします。
clear expired grants;例
これらの例では、test_project_aプロジェクトに、shop_name、customer_id、およびtotal_price列を含むsale_detailという名前のテーブルが格納されます。 Bob@aliyun.comは、test_project_aプロジェクトの所有者です。 Allenは、Alibaba CloudアカウントBob@aliyun.comに属し、test_project_aプロジェクトに追加されるRAMユーザーです。
例1: sale_detailテーブルとsale_detailテーブルの列の機密レベルのラベルを設定します。 サンプルコマンド:
-- Use the Alibaba Cloud account Bob@aliyun.com to access the project test_project_a. USE test_project_a; -- Set the label of the sale_detail table to 1. In this case, the sensitivity level of all columns in the table is 1. SET Label 1 TO TABLE sale_detail; -- Set the labels of the shop_name and customer_id columns in the sale_detail table to 2. In this case, the labels of other columns are still 1. SET Label 2 TO TABLE sale_detail(shop_name, customer_id); -- Change the label of the sale_detail table to 3. The labels of the shop_name and customer_id columns are still 2. The labels of other columns in the sale_detail table are changed to 3. SET Label 3 TO TABLE sale_detail; -- Change the labels of the shop_name and customer_id columns in the sale_detail table to 4. In this case, the labels of other columns are still 3. SET Label 4 TO TABLE sale_detail(shop_name, customer_id); -- View the labels of the table. DESCRIBE sale_detail; -- The following result is returned: +------------------------------------------------------------------------------------+ | Owner: ALIYUN$****@test.aliyun.com | Project: **** | | TableComment: | +------------------------------------------------------------------------------------+ | CreateTime: 2021-12-13 11:27:04 | | LastDDLTime: 2021-12-13 11:27:04 | | LastModifiedTime: 2021-12-13 11:27:26 | +------------------------------------------------------------------------------------+ | TableLabel: 3 | -- The table label is 3. | MaxLabel: L4 | +------------------------------------------------------------------------------------+ | InternalTable: YES | Size: 784 | +------------------------------------------------------------------------------------+ | Native Columns: | +------------------------------------------------------------------------------------+ | Field | Type | Label | Comment | +------------------------------------------------------------------------------------+ | shop_name | string | 4 | | -- The column label is 4. | customer_id | string | 4 | | -- The column label is 4. | total_price | double | 3 | | --The column label is 3. +------------------------------------------------------------------------------------+ | Partition Columns: | +------------------------------------------------------------------------------------+ | sale_date | string | | | region | string | | +------------------------------------------------------------------------------------+例2: test_project_aプロジェクトでAlibaba CloudアカウントKate@aliyun.comとRAM$Bob@aliyun.com:Allenのアクセスレベルラベルを設定します。 サンプルコマンド:
-- Use the Alibaba Cloud account Bob@aliyun.com to access the project test_project_a. USE test_project_a; -- Set the access-level label of the Alibaba Cloud account Kate@aliyun.com to 3. This allows Kate@aliyun.com to access data whose sensitivity level is 0 to 3. SET Label 3 TO USER ALIYUN$Kate@aliyun.com; -- Set the access-level label of the RAM user Allen to 1. This allows Allen to access data whose sensitivity level is 0 or 1. SET Label 1 TO USER RAM$Bob@aliyun.com:Allen; -- View the information about the access level of Allen. SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen; -- The following result is returned: User Label: 1 (granted label list is empty)例3: 高い機密レベルでデータにアクセスすることをアレンに明示的に許可します。 サンプルコマンド:
-- Use the Alibaba Cloud account Bob@aliyun.com to access the project test_project_a. USE test_project_a; -- Explicitly authorize Allen to access data whose sensitivity level is lower than or equal to 3 in the sale_detail table. The validity period of the granted permissions is 4 days. GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4; -- View the permissions that are granted to Allen. SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen; -- The following result is returned: User Label: 1 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | total_price | 3 | 2021-12-31T19:56:18+0800 | +-------------+--------------+--------------------------+ -- Explicitly authorize Allen to access the data whose sensitivity level is lower than or equal to 3 in the shop_name, customer_id, and total_price columns of the sale_detail table. The validity period of the granted permissions is 10 days. GRANT LABEL 4 ON TABLE sale_detail(shop_name, customer_id, total_price) TO USER RAM$Bob@aliyun.com:Allen WITH exp 10; -- View the permissions that are granted to Allen. SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen; -- The following result is returned: User Label: 1 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | customer_id | 4 | 2022-01-06T19:58:00+0800 | +-------------+--------------+--------------------------+ | shop_name | 4 | 2022-01-06T19:58:00+0800 | +-------------+--------------+--------------------------+ | total_price | 4 | 2022-01-06T19:58:00+0800 | +-------------+--------------+--------------------------+例4: Allenから機密レベルの高いデータにアクセスするための権限を取り消します。 サンプルコマンド:
-- Revoke the permissions to access data whose sensitivity level is lower than or equal to 3 in the shop_name, customer_id, and total_price columns of the sale_detail table from Allen. REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen; -- View the permissions that are granted to Allen. SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen; -- The following result is returned: User Label: 1 +-------------+--------------+--------------------------+ | Column | GrantedLabel | Expires | +-------------+--------------+--------------------------+ | total_price | 3 | 2021-12-31T19:56:18+0800 | +-------------+--------------+--------------------------+ -- Revoke the permissions to access sensitive data in the sale_detail table from Allen. REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen; -- View the permissions that are granted to Allen. SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen; -- The following result is returned: User Label: 1
次のステップ
ラベルベースのアクセス制御を理解したら、ビジネス要件に基づいて権限付与操作を実行できます。 詳細については、以下のトピックをご参照ください。