クロスアカウントシナリオであっても、ターゲットプロジェクトのメンバーでない限り、別のプロジェクトのリソースに直接アクセスすることはできません。このアクセスを可能にするために、MaxCompute はパッケージベースの権限付与を提供しています。リソースとその権限をパッケージにカプセル化できます。他のプロジェクトは、このパッケージをインストールすることで、クロスプロジェクトアクセスを獲得できます。このトピックでは、パッケージの権限付与について説明し、使用例を提供します。
背景情報
このトピックでは、Alibaba Cloud アカウントが複数の MaxCompute プロジェクトを所有しており、Project A 内の特定のテーブル、リソースファイル、およびユーザー定義関数 (UDF) を、このアカウントの他のプロジェクトまたは別の Alibaba Cloud アカウント内の他のプロジェクトと共有する必要があるシナリオを想定しています。リソースを他のプロジェクトと共有するには、次のいずれかの方法を使用できます。
他のプロジェクトのユーザーを Project A に追加し、各ユーザーにリソースへのアクセス権限を付与します。この方法は複雑です。クロスプロジェクトのリソースアクセスシナリオでは、この方法を使用しないことを推奨します。この方法は、プロジェクトチームのメンバーに対して詳細なリソースアクセス制御が必要な場合にのみ使用することを推奨します。権限付与コマンドの構文の詳細については、「ACLベースのアクセス制御」をご参照ください。
パッケージベースのアクセス制御メカニズムを使用します。
パッケージベースのアクセス制御メカニズムは、プロジェクト間でデータとリソースを共有するために使用されます。Project A の所有者は、他のプロジェクトが使用する必要があるリソースと、そのリソースに対する操作権限をパッケージ化し、他のプロジェクトの所有者にパッケージのインストールを許可します。パッケージがインストールされた後、他のプロジェクトの所有者は、自身のプロジェクトのユーザーにパッケージ内のリソースへのアクセスを許可するかどうかを決定できます。次の図は、パッケージベースのアクセス制御メカニズムがどのように実装されるかを示しています。

上記の図は、パッケージベースのアクセス制御メカニズムに、パッケージ作成者とパッケージ利用者という2つのエンティティが関与していることを示しています。次の表は、エンティティに関する情報と、エンティティが実行できる操作について説明しています。
エンティティ | 説明 | 実行可能な操作 | エンティティの役割 | 操作プラットフォーム |
パッケージ作成者 | パッケージ作成者が属するプロジェクトは、共有するリソースを提供します。パッケージ作成者は、共有する必要があるプロジェクトリソースと、そのリソースに対する操作権限をパッケージ化し、パッケージ利用者にパッケージのインストールとパッケージ内のリソースへのアクセスを許可します。 | リソースが属するプロジェクトの所有者、またはリソースが属するプロジェクトのプロジェクトレベルのロール Super_Administrator が割り当てられたユーザー | ||
パッケージ利用者 | パッケージ利用者が属するプロジェクトは、パッケージ内のリソースにアクセスします。パッケージ利用者がパッケージ作成者によって作成されたパッケージをインストールした後、パッケージ利用者はパッケージ内のリソースに直接アクセスできます。 | リソースを使用するプロジェクトの所有者、またはリソースを使用するプロジェクトのプロジェクトレベルのロール Super_Administrator または Admin が割り当てられたユーザー | ||
制限事項
パッケージベースのアクセス制御メカニズムを使用する前に、次の制限事項に注意してください。
1つのパッケージに追加できるリソースは最大 1,000 個です。
1つのパッケージは、最大 100,000 個の MaxCompute プロジェクトにインストールできます。
1つの MaxCompute プロジェクト内の最大 100 個のパッケージを、別の MaxCompute プロジェクトにインストールできます。
1つの MaxCompute プロジェクトに対して、最大 100,000 個のパッケージを作成できます。
1つの MaxCompute プロジェクトに対して、最大 100,000 個のパッケージをインストールできます。
パッケージの作成
パッケージ作成者は、MaxCompute プロジェクトでパッケージを作成します。
構文
create package <package_name>;パラメーター
パラメーター
必須
説明
package_name
はい
パッケージの名前。プロジェクト内で一意である必要があります。名前は 1 ~ 128 文字の長さで、文字、数字、アンダースコア (_) を含めることができます。
show packages;コマンドを MaxCompute クライアント で実行して、作成済みパッケージを表示できます。例
この例では、Alibaba Cloud アカウント Bob@aliyun.com が test_project_a プロジェクトの所有者であり、他のプロジェクトが test_project_a プロジェクト内の特定のリソースにアクセスできるように権限付与する必要があります。パッケージを作成します。コマンド例:
-- Switch to the test_project_a project. use test_project_a; -- Create a package named datashare. create package datashare;
パッケージへのリソースの追加
パッケージ作成者は、パッケージ利用者に必要なリソースを作成済みのパッケージに追加します。
構文
add <object_type> <object_name> to package <package_name> [with privileges <privileges>];制限事項
パッケージにプロジェクトを追加することはできません。
注意事項
パッケージにリソースを追加しても、リソースはスナップショットとしてパッケージ化されません。リソースがパッケージに追加された後にリソースデータが更新された場合、パッケージ利用者は最新のリソースデータにアクセスします。
パラメーター
パラメーター
必須
説明
object_type
はい
パッケージに追加するオブジェクトのタイプ。一度に指定できるオブジェクトタイプは1つだけです。
オブジェクトタイプの詳細については、「権限」をご参照ください。
object_name
はい
パッケージから削除するオブジェクトの名前。オブジェクト名は、次のいずれかの方法で取得できます。
テーブル名: MaxCompute クライアントで
show tables;コマンドを実行して、テーブル名またはビュー名を取得します。リソースファイル名:
list resources;コマンドを MaxCompute クライアント で実行して、リソース名を取得します。関数名:
list functions;コマンドを MaxCompute クライアント で実行して、関数名を取得します。インスタンス名: MaxCompute クライアントで
show instances;コマンドを実行して、インスタンス名を取得します。
説明リソースを追加する際、ワイルドカード (*) を使用できます。たとえば、
add table * to package package_name;はすべてのテーブルをパッケージに追加します。パッケージにリソースを追加する際、リソース名を「プロジェクト名.リソース名」形式で指定しないでください。たとえば、Project A の table という名前のテーブルをパッケージに追加する場合、リソース名として A.table を指定しないでください。table をリソース名として指定する必要があります。
package_name
はい
パッケージの名前。
作成済みのパッケージを表示するには、MaxCompute クライアントで
show packages;コマンドを実行できます。privileges
いいえ
パッケージ内のリソースに対する操作権限。このパラメーターを指定しない場合、リソースに対する Read、Describe、および Select 権限がデフォルトでパッケージに追加されます。リソースとリソースに対する操作権限は不可分であり、パッケージに追加した後は更新できません。パッケージ内のリソースまたはこれらのリソースに対する操作権限を更新したい場合は、パッケージ内のリソースを削除し、更新されたリソースと操作権限を再度パッケージに追加する必要があります。
操作権限の詳細については、「権限」をご参照ください。
例
test_project_a プロジェクトの udtf.jar リソースファイルと sale_detail および bank_data テーブルを作成済みのパッケージに追加します。コマンド例:
-- Add resources to the package. add resource udtf.jar to package datashare; add table sale_detail to package datashare;
パッケージからのリソースの削除
パッケージ作成者は、作成済みのパッケージからリソースを削除します。
構文
remove <object_type> <object_name> from package <package_name>;パラメーター
パラメーター
必須
説明
object_type
はい
パッケージから削除するオブジェクトのタイプ。一度に削除できるオブジェクトは1つだけです。
オブジェクトタイプの詳細については、「権限」をご参照ください。
object_name
はい
パッケージから削除するオブジェクトの名前。オブジェクト名は、次のいずれかの方法で取得できます。
テーブル名: MaxCompute クライアントで
show tables;コマンドを実行して、テーブルまたはビュー名を取得します。リソースファイル名: MaxCompute クライアントで
list resources;コマンドを実行して、リソース名を取得します。関数名:
list functions;コマンドを MaxCompute クライアント で実行して、関数名を取得します。インスタンス名:
show instances;コマンドを MaxCompute クライアント で実行して、インスタンス名を取得します。
package_name
はい
パッケージの名前。
show packages;コマンドを MaxComputeクライアント で実行すると、作成済みパッケージを表示できます。例
datashare パッケージから sale_detail テーブルを削除します。コマンド例:
-- Remove a resource from the package. remove table sale_detail from package datashare;
プロジェクトへのパッケージ使用の権限付与
プロジェクト内のパッケージ作成者は、作成済みのパッケージを他のプロジェクトが使用できるように権限付与します。
構文
allow project <project_name> to install package <package_name> [using label <number>];パラメーター
パラメーター
必須
説明
project_name
はい
パッケージの使用を権限付与する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を表示するには、MaxCompute コンソール にログインします。上部ナビゲーションバーでリージョンを選択します。その後、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を表示します。
package_name
はい
パッケージの名前。
show packages;コマンドを MaxCompute クライアント で実行すると、作成済みパッケージを表示できます。number
いいえ
このパラメーターは、ラベルベースのアクセス制御ポリシーを追加するために使用されます。このパラメーターは、パッケージ利用者がアクセスできるデータの感度レベルを指定します。権限付与された MaxCompute プロジェクトは、number で指定されたレベル以下の感度レベルのパッケージデータのみにアクセスできます。このパラメーターを指定しない場合、感度レベルはデフォルトで 0 です。
ラベルベースのアクセス制御の詳細については、「ラベルベースのアクセス制御」をご参照ください。
例
test_project_a プロジェクトで作成された datashare パッケージを test_project_b にインストールすることを許可します。コマンド例:
-- Authorize project test_project_b to install the package. allow project test_project_b to install package datashare;
プロジェクトからのパッケージアクセス権限の取り消し
パッケージ作成者は、プロジェクトからのパッケージアクセス権限を取り消します。
構文
disallow project <project_name> to install package <package_name>;パラメーター
パラメーター
必須
説明
project_name
はい
パッケージへのアクセス権限を取り消す MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を表示するには、MaxCompute コンソールにログインします。トップナビゲーションバーでリージョンを選択します。次に、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認できます。
package_name
はい
パッケージの名前。
show packages;コマンドを MaxCompute クライアント で実行して、作成済みパッケージを表示できます。例
test_project_b プロジェクトから、test_project_a プロジェクトの datashare パッケージをインストールする権限を取り消します。コマンド例:
-- Revoke the permission to install the package. disallow project test_project_b to install package datashare;
パッケージの削除
パッケージ作成者は、パッケージを削除します。
構文
delete|drop package <package_name>;注意事項
パッケージを削除すると、このパッケージを使用して付与された権限に関する情報がクリアされます。
パラメーター
パラメーター
必須
説明
package_name
はい
削除するパッケージの名前。
show packages;コマンドを MaxCompute クライアント で実行すると、作成済みパッケージを表示できます。例
test_project_a プロジェクトで作成された datashare パッケージを削除します。コマンド例:
-- Delete the package. drop package datashare;
パッケージの表示
パッケージ作成者は、MaxCompute プロジェクトで作成またはインストールされたパッケージを表示します。
構文
show packages;例
test_project_a プロジェクトで作成またはインストールされたパッケージに関する情報を表示します。コマンド例:
-- List packages. show packages;返される結果には、次の情報が含まれます。
PackageName: 作成またはインストールされたパッケージの名前。
CreateTime: パッケージが作成された時刻。
SourceProject: パッケージが属する MaxCompute プロジェクトの名前。
InstallTime: パッケージがインストールされた時刻。
Status: パッケージのステータス。
+-------------+--------------------------+ | PackageName | CreateTime | +-------------+--------------------------+ | datashare | 2021-12-28T18:10:39+0800 | +-------------+--------------------------+ +-------------+--------------------+--------------------------+--------+ | PackageName | SourceProject | InstallTime | Status | +-------------+--------------------+--------------------------+--------+ | systables | information_schema | 2020-11-24T14:11:23+0800 | OK | +-------------+--------------------+--------------------------+--------+
パッケージの詳細の表示
パッケージ作成者は、MaxCompute プロジェクトで作成されたパッケージの詳細を表示します。
構文
describe package <package_name>;パラメーター
パラメーター
必須
説明
package_name
はい
パッケージの名前。
show packages;コマンドをMaxCompute クライアントで実行すると、作成済みのパッケージを表示できます。例
test_project_a プロジェクトの datashare パッケージに含まれるリソースと権限を表示します。コマンド例:
-- View package details. describe package datashare;返される結果には、次の情報が含まれます。
CreateTime: パッケージが作成された時刻。
PackageName: パッケージの名前。
SourceProject: パッケージが属する MaxCompute プロジェクトの名前。
ObjectType: パッケージ内のオブジェクトのタイプ。
ObjectName: パッケージ内のオブジェクトの名前。
ObjectPrivileges: パッケージ内のオブジェクトに対する権限。
ProjectName: パッケージのインストールを許可されているプロジェクト。
UserLabel: ユーザーラベル。
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+ Allowed Project List +-----------------+-----------+ | ProjectName | UserLabel | +-----------------+-----------+ | test_project_b | 0 | +-----------------+-----------+
パッケージのインストール
パッケージ利用者は、MaxCompute プロジェクトにパッケージをインストールします。
構文
install package <project_name>.<package_name>;注意事項
パッケージはインストール中に展開されます。インストール後、インストールされたパッケージを一覧表示するには、
show packages;コマンドを実行します。パッケージ内のリソースと権限を表示するには、describe package <package_name>;コマンドを実行します。パラメーター
パラメーター
必須
説明
project_name
はい
パッケージが属する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を確認するには、MaxCompute コンソールにログインします。上部のナビゲーションバーで、リージョンを選択します。次に、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認します。
package_name
はい
パッケージの名前。
show packages;コマンドを MaxCompute クライアント で実行すると、作成済みパッケージを表示できます。例
test_project_b プロジェクトに、test_project_a プロジェクトの datashare パッケージをインストールします。この例では、Alibaba Cloud アカウント Amy@aliyun.com が test_project_b プロジェクトの所有者です。コマンド例:
-- Switch to the test_project_b project. use test_project_b; -- Install the package. install package test_project_a.datashare;
インストール済みパッケージの詳細の表示
パッケージ利用者は、MaxCompute プロジェクトにインストールされているパッケージの詳細を表示します。
構文
describe package <project_name>.<package_name>;パラメーター
パラメーター
必須
説明
project_name
はい
パッケージが属する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を確認するには、MaxCompute コンソールにログインします。上部のナビゲーションバーで、リージョンを選択します。次に、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認します。
package_name
はい
パッケージの名前。
show packages;コマンドを MaxCompute クライアント で実行すると、作成済みパッケージを表示できます。例
test_project_b プロジェクトにインストールされている datashare パッケージ内のリソースと権限を表示します。コマンド例:
-- View package details. describe package test_project_a.datashare;返される結果には、次の情報が含まれます。
CreateTime: パッケージが作成された時刻。
PackageName: パッケージの名前。
SourceProject: パッケージが属する MaxCompute プロジェクトの名前。
ObjectType: パッケージ内のオブジェクトのタイプ。
ObjectName: パッケージ内のオブジェクトの名前。
ObjectPrivileges: パッケージ内のオブジェクトに対する権限。
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+
ユーザーまたはロールへのパッケージアクセス権限の付与
パッケージ利用者は、パッケージがインストールされている MaxCompute プロジェクトで、ユーザーまたはロールにパッケージへのアクセスを権限付与します。
インストールされたパッケージは、MaxCompute における独立したオブジェクトの一種です。パッケージ内のリソースにアクセスするには、パッケージに対する Read 権限が必要です。Read 権限がない場合、プロジェクト所有者および Super_Administrator または Admin ロールが割り当てられたユーザーは、アクセス制御リスト (ACL) を使用して Read 権限を付与できます。ACLベースのアクセス制御の詳細については、「ACLベースのアクセス制御」をご参照ください。
構文
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;注意事項
ユーザーまたはロールに Read 権限が付与された後、そのユーザーまたはロールは、パッケージがインストールされているプロジェクト内でのみパッケージ内のリソースにアクセスできます。パッケージに対する権限を詳細な方法で管理する方法の詳細については、「パッケージのアクセス制御」をご参照ください。
パラメーター
パラメーター
必須
説明
actions
はい
パッケージ内のリソースに対する操作権限。値を Read に設定します。
project_name
はい
パッケージが属する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を表示するには、MaxCompute コンソール にログインします。上部のナビゲーションバーでリージョンを選択し、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認します。
package_name
はい
パッケージの名前。
MaxCompute クライアントで
show packages;コマンドを実行すると、作成済みのパッケージを表示できます。name
はい
アクセス権限を付与するユーザーアカウントまたはロールの名前。単一の権限付与操作では、1つのユーザーアカウントまたはロールのみを指定できます。
ユーザー名またはロール名を確認するには、MaxCompute クライアントで
list users;またはlist roles;コマンドを実行します。例
この例では、Bella は Alibaba Cloud アカウント Amy@aliyun.com の RAM ユーザーです。Bella に datashare パッケージへのアクセスを権限付与します。コマンド例:
-- Grant Bella access to the package. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella;
ユーザーまたはロールからのパッケージアクセス権限の取り消し
パッケージ利用者は、パッケージがインストールされている MaxCompute プロジェクトで、ユーザーまたはロールからのパッケージアクセス権限を取り消します。
構文
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;パラメーター
パラメーター
必須
説明
actions
はい
パッケージ内のリソースに対する操作権限。値を Read に設定します。
project_name
はい
パッケージが属する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を確認するには、MaxCompute コンソールにログインします。上部のナビゲーションバーでリージョンを選択します。次に、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認します。
package_name
はい
パッケージの名前。
MaxCompute クライアントで
show packages;コマンドを実行すると、作成済みのパッケージを表示できます。name
はい
パッケージへのアクセス権限を取り消すユーザーアカウントまたはロールの名前。単一の取り消し操作では、1つのユーザーアカウントまたはロールのみを指定できます。
ユーザーアカウント名またはロール名を確認するには、MaxCompute クライアントで
list users;またはlist roles;コマンドを実行します。例
Bella からパッケージへのアクセス権限を取り消します。コマンド例:
-- Revoke the permission for Bella to access the package. revoke Read on package test_project_a.datashare from user RAM$Am*******n.com:Bella;
パッケージのアンインストール
パッケージ利用者は、MaxCompute プロジェクトにインストールされているパッケージをアンインストールします。
構文
uninstall package <project_name>.<package_name>;パラメーター
パラメーター
必須
説明
project_name
はい
パッケージが属する MaxCompute プロジェクトの名前。
MaxCompute プロジェクトの名前を確認するには、MaxCompute コンソールにログインします。上部のナビゲーションバーでリージョンを選択し、[プロジェクト管理] タブで MaxCompute プロジェクトの名前を確認します。
package_name
はい
パッケージの名前。
MaxCompute クライアント で
show packages;コマンドを実行して、作成済みパッケージを表示できます。例
test_project_b プロジェクトにインストールされている datashare パッケージをアンインストールします。コマンド例:
-- Uninstall the datashare package. uninstall package test_project_a.datashare;
使用例
この例では、Alibaba Cloud アカウント Bob@aliyun.com が test_project_a プロジェクトの所有者です。Alibaba Cloud アカウント Amy@aliyun.com が test_project_b プロジェクトの所有者です。ビジネス上の懸念に対処するため、test_project_a プロジェクト内の udtf.jar リソースファイルと sale_detail テーブルを test_project_b と共有したいと考えています。また、test_project_b プロジェクトの RAM ユーザー Amy@aliyun.com:Bella がリソースにアクセスできるようにしたいと考えています。MaxCompute クライアントで次の手順を実行します。
test_project_a プロジェクトに移動し、Alibaba Cloud アカウント Bob@aliyun.com を使用してパッケージを作成します。
-- Switch to the test_project_a project. use test_project_a; -- Create a package named datashare. create package datashare;Alibaba Cloud アカウント Bob@aliyun.com を使用して、作成済みのパッケージにリソースを追加します。
-- Add resources to the package. add resource udtf.jar to package datashare; add table sale_detail to package datashare;Alibaba Cloud アカウント Bob@aliyun.com を使用して、test_project_b プロジェクトにパッケージのインストールを許可します。
-- Authorize project test_project_b to install the package. allow project test_project_b to install package datashare;test_project_b プロジェクトに移動し、Alibaba Cloud アカウント Amy@aliyun.com を使用してパッケージをインストールします。
-- Switch to the test_project_b project. use test_project_b; -- Install the package. install package test_project_a.datashare; -- View the list of resources in the package. describe package test_project_a.datashare; -- The following result is returned. CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+Alibaba Cloud アカウント Amy@aliyun.com を使用して、Bella にパッケージへのアクセスを権限付与します。
-- Grant Bella permission to access the package. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella;Bella は sale_detail テーブルからデータを読み取ります。
SELECT * FROM test_project_a.sale_detail;
参考資料
パッケージを作成してインストールした後、次のトピックをご参照ください。
クロスプロジェクトデータアクセスを使用して、異なるリージョン内の MaxCompute プロジェクト間でデータを移行する (同一アカウントおよびクロスアカウントシナリオの両方に対応)。
DataWorks を使用して、MaxCompute データをプロジェクト間で移行できます。詳細については、「MaxCompute データソース」をご参照ください。