ダウンロード権限コントロールを使用すると、誰が Tunnel コマンドを介して MaxCompute プロジェクトからデータをエクスポートできるかを管理できます。この機能がない場合、プロジェクト内のすべてのユーザーとロールは、任意のテーブルやインスタンスを自由にダウンロードできるため、データ漏洩のリスクが生じます。この機能を有効にすると、明示的なダウンロード権限を持つユーザーまたはロールのみがデータをエクスポートできるようになります。
仕組み
デフォルトでは、新しいプロジェクトではダウンロード権限コントロールは無効になっています。プロジェクトレベルで有効にすると、すべての Tunnel ベースのダウンロード操作は、明示的な権限に基づいてゲートされます。
次の表は、どのオブジェクトがダウンロード権限をサポートしているか、またどのように権限を付与できるかを示しています:
| オブジェクトタイプ | 有効な値 | ワイルドカードのサポート |
|---|---|---|
Table | テーブル名またはビュー名 | ロールベースのみ (*) |
Instance | インスタンス名 (インスタンス ID と同じ) | ワイルドカードはサポートされていません |
2 つの権限付与モデルが利用可能です:
| モデル | 仕組み | 最適なケース |
|---|---|---|
| シングルユーザー権限付与 | 特定のテーブルまたはインスタンスに対するダウンロード権限を 1 人のユーザーに直接付与します | 個人ユーザー向けのターゲットアクセス |
| ロールベースの権限付与 | ロールにダウンロード権限を付与し、そのロールを複数のユーザーに割り当てます | グループのアクセス管理。オブジェクト名でワイルドカード (*) をサポートします |
制限事項と注意事項
制限事項:
権限付与は、既存のサブジェクト (ユーザーまたはロール) とオブジェクトにのみ適用されます。将来のサブジェクトやオブジェクトに事前に権限を付与することはできません。
ユーザーに直接権限を付与する場合、オブジェクト名でワイルドカード (
*) はサポートされません。この制限は、意図しない広範なアクセス権の付与を防ぐために存在します。ワイルドカードパターンが必要な場合は、ロールベースの権限付与を使用してください。
注意事項:
オブジェクトが削除されると、MaxCompute はそのオブジェクトに対するすべてのダウンロード権限を自動的に取り消します。
ユーザーがプロジェクトから削除されても、その権限は保持されます。ユーザーが再度追加されると、それらの権限は再びアクティブになります。残存する権限情報を完全にクリアする方法については、「削除されたユーザーの残存権限情報を完全にクリアする」をご参照ください。
ダウンロード権限コントロールの有効化
必要な権限: プロジェクトオーナーまたは Super_Administrator ロール。
プロジェクトレベルで次のコマンドを実行します:
setproject odps.security.enabledownloadprivilege=true;ダウンロード権限コントロールを無効にするには:
setproject odps.security.enabledownloadprivilege=false;ダウンロード権限の付与と取り消し
必要な権限: オブジェクトに対する権限の付与または取り消しについては、「権限」の Authorized by 列をご参照ください。
すべてのコマンドは、MaxCompute クライアント、MaxCompute Studio、またはDataWorks コンソールで実行します。
ワークフロー
シングルユーザー権限付与とロールベース権限付与の両方で、以下のシーケンスに従います:
ユーザーまたはロールがプロジェクトメンバーであることを確認します。MaxCompute クライアントで
list users;またはlist roles;を実行して、名前を検索します。ユーザーまたはロールを追加するには、ユーザーの計画と管理またはロールの計画をご参照ください。コントロールするテーブルまたはインスタンスの名前を確認します。
show tables;またはshow instances;を実行して、利用可能なオブジェクトをリスト表示します。grantまたはrevokeコマンドを実行します。show grantsまたはdescribe roleで結果を確認します。
構文
ダウンロード権限を付与する場合:
grant Download on <object_type> <object_name> to <subject_type> <subject_name>;ダウンロード権限を取り消す場合:
revoke Download on <object_type> <object_name> from <subject_type> <subject_name>;パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
object_type | はい | オブジェクトのタイプ。有効な値:Table、Instance。コマンドごとに 1 つのオブジェクトタイプを指定します。 |
object_name | はい | テーブル、ビュー、またはインスタンスの名前。ロールベースの権限付与では、ワイルドカードがサポートされています。たとえば、table taobao* は、名前が taobao で始まるすべてのテーブルに一致します。show tables; または show instances; を実行して名前を取得します。 |
subject_type | はい | サブジェクトのタイプ。有効な値:USER (Alibaba Cloud アカウントまたは RAM ユーザー)、ROLE (ロール)。 |
subject_name | はい | ユーザーまたはロールの名前。コマンドごとに 1 つのサブジェクトを指定します。Alibaba Cloud アカウントには ALIYUN$<account> を、RAM ユーザーには RAM$<account>:<username> を使用します。list users; または list roles; を実行して名前を取得します。 |
例
以下の例では、username@example.com が test_project_a を所有しているという設定を使用します。Allen、Tom、Alice はそのアカウント配下の RAM ユーザーです。プロジェクトではダウンロード権限コントロールが有効になっています。
例 1:RAM ユーザーにダウンロード権限を付与する
Allen をプロジェクトに追加し、sale_detail テーブルに対するダウンロード権限を付与します:
-- プロジェクトに切り替えます。
use test_project_a;
-- Allen をプロジェクトメンバーとして追加します。
add user RAM$username@example.com:Allen;
-- Allen に sale_detail に対するダウンロード権限を付与します。
grant Download on table sale_detail to USER RAM$username@example.com:Allen;
-- Allen の権限を確認します。
show grants for RAM$username@example.com:Allen;期待される出力:
Authorization Type: ACL
[user/RAM$username@example.com:Allen]
A projects/test_project_a/tables/sale_detail: Download例 2:RAM ユーザーからダウンロード権限を取り消す
例 1 で付与した権限を取り消します:
-- プロジェクトに切り替えます。
use test_project_a;
-- Allen のダウンロード権限を取り消します。
revoke Download on table sale_detail from USER RAM$username@example.com:Allen;
-- 権限が削除されたことを確認します。
show grants for RAM$username@example.com:Allen;例 3:ロールを介して複数のユーザーにダウンロード権限を付与する
Alice と Tom に、名前が tb_ で始まるすべてのテーブルに対するダウンロード権限を付与します:
-- プロジェクトに切り替えます。
use test_project_a;
-- Alice と Tom をプロジェクトメンバーとして追加します。
add user RAM$username@example.com:Alice;
add user RAM$username@example.com:Tom;
-- ロールを作成します。
create role Worker;
-- ロールを Alice と Tom に割り当てます。
grant Worker TO RAM$username@example.com:Alice;
grant Worker TO RAM$username@example.com:Tom;
-- Worker ロールにすべての tb_* テーブルに対するダウンロード権限を付与します。
grant Download on table tb_* to ROLE Worker;
-- ロールの権限を確認します。
describe role Worker;期待される出力:
Authorization Type: Policy
[role/worker]
A projects/test_project_a/tables/tb_*: Download例 4:ロールベースのダウンロード権限を取り消す
例 3 で Alice と Tom に付与した権限を取り消します:
-- プロジェクトに切り替えます。
use test_project_a;
-- Worker ロールを Alice と Tom から削除します。
revoke Worker from RAM$username@example.com:Alice;
revoke Worker from RAM$username@example.com:Tom;
-- Alice の権限にダウンロードアクセスが含まれなくなったことを確認します。
show grants for RAM$username@example.com:Alice;