すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:パッケージに基づくプロジェクト間のリソースアクセス

最終更新日:Aug 22, 2026

あるプロジェクトのメンバーでない場合、プロジェクトをまたいで (アカウントをまたぐ場合も含む) リソースに直接アクセスすることはできません。この問題を解決するため、MaxCompute はパッケージベースのアクセス制御メカニズムを提供しています。このメカニズムでは、リソースと権限をパッケージにバンドルし、他のプロジェクトがそのパッケージをインストールすることで、クロスプロジェクトアクセスが可能になります。このトピックでは、パッケージアクセス制御の使用方法と使用例について説明します。

背景情報

本トピックでは、ある Alibaba Cloud アカウントが複数の MaxCompute プロジェクトを所有し、プロジェクト A の特定のテーブル、リソースファイル、ユーザー定義関数 (UDF) を、そのアカウントの他のプロジェクトや、別の Alibaba Cloud アカウントのプロジェクトと共有する必要があるケースについて説明します。以下のいずれかの方法で、リソースを他のプロジェクトと共有できます:

  • 他のプロジェクトのユーザーをプロジェクト A に追加し、各ユーザーにリソースへのアクセス権限を付与します。この方法は複雑です。プロジェクト間のリソースアクセスシナリオでは、この方法を使用しないことを推奨します。プロジェクトチームのメンバーに対してきめ細かいリソースのアクセスコントロールが必要な場合にのみ、この方法を使用することを推奨します。認可コマンドの構文の詳細については、「ACL ベースのアクセスコントロール」をご参照ください。

  • パッケージベースのアクセスコントロールメカニズムを使用します。

    パッケージベースのアクセスコントロールメカニズムは、プロジェクト間でデータとリソースを共有するために使用されます。プロジェクト A の所有者は、他のプロジェクトが必要とするリソースとそれらのリソースに対する操作権限をパッケージ化し、他のプロジェクトの所有者にパッケージをインストールする権限を付与します。パッケージがインストールされると、他のプロジェクトの所有者は、自プロジェクトのユーザーにパッケージ内のリソースへのアクセスを許可するかどうかを決定できます。次の図は、パッケージベースのアクセスコントロールメカニズムの実装方法を示しています。

    PackageUsage process

上の図は、パッケージベースのアクセスコントロールメカニズムには、パッケージ作成者とパッケージユーザーという 2 つのエンティティが関与することを示しています。次の表では、各エンティティと、そのエンティティが実行できる操作について説明します。

エンティティ

説明

実行可能な操作

エンティティのロール

操作プラットフォーム

パッケージ作成者

パッケージ作成者が所属するプロジェクトは、共有するリソースを提供します。パッケージ作成者は、共有するプロジェクトリソースとそれらのリソースに対する操作権限をパッケージ化し、他のプロジェクトにパッケージのインストールとパッケージ内のリソースにアクセスする権限を付与します。

パッケージの作成

リソースが属するプロジェクトの所有者、またはそのプロジェクトのプロジェクトレベルロールであるスーパー管理者が割り当てられているユーザー

パッケージへのリソースの追加

パッケージからのリソースの削除

プロジェクトへのパッケージ使用権限の付与

プロジェクトからのパッケージへのアクセス権限の取り消し

パッケージの削除

パッケージの表示

パッケージの詳細の表示

パッケージユーザー

パッケージユーザーが所属するプロジェクトは、パッケージ内のリソースを使用します。パッケージをインストールした後、パッケージユーザーは自プロジェクト内のユーザーまたはロールに対して、パッケージ内のリソースへのアクセス権限を付与できます。

パッケージのインストール

リソースを使用するプロジェクトの所有者、またはそのプロジェクトのプロジェクトレベルロールであるスーパー管理者または Admin が割り当てられているユーザー

インストール済みパッケージの詳細の表示

ユーザーまたはロールへのパッケージアクセス権の付与

パッケージのアンインストール

制限

パッケージベースのアクセス制御メカニズムを使用する前に、次の制限に注意してください。

  • パッケージに追加できるリソースは最大 1,000 です。

  • 1 つのパッケージは、最大 100,000 の MaxCompute プロジェクトにインストールできます。

  • 1 つの MaxCompute プロジェクトから別の MaxCompute プロジェクトにインストールできるパッケージは、最大 100 個です。

  • 1 つの MaxCompute プロジェクトに作成できるパッケージは、最大 100,000 個です。

  • 1 つの MaxCompute プロジェクトにインストールできるパッケージは、最大 100,000 個です。

パッケージの作成

MaxCompute プロジェクト内にパッケージを作成します。

  • 構文

    create package <package_name>;
  • パラメーター

    パラメーター

    必須

    説明

    package_name

    はい

    パッケージの名前です。プロジェクト内で一意である必要があります。名前の長さは 1~128 文字で、英字、数字、アンダースコア (_) が使用可能です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • この例では、test_project_a プロジェクトの所有者である Alibaba Cloud アカウント Bob@aliyun.com が、test_project_a プロジェクト内の特定のリソースへのアクセスを他のプロジェクトに認可するためにパッケージを作成します。サンプルコマンド:

    -- test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- パッケージを作成します。
    create package datashare;

パッケージへのリソースの追加

パッケージ作成者は、作成したパッケージに、パッケージユーザーが必要とするリソースを追加します。

  • 構文

    add <object_type> <object_name> to package <package_name> [with privileges <privileges>];
  • 制限

    プロジェクトをパッケージに追加することはできません。

  • 注意事項

    パッケージにリソースを追加する際、リソースはスナップショットとしてパッケージ化されません。リソースがパッケージに追加された後にリソースデータが更新された場合、パッケージユーザーは最新のリソースデータにアクセスします。

  • パラメーター

    パラメーター

    必須

    説明

    object_type

    はい

    パッケージに追加するオブジェクトのタイプです。一度に指定できるオブジェクトタイプは 1 つだけです。

    オブジェクトタイプの詳細については、「権限」をご参照ください。

    object_name

    はい

    パッケージに追加するオブジェクトの名前です。オブジェクト名は、次のいずれかの方法で取得できます:

    説明
    • リソースを追加する際に、ワイルドカード (*) を使用できます。たとえば、 add table * to package package_name; は、すべてのテーブルをパッケージに追加します。

    • パッケージにリソースを追加する際、リソース名を「プロジェクト名.リソース名」のフォーマットで指定しないでください。たとえば、プロジェクト A の table という名前のテーブルをパッケージに追加する場合、リソース名として A.table を指定しないでください。リソース名として table を指定する必要があります。

    package_name

    はい

    パッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

    privileges

    いいえ

    パッケージ内のリソースに対する操作権限です。このパラメーターを指定しない場合、デフォルトでリソースに対する読み取り、Describe、Select 権限がパッケージに追加されます。リソースとリソースに対する操作権限は不可分であり、パッケージに追加した後は更新できません。パッケージ内のリソースまたはこれらのリソースに対する操作権限を更新する場合は、パッケージ内のリソースを削除してから、更新されたリソースとリソースに対する操作権限を再度パッケージに追加する必要があります。

    操作権限の詳細については、「権限」をご参照ください。

  • 使用例

    作成したパッケージに、test_project_a プロジェクトのリソースファイル udtf.jar とテーブル sale_detail および bank_data を追加します。コマンドの例:

    -- パッケージにリソースを追加します。
    add resource udtf.jar to package datashare;
    add table sale_detail to package datashare;
    add table bank_data to package datashare;

パッケージからのリソースの削除

パッケージ作成者は、作成したパッケージからリソースを削除します。

  • 構文

    remove <object_type> <object_name> from package <package_name>; 
  • パラメーター

    パラメーター

    必須

    説明

    object_type

    はい

    パッケージから削除するオブジェクトのタイプ。一度に 1 つのオブジェクトのみを削除できます。

    オブジェクトタイプの詳細については、「権限」をご参照ください。

    object_name

    はい

    パッケージから削除するオブジェクトの名前。オブジェクト名は、次のいずれかの方法で取得できます。

    package_name

    はい

    パッケージの名前。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • datashare パッケージから sale_detail テーブルを削除します。サンプルコマンド:

    -- パッケージからリソースを削除
    remove Table sale_detail from package datashare;

プロジェクトへのパッケージ使用の承認

プロジェクトのパッケージ作成者は、作成したパッケージを他のプロジェクトが使用できるように承認します。

  • 構文

    allow project <project_name> to install package <package_name> [using label <number>];
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    はい

    パッケージの使用を許可する MaxCompute プロジェクトの名前です。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

    number

    いいえ

    このパラメーターを使用して、ラベルベースのアクセス制御ポリシーを追加します。このパラメーターは、パッケージユーザーがアクセスできるデータの秘密度レベルを指定します。承認された MaxCompute プロジェクトは、number で指定されたレベル以下の秘密度レベルを持つパッケージデータにのみアクセスできます。このパラメーターを指定しない場合、秘密度レベルはデフォルトで 0 になります。

    ラベルベースのアクセス制御の詳細については、「ラベルベースのアクセス制御」をご参照ください。

  • test_project_a プロジェクトで作成された datashare パッケージを、test_project_b がインストールできるように承認します。コマンドの例:

    -- test_project_b プロジェクトにパッケージのインストールを許可します。
    allow project test_project_b to install package datashare;

プロジェクトからのパッケージに対するアクセス権限の取り消し

パッケージ作成者は、プロジェクトからパッケージに対するアクセス権限を取り消します。

  • 構文

    disallow project <project_name> to install package <package_name>;
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    はい

    パッケージへのアクセス権限を取り消す対象となる MaxCompute プロジェクトの名前。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_b プロジェクトが test_project_a プロジェクトの datashare パッケージをインストールする権限を取り消します。サンプルコマンド:

    -- パッケージの認可を取り消します。
    disallow project test_project_b to install package datashare;

パッケージの削除

パッケージの作成者は、パッケージを削除します。

  • 構文

    delete|drop package <package_name>;
  • 注意事項

    パッケージを削除すると、このパッケージで付与された権限に関する情報がクリアされます。

  • パラメーター

    パラメーター

    必須

    説明

    package_name

    はい

    削除するパッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_a プロジェクトで作成した datashare パッケージを削除します。コマンド例:

    -- パッケージを削除します。
    drop package datashare;

パッケージの表示

パッケージ作成者は、MaxCompute プロジェクトで作成またはインストールされたパッケージを表示します。

  • 構文

    show packages;
  • test_project_a プロジェクトで作成またはインストールされたパッケージの情報を表示します。コマンド例:

    -- パッケージのリストを表示します。
    show packages;

    返される結果には、次の情報が含まれます:

    • パッケージ名:作成またはインストールされたパッケージの名前。

    • 作成時刻:パッケージの作成時刻。

    • ソースプロジェクト:パッケージが属する MaxCompute プロジェクトの名前。

    • インストール時刻:パッケージのインストール時刻。

    • ステータス:パッケージの状態。

    +-------------+--------------------------+
    | 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

    必須

    パッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_a プロジェクトの datashare パッケージのリソースと権限を表示します。コマンド例:

    -- datashare パッケージの詳細を表示します。
    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>; コマンドでそのリソースと権限を表示できます。

  • パラメーター

    パラメーター

    必須

    説明

    プロジェクト名

    はい

    パッケージが属する MaxCompute プロジェクトの名前。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_b プロジェクトに、 test_project_a プロジェクトの datashare パッケージをインストールします。この例では、Alibaba Cloud アカウント Amy@aliyun.com が test_project_b プロジェクトの所有者です。サンプルコマンド:

    -- test_project_b プロジェクトに切り替えます。
    use test_project_b; 
    -- パッケージをインストールします。
    install package test_project_a.datashare;

インストール済みパッケージの詳細の表示

パッケージユーザーは、MaxCompute プロジェクトにインストールされているパッケージの詳細を表示できます。

  • 構文

    describe package <project_name>.<package_name>;
  • パラメーター

    パラメーター

    必須

    説明

    project_name

    はい

    パッケージが属する MaxCompute プロジェクトの名前です。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_a プロジェクトにインストールされている datashare パッケージ内のリソースと権限を表示します。コマンドの例:

    -- パッケージの詳細を表示します。
    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 の独立したオブジェクトの一種です。パッケージ内のリソースにアクセスするには、パッケージの読み取り権限が必要です。読み取り権限がない場合、プロジェクトオーナー、およびスーパー管理者または管理者ロールが割り当てられたユーザーが、アクセスコントロールリスト (ACL) を使用して読み取り権限を付与できます。ACL ベースのアクセスコントロールの詳細については、「ACL ベースのアクセスコントロール」をご参照ください。

  • 構文

    grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>;
  • 注意事項

    ユーザーまたはロールに読み取り権限が付与された後、そのユーザーまたはロールは、パッケージがインストールされているプロジェクト内でのみパッケージ内のリソースにアクセスできます。パッケージの権限をきめ細かく管理する方法の詳細については、「パッケージのアクセスコントロール」をご参照ください。

  • パラメーター

    パラメーター

    必須

    説明

    actions

    はい

    パッケージ内のリソースの操作権限です。値には Read を設定します。

    project_name

    はい

    パッケージが属する MaxCompute プロジェクトの名前です。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前です。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

    name

    はい

    アクセス権限を付与するユーザーアカウントまたはロールの名前です。1 回の権限付与操作で指定できるユーザーアカウントまたはロールは 1 つだけです。

    MaxCompute クライアントlist users; または list roles; コマンドを実行して、ユーザーアカウントまたはロール名を取得できます。

  • この例では、Bella は Alibaba Cloud アカウント Amy@aliyun.com の RAM ユーザーです。Bella に datashare パッケージへのアクセス権限を付与します。コマンドの例:

    -- Bella にパッケージへのアクセス権限を付与します。
    grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;

ユーザーまたはロールのパッケージアクセス権限の取り消し

パッケージユーザーは、パッケージがインストールされている MaxCompute プロジェクトで、ユーザーまたはロールからパッケージへのアクセス権限を取り消します。

  • 構文

    revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>;
  • パラメーター

    パラメーター

    必須

    説明

    actions

    はい

    パッケージ内のリソースに対する操作権限。値を Read に設定します。

    project_name

    はい

    パッケージが属する MaxCompute プロジェクトの名前。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

    name

    はい

    パッケージへのアクセス権限を取り消す対象のユーザーアカウントまたはロールの名前。1 回の取り消し操作で指定できるユーザーアカウントまたはロールは 1 つのみです。

    MaxCompute クライアントlist users; または list roles; コマンドを実行すると、ユーザーアカウントまたはロール名を確認できます。

  • Bella からパッケージへのアクセス権限を取り消します。サンプルコマンド:

     -- ユーザー RAM$Amy@aliyun.com:Bella からパッケージへのアクセスを取り消します。
    revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;

パッケージのアンインストール

MaxCompute プロジェクトにインストールされているパッケージをアンインストールします。

  • 構文

    uninstall package <project_name>.<package_name>;
  • パラメーター

    パラメーター

    必須

    説明

    プロジェクト名

    はい

    パッケージが属する MaxCompute プロジェクトの名前。

    MaxCompute コンソールにログインし、左上でリージョンを選択してから、プロジェクト管理 タブでプロジェクト名を見つけます。

    package_name

    はい

    パッケージの名前。

    MaxCompute クライアントshow packages; コマンドを実行すると、作成されたすべてのパッケージを表示できます。

  • test_project_a プロジェクトにインストールされている datashare パッケージをアンインストールするコマンド例を次に示します。

    -- パッケージをアンインストールします。
    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 クライアントで次の手順を実行します:

  1. test_project_a プロジェクトに切り替え、Alibaba Cloud アカウント Bob@aliyun.com を使用してパッケージを作成します。

    -- test_project_a プロジェクトに切り替えます。
    use test_project_a; 
    -- パッケージを作成します。
    create package datashare;
  2. Alibaba Cloud アカウント Bob@aliyun.com を使用して、作成したパッケージにリソースを追加します。

    -- パッケージにリソースを追加します。
    add resource udtf.jar to package datashare;
    add table sale_detail to package datashare;
    add table bank_data to package datashare;
  3. Alibaba Cloud アカウント Bob@aliyun.com を使用して、test_project_b プロジェクトにパッケージのインストールを認可します。

    -- test_project_b プロジェクトにパッケージのインストールを許可します。
    allow project test_project_b to install package datashare;
  4. test_project_b プロジェクトに切り替え、Alibaba Cloud アカウント Amy@aliyun.com を使用してパッケージをインストールします。

    -- test_project_b プロジェクトに切り替えます。
    use test_project_b;
    -- パッケージをインストールします。
    install package test_project_a.datashare; 
    -- パッケージ内のリソースのリストを表示します。
    describe package test_project_a.datashare; 
    -- 次の結果が返されます:
    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  |
    +--------------+------------------------------------------+------------------+
  5. Alibaba Cloud アカウント Amy@aliyun.com を使用して、Bella にパッケージへのアクセスを認可します。

    -- Bella にパッケージへのアクセスを認可します。
    grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella; 
  6. Bella が sale_detail テーブルをクエリします。

    SELECT * FROM test_project_a.sale_detail;

関連ドキュメント