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

MaxCompute:プロジェクトデータの保護

最終更新日:Jan 20, 2025

ビジネス処理中、ユーザは、同時に複数のプロジェクトに対するアクセス許可を有することができる。 この場合、プロジェクト間でデータを転送すると、セキュリティ上のリスクが発生します。 プロジェクトデータのセキュリティを確保するために、MaxComputeはデータの流出を制御するプロジェクトデータ保護機能を提供しています。 このトピックでは、MaxComputeのプロジェクトデータ保護機能と、プロジェクトデータ保護機能とともに使用できるデータ流出ポリシーについて説明します。

背景情報

一部の企業は高いデータセキュリティ要件を持っています。 機密データの漏洩を防ぐためにさまざまな対策を講じています。 たとえば、従業員は職場でのみ仕事をすることができ、職場から作業資料を持ち出すことは許可されていません。 オフィスコンピュータのすべてのUSBポートは無効です。 ユーザーがプロジェクトから別のプロジェクトにデータを転送するセキュリティの問題が発生する可能性があります。

たとえば、ユーザーAliceはProject1とProject2に対するアクセス許可を持っています。 Aliceには、Project1のtable1テーブルに対するSelect権限と、Project2に対するCreateTable権限があります。 この場合、プロジェクトデータ保護機能が無効になっている場合、Aliceは次のステートメントを実行して、テーブル1のデータをProject1からProject2に転送できます。 この操作は、機密データのリークリスクを引き起こします。

create table project2.table2 as select * from project1.table1;

上記の例は、複数のMaxComputeプロジェクトに対するアクセス権限を同時に持つユーザーが、プロジェクト間でデータを転送できることを示しています。 MaxComputeは、プロジェクトデータ保護機能を提供します。 機密性の高いデータがプロジェクトに存在する場合、プロジェクトの所有者はプロジェクトデータ保護機能を有効にする必要があります。

MaxComputeプロジェクトでは、プロジェクトデータ保護機能はデフォルトで無効になっています。 プロジェクトの所有者は、プロジェクトに対してset projectProtection=true; コマンドを実行して、プロジェクトデータ保護機能を有効にできます。 これにより、データはプロジェクトにのみ流入でき、プロジェクトから流出することはできません。

注意事項

プロジェクトデータ保護機能を有効にした後、次の点に注意してください。

  • プロジェクト間データアクセス操作は、プロジェクトデータ保護ルールに違反しているため実行できません。 特定のデータが他のプロジェクトに流出できるようにする場合は、MaxComputeが提供する次の方法のいずれかを使用できます。データ流出ポリシー1: 例外ポリシーの設定およびデータ流出ポリシー2: 信頼できるプロジェクトの設定

  • プロジェクトデータ保護機能はデータフローを制御しますが、データに対するアクセス許可は制御しません。 データフロー制御は、ユーザーがデータに対するアクセス権限を持っている場合にのみ意味があります。

  • MaxComputeでは、パッケージベースのリソース共有機能はプロジェクトデータ保護機能とは独立しています。 これらの特徴の効果は、相互に排他的である。 パッケージベースのリソース共有は、プロジェクトデータ保護よりも優先されます。 たとえば、プロジェクトBのユーザーに、パッケージベースのリソース共有を使用してプロジェクトaのオブジェクトに対するアクセス許可が付与されている場合、プロジェクトデータ保護機能はオブジェクトに対して有効になりません。

データ流出ポリシー1: 例外ポリシーの設定

プロジェクト間データアクセス操作が必要な場合、プロジェクト所有者は事前に例外ポリシーを設定して、指定したユーザーが指定したオブジェクトのデータを現在のプロジェクトから指定したプロジェクトに転送できるようにする必要があります。 例外ポリシーが設定された後、プロジェクトデータ保護機能が有効になっていても、オブジェクトのデータを指定されたプロジェクトに転送できます。

例外ポリシーの設定

プロジェクトデータ保護機能を有効にすると、例外ポリシーを設定します。 例外ポリシーの設定後、show SecurityConfiguration; コマンドを実行して例外ポリシーの情報を表示できます。 例外ポリシーを設定するためのコマンド:

set ProjectProtection=true with exception <policyfile>;

policyfileは、例外ポリシーのファイルを示します。 MaxComputeクライアントのインストールパスのbinディレクトリにTXTファイルとしてファイルを保存する必要があります。 次の例は、policyfileファイルの内容を示しています。

    {
    "Version": "1",
    "Statement":
    [{
        "Effect":"Allow",
        "Principal":"<Principal>",
        "Action":["odps:<Action1>[, <Action2>, ...]"],
        "Resource":"acs:odps:*:<Resource>",
        "Condition":{
            "StringEquals": {
                "odps:TaskType":["<Tasktype>"]
            }
        }
    }]
    }

パラメーター

説明

Effect

データの流出を許可するかどうかを指定します。 値を許可に設定します。 この値は、データを流出させることを示す。

Principal

プロジェクトからデータを転送できるAlibaba CloudアカウントまたはRAMユーザー。

Action

プロジェクトからデータを転送できるアクション。 さまざまなタイプのオブジェクトに対して実行されるアクションの詳細については、MaxCompute権限.

Resource

データの流出が許可されるオブジェクトと、オブジェクトが属するプロジェクト。 形式: projects/<project_name>/{tables | リソース | 関数 | インスタンス}/<name> オブジェクトの詳細については、MaxCompute権限.

Tasktype

データを流出させるジョブの種類。 有効な値: DT、SQL、およびMapReduce。 DTはトンネルを示す。

-- Enable the project data protection feature and configure an exception policy. The policy_file file is stored in the bin directory of the installation path of the MaxCompute client. 
set ProjectProtection=true with exception policy_file;  
-- The policy_file file contains the following content: 
{
    "Version": "1",
    "Statement":
    [{
        "Effect":"Allow",
        "Principal":"ALIYUN$Alice@aliyun.com",
        "Action":["odps:Select"],
        "Resource":"acs:odps:*:projects/project_test/tables/table_test",
        "Condition":{
            "StringEquals": {
                "odps:TaskType":["DT", "SQL"]
            }
        }
    }]
    }

上記の例では、AliceがSQLジョブのproject_test.table_testテーブルに対してSelect操作を実行して、project_testプロジェクトから他のプロジェクトにデータを転送できることを示しています。

説明

Aliceにproject_test.table_testテーブルに対するSelect権限がない場合、例外ポリシーが設定されていても、Aliceはプロジェクトからデータを転送できません。

注意事項

この方法では、競合状態とも呼ばれるTOCTOU (time-of-use) エラーが原因でデータが漏洩する可能性があります。

  • 問題の説明

    次の例では、ユーザーがプロジェクトからデータを転送する方法について説明します。

    1. TOC段階: ユーザAは、t1テーブル内のデータをエクスポートするために、プロジェクト所有者にアプリケーションを提出する。 プロジェクト所有者がt1テーブルに機密データが含まれていないことを確認した後、プロジェクト所有者は例外ポリシーを構成して、ユーザーAがt1テーブルのデータをエクスポートできるようにします。

    2. TOUステージが開始する前に、他のユーザーは機密データをt1テーブルに書き込みます。

    3. TOUステージ: ユーザーAはt1テーブルのデータをエクスポートします。 ただし、エクスポートされるt1テーブルのデータには、他のユーザーによって書き込まれた機密データが含まれています。

  • 解決策

    この問題を防ぐために、プロジェクト所有者は、他のユーザーがテーブルを更新するためのUpdateアクションを実行しないようにするか、テーブルを削除して同じ名前のテーブルを作成するためのDropおよびCreateTableアクションを実行しないようにすることをお勧めします。 上記の例では、プロジェクト所有者がTOCステージでt1テーブルのスナップショットを作成し、このスナップショットを使用して例外ポリシーを設定することを推奨します。 さらに、他のユーザーに管理者ロールが割り当てられていないことを確認します。

データ流出ポリシー2: 信頼できるプロジェクトの設定

現在のプロジェクトでプロジェクトデータ保護機能が有効になっているが、データの流出が必要な場合、プロジェクト所有者は、現在のプロジェクトの信頼できるプロジェクトとしてターゲットプロジェクトを構成できます。 このようにして、プロジェクトのデータを信頼できるプロジェクトに転送できます。 複数のプロジェクトが互いに信頼できるプロジェクトとして指定されている場合、これらのプロジェクトは信頼できるプロジェクトグループを形成します。 これらのプロジェクトのデータは、グループ内でのみ転送できます。

信頼できるプロジェクトの管理

プロジェクト所有者は、次のコマンドを実行して信頼できるプロジェクトを管理できます。

  • 現在のプロジェクトに信頼できるプロジェクトを追加するには、次のコマンドを実行します。

     add trustedproject <project_name>;               
  • 現在のプロジェクトから信頼できるプロジェクトを削除するには、次のコマンドを実行します。

     remove trustedproject <project_name>;            
  • 現在のプロジェクトのすべての信頼できるプロジェクトを照会するには、次のコマンドを実行します。

     list trustedprojects;                  

ベストプラクティス

プロジェクトのデータが他のプロジェクトに転送されないようにするには、プロジェクト所有者はprojectProtectionをtrueに設定し、次の操作を実行して設定を確認する必要があります。

  • list trustedprojects; コマンドを実行し、信頼できるプロジェクトがプロジェクトに構成されていないことを確認します。 信頼できるプロジェクトがプロジェクトに設定されている場合、プロジェクト所有者は潜在的なリスクを評価する必要があります。 プロジェクト所有者は、remove trustedproject <project_name>; コマンドを実行して、不要な信頼済みプロジェクトを削除できます。

  • show packages; コマンドを実行し、プロジェクトでデータ共有パッケージが使用されていないことを確認します。 データ共有パッケージがプロジェクトで使用されている場合、プロジェクト所有者は、パッケージに機密データが含まれていないことを確認する必要があります。 プロジェクト所有者は、delete package <package_name>; コマンドを実行して、不要なデータ共有パッケージを削除できます。

  • プロジェクトのプロジェクトデータ保護機能を有効にして、データがプロジェクトからエクスポートされないようにすることができます。 プロジェクトデータ保護機能の使用は、プロジェクト間でデータを移行するために使用される機能の使用と似ています。 次のシナリオがサポートされています。

    • ステートメントcreate table <Table in another project> as select * from <Table in a protected project> を実行します。

    • ステートメントinsert overwrite table <Tables in another project> select * from <Tables in a protected project> を実行します。

    • Sparkジョブ、MapReduceジョブ、Graphジョブ、Proxima CE、およびMachine Learning Platform for AI (PAI) ジョブを実行して、別のプロジェクトのテーブルにテーブルデータを書き込みます。

    • Tunnel downloadコマンドを実行して、MaxComputeテーブルデータをオンプレミスマシンにダウンロードします。 SDK Tunnelを呼び出すか、Java Database Connectivity (JDBC) ドライバーを使用してTunnelを呼び出すことができます。

    • CLONE TABLEコマンドを実行して、テーブルデータを別のプロジェクトのテーブルにコピーします。

    • ユーザー定義関数 (UDF) を呼び出して、他のプロジェクトのテーブルにテーブルデータを書き込みます。

    • UDFを呼び出して、テーブルデータをMaxCompute外部テーブルに書き込みます。

  • プロジェクトデータ保護機能とダウンロードアクセス制御は、プロジェクトがデータをダウンロードするために使用できます。 プロジェクトからデータをダウンロードする場合は、プロジェクトに関連する権限があるかどうかを確認する必要があります。

    • プロジェクトデータ保護機能とプロジェクトのダウンロードアクセス制御を有効にした場合、プロジェクトのダウンロードと説明の権限があれば、プロジェクトからデータをダウンロードできます。 Tunnelダウンロードコマンドを実行する前に、Describe認証がトリガーされます。

    • プロジェクトデータ保護機能を有効にし、プロジェクトのダウンロードアクセス制御を無効にした場合、プロジェクトに対して [選択] 権限を持っているときにプロジェクトからデータをダウンロードし、ダウンロード動作の例外ポリシーを設定できます。

    • プロジェクトデータ保護機能を無効にし、プロジェクトのダウンロードアクセス制御を有効にすると、プロジェクトのダウンロードおよび説明権限がある場合に、プロジェクトからデータをダウンロードできます。

    • プロジェクトデータ保護機能とプロジェクトのダウンロードアクセス制御を無効にした場合、プロジェクトに対して [選択] 権限を持っていれば、プロジェクトからデータをダウンロードできます。