Elastic Algorithm Service (EAS) は、暗号化されたモデルのデプロイと推論のための安全な暗号化環境を提供し、ライフサイクル全体を通じてデータとモデルの安全性を確保します。金融サービスやエンタープライズアプリケーションなどの高いセキュリティが求められるシナリオに適しています。
仕組み
このソリューションには、次のステップが含まれます。
モデルの暗号化:Gocryptfs または Sam を使用してモデルを暗号化し、暗号化されたモデルを Object Storage Service (OSS) にアップロードして EAS にマウントします。
復号鍵の保存:ACK サーバーレスクラスターに Trustee リモートアテステーションサービスをデプロイして、デプロイメント環境と推論環境を検証します。Key Management Service (KMS) が復号鍵を保存します。
ステップ 2:PAI-EAS を使用した暗号化モデルのデプロイ
暗号化されたモデルをデプロイすると、EAS は Trustee サービスに接続して環境を検証します。検証後、KMS キーを使用してモデルを復号し、EAS サービスとしてマウントします。
デプロイ後、サービスに接続して推論リクエストを送信します。
ステップ 1:暗号化されたモデルの準備
モデルをクラウドにデプロイする前に、モデルを暗号化してクラウドストレージにアップロードします。復号鍵は KMS によって管理され、リモートアテステーションサービスによって制御されます。モデルの暗号化は、ローカルまたは信頼できる環境で実行してください。この例では、Qwen2.5-3B-Instruct 大規模言語モデル (LLM) を使用します。
1. モデルの準備 (任意)
独自のモデルをお持ちの場合は、このセクションをスキップして「2. モデルの暗号化」に進むことができます。
Qwen2.5-3B-Instruct モデルには Python 3.9 以降が必要です。ModelScope ツールを使用してモデルをダウンロードするには、ターミナルで次のコマンドを実行します。
pip3 install modelscope importlib-metadata
modelscope download --model Qwen/Qwen2.5-3B-Instruct成功すると、モデルは ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/ にダウンロードされます。
2. モデルの暗号化
PAI-EAS は 2 つの暗号化方式をサポートしています。この例では Sam を使用します。
Gocryptfs:AES-256-GCM に基づく暗号化モードで、オープンソースの Gocryptfs 標準に準拠しています。
Sam:Alibaba Cloud の信頼できる AI モデル暗号化フォーマットで、モデルの機密性を保護し、ライセンスコンテンツの改ざんや不正使用を防ぎます。
オプション 1:Sam 暗号化の実行
Sam 暗号化モジュールパッケージ RAI_SAM_SDK_2.1.0-20240731.tgz をダウンロードします。次に、次のコマンドを実行してパッケージを解凍します。
# Sam 暗号化モジュールを解凍します。 tar xvf RAI_SAM_SDK_2.1.0-20240731.tgzSam 暗号化モジュールを使用してモデルを暗号化します。
# Sam 暗号化モジュールの暗号化ディレクトリに移動します。 cd RAI_SAM_SDK_2.1.0-20240731/tools # モデルを暗号化します。 ./do_content_packager.sh <model_directory> <plaintext_key> <key_ID>ここで:
<model_directory>:暗号化するモデルのディレクトリです。相対パスまたは絶対パスを指定できます。例:
~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/。<plaintext_key>:長さが 4~128 バイトのカスタム暗号鍵です。例:
0Bn4Q1wwY9fN3P。このプレーンテキストキーは、Trustee リモートアテステーションサービスにアップロードする必要があるモデル復号鍵です。<key_ID>:長さが 8~48 バイトのカスタムキー識別子です。例:
LD_Demo_0001。
暗号化が完了すると、モデルは現在のパス内の
<key_ID>ディレクトリに暗号文として保存されます。
オプション 2:Gocryptfs 暗号化の実行
Gocryptfs ツールをインストールしてモデルを暗号化します。現在、デフォルトの暗号化パラメーターを使用する Gocryptfs v2.4.0 のみがサポートされています。次のいずれかのインストール方法を選択できます。
方法 1:(推奨) yum ソースからのインストール
Alinux 3 または AnolisOS 23 オペレーティングシステムを使用している場合は、yum ソースを使用して Gocryptfs をインストールできます。
Alinux 3
sudo yum install gocryptfs -yAnolisOS 23
sudo yum install anolis-epao-release -y sudo yum install gocryptfs -y方法 2:プリコンパイル済みバイナリファイルの直接ダウンロード
# プリコンパイル済みの Gocryptfs パッケージをダウンロードします。 wget https://github.jobcher.com/gh/https://github.com/rfjakob/gocryptfs/releases/download/v2.4.0/gocryptfs_v2.4.0_linux-static_amd64.tar.gz # パッケージを解凍してインストールします。 tar xf gocryptfs_v2.4.0_linux-static_amd64.tar.gz sudo install -m 0755 ./gocryptfs /usr/local/binGocryptfs キーファイルを作成し、モデル暗号鍵として使用します。このキーは、後のステップで管理するために Trustee リモートアテステーションサービスにアップロードする必要があります。
このトピックでは、
0Bn4Q1wwY9fN3Pをキーとしてモデルを暗号化します。キーの内容はcachefs-passwordファイルに保存されます。キーをカスタマイズすることもできます。実際には、ランダムに生成された強力なキーを使用することを推奨します。cat << EOF > ~/cachefs-password 0Bn4Q1wwY9fN3P EOF作成したキーを使用してモデルを暗号化します。
プレーンテキストモデルのパスを設定します。
説明ダウンロードしたプレーンテキストモデルが配置されているパスを指定します。他のモデルがある場合は、パスをターゲットモデルの実際のパスに置き換えてください。
PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/Gocryptfs を使用してモデルのディレクトリツリーを暗号化します。
暗号化が完了すると、モデルは
./cipherディレクトリに暗号文として保存されます。mkdir -p ~/mount cd ~/mount mkdir -p cipher plain # Gocryptfs のランタイム依存関係をインストールします。 sudo yum install -y fuse # Gocryptfs を初期化します。 cat ~/cachefs-password | gocryptfs -init cipher # plain にマウントします。 cat ~/cachefs-password | gocryptfs cipher plain # AI モデルを ~/mount/plain に移動します。 cp -r ${PLAINTEXT_MODEL_PATH}/. ~/mount/plain
3. モデルのアップロード
EAS は、暗号化されたモデルに対してさまざまなストレージバックエンドをサポートしています。デプロイ中に、復号されたモデルをサービスインスタンスにマウントします。詳細については、「ストレージのマウント」をご参照ください。
この例では OSS を使用します。バケットとディレクトリ (例:oss://examplebucket/qwen-encrypted/) を作成します。「クイックスタート」をご参照ください。大規模なモデルファイルの場合は、ossbrowser を使用してアップロードします。
ossutil コマンドラインツールを使用する場合は、マルチパートアップロードを使用することを推奨します。
次の図は、Sam で暗号化されたモデルをアップロードした後の結果を示しています。Gocryptfs を使用する場合、ファイル名は暗号化された文字化けとして表示されます。
4. リモートアテステーションサービスの設定とキーのアップロード
復号鍵はリモートアテステーションサービスによって管理され、モデルと推論サービスのランタイム環境を検証します。キーは、EAS 環境が期待される信頼条件を満たした場合にのみ挿入されます。
Trustee リモートアテステーションサービスを ACK サーバーレスクラスターにデプロイします。安全なキーストレージには Alibaba Cloud KMS を使用します。
ACK クラスターのリージョンは、EAS サービスがデプロイされるターゲットリージョンと同じである必要はありません。
Alibaba Cloud KMS インスタンスは、Alibaba Cloud Trustee リモートアテステーションサービスがデプロイされている ACK クラスターと同じリージョンにある必要があります。
KMS インスタンスと ACK クラスターを作成する前に、VPC と 2 つの vSwitch を作成する必要があります。詳細については、「VPC の作成と管理」をご参照ください。
キーストレージバックエンドとして Alibaba Cloud KMS インスタンスを作成します。
Key Management Service コンソールに移動します。左側のペインで、を選択します。[ソフトウェアキー管理] タブで、インスタンスを作成して起動します。インスタンスを起動する際は、ACK クラスターと同じ VPC を選択します。詳細については、「KMS インスタンスの購入と有効化」をご参照ください。
インスタンスが起動するまで約 10 分待ちます。
インスタンスが起動したら、左側のペインでを選択します。[キー管理] ページで、インスタンスのカスタマーマスターキー (CMK) を作成します。詳細については、「ステップ 1:ソフトウェア保護キーの作成」をご参照ください。
左側のペインで、を選択します。[アクセスポイント] ページで、インスタンスのアプリケーションアクセスポイントを作成します。[範囲] を作成した KMS インスタンスに設定します。その他のパラメーターについては、「方法 1:クイック作成」をご参照ください。
アプリケーションアクセスポイントが作成されると、ブラウザは自動的に
ClientKey***.zipファイルをダウンロードします。.zip ファイルを解凍すると、次のファイルが含まれています。クライアントキーコンテンツ (ClientKeyContent):デフォルトのファイル名は
clientKey_****.jsonです。認証情報パスワード (ClientKeyPassword):デフォルトのファイル名は
clientKey_****_Password.txtです。
ページで、KMS インスタンスの名前をクリックします。[基本情報] セクションで、[インスタンス CA 証明書] の横にある [ダウンロード] をクリックして、KMS インスタンスの公開鍵証明書ファイル
PrivateKmsCA_***.pemをエクスポートします。
ACK クラスターを作成し、csi-provisioner コンポーネントをインストールできます。
クラスターの作成ページに移動して、ACK サーバーレスクラスターを作成します。次の表に、主要なパラメーターを示します。その他のパラメーターについては、「ACK クラスターの作成」をご参照ください。
クラスター構成:次のパラメーターを設定し、[次へ:コンポーネント構成] をクリックします。
主要な構成
説明
VPC
[既存のものを使用] を選択し、[VPC の SNAT を設定] を選択します。そうしないと、Trustee イメージをプルできません。
VSwitch
既存の VPC に少なくとも 2 つの vSwitch が作成されていることを確認してください。そうしないと、パブリック ALB Ingress を公開できません。
コンポーネント設定:以下のパラメーターを設定後、[次へ: 設定の確認] をクリックします。
主要な設定
説明
[サービスディスカバリー]
[CoreDNS] を選択します。
[Ingress]
[ALB Ingress] を選択します。 ALB クラウドネイティブゲートウェイインスタンスのソースには、[新規作成] を選択し、2つの vSwitch を選択します。
構成の確認:構成情報と利用規約を確認します。次に、[クラスターの作成] をクリックします。
クラスターが作成されたら、csi-provisioner (マネージド) コンポーネントをインストールします。詳細については、「コンポーネントの管理」をご参照ください。
ACK クラスターに Trustee リモートアテステーションサービスをデプロイします。
インターネットまたは内部ネットワーク経由でクラスターに接続します。詳細については、「クラスターへの接続」をご参照ください。
ダウンロードした KMS インスタンスアプリケーション ID 認証情報 (
clientKey_****.json)、認証情報パスワード (clientKey_****_Password.txt)、および CA 証明書 (PrivateKmsCA_***.pem) を、ACK サーバーレスクラスターに接続されている環境にアップロードします。次のコマンドを実行して Trustee リモートアテステーションサービスをデプロイし、Alibaba Cloud KMS をキーストレージバックエンドとして使用します。# プラグインをインストールします。 helm plugin install https://github.com/AliyunContainerService/helm-acr helm repo add trustee acr://trustee-chart.cn-hangzhou.cr.aliyuncs.com/trustee/trustee helm repo update export DEPLOY_RELEASE_NAME=trustee export DEPLOY_NAMESPACE=default export TRUSTEE_CHART_VERSION=1.7.6 # ACK クラスターのリージョンを設定します。例:cn-hangzhou。 export REGION_ID=cn-hangzhou # エクスポートされた KMS インスタンスに関する情報。 # ご利用の KMS インスタンス ID に置き換えてください。 export KMS_INSTANCE_ID=kst-hzz66a0*******e16pckc # ご利用の KMS インスタンスアプリケーション ID 認証情報へのパスに置き換えてください。 export KMS_CLIENT_KEY_FILE=/path/to/clientKey_KAAP.***.json # ご利用の KMS インスタンス認証情報パスワードへのパスに置き換えてください。 export KMS_PASSWORD_FILE=/path/to/clientKey_KAAP.***_Password.txt # ご利用の KMS インスタンス CA 証明書へのパスに置き換えてください。 export KMS_CERT_FILE=/path/to/PrivateKmsCA_kst-***.pem helm install ${DEPLOY_RELEASE_NAME} trustee/trustee \ --version ${TRUSTEE_CHART_VERSION} \ --set regionId=${REGION_ID} \ --set kbs.aliyunKms.enabled=true \ --set kbs.aliyunKms.kmsIntanceId=${KMS_INSTANCE_ID} \ --set-file kbs.aliyunKms.clientKey=${KMS_CLIENT_KEY_FILE} \ --set-file kbs.aliyunKms.password=${KMS_PASSWORD_FILE} \ --set-file kbs.aliyunKms.certPem=${KMS_CERT_FILE} \ --namespace ${DEPLOY_NAMESPACE}説明プラグインをインストールする最初のコマンド (
helm plugin install...) の実行には時間がかかる場合があります。インストールに失敗した場合は、helm plugin uninstall cm-pushコマンドを実行してプラグインをアンインストールし、再度プラグインインストールコマンドを実行してください。次の例は、サンプル出力を示しています。
NAME: trustee LAST DEPLOYED: Tue Feb 25 18:55:33 2025 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: NoneACK サーバーレスクラスターに接続されている環境で、次のコマンドを実行して Trustee のエンドポイントを取得します。
export TRUSTEE_URL=http://$(kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}')/api echo ${TRUSTEE_URL}サンプル出力は
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/apiです。ACK サーバーレスクラスターに接続されている環境で、次のコマンドを実行して Trustee サービスの接続性をテストします。
cat << EOF | curl -k -X POST ${TRUSTEE_URL}/kbs/v0/auth -H 'Content-Type: application/json' -d @- { "version":"0.4.0", "tee": "tdx", "extra-params": "foo" } EOFTrustee サービスが正常に実行されている場合、期待される出力は次のとおりです。
{"nonce":"PIDUjUxQdBMIXz***********IEysXFfUKgSwk=","extra-params":""}
Trustee のネットワークホワイトリストを設定します。
説明この構成により、PAI-EAS モデルデプロイメント環境がリモートアテステーションサービスにアクセスして環境のセキュリティチェックを実行できるようになります。
Alibaba Cloud Application Load Balancer (ALB) コンソールに移動し、アクセス制御ポリシーグループを作成し、Trustee へのアクセス権限を持つ IP アドレスまたは CIDR ブロックを IP エントリとして追加します。詳細については、「アクセスの制御」をご参照ください。追加する必要がある CIDR ブロックは次のとおりです。
デプロイ中に EAS サービスがバインドされる VPC のパブリック IP アドレス。
推論クライアントの送信元 IP アドレス。
次のコマンドを実行して、クラスター上の Trustee インスタンスが使用する Server Load Balancer (SLB) インスタンスの ID を取得します。
kubectl get ing --namespace ${DEPLOY_NAMESPACE} frontend-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' | cut -d'.' -f1 | sed 's/[^a-zA-Z0-9-]//g'期待される出力は次のとおりです。
alb-llcdzbw0qivhk0****Alibaba Cloud ALB コンソールの左側にあるナビゲーションウィンドウで、を選択します。クラスターが配置されているリージョンで、前のステップで取得した ALB インスタンスを検索し、インスタンス ID をクリックしてインスタンス詳細ページに移動します。ページの下部にある [インスタンス属性] セクションで、[設定の読み取り専用モードを無効化] をクリックします。
[リスナー] タブに切り替えます。対象のリスナーのアクセスの制御列で **[有効化]** をクリックして、前の手順で作成したアクセス制御ポリシーグループとしてホワイトリストを設定します。
モデル復号鍵を保存するためのシークレットを作成します。
Trustee によって管理されるモデル復号鍵は KMS に保存されます。キーには、リモートアテステーションサービスがターゲット環境を検証した後にのみアクセスできます。
Key Management Service コンソールに移動します。左側のペインで、 を選択します。[汎用シークレット] タブで、[シークレットの作成] をクリックします。次の表では、キーパラメーターについて説明します。
シークレット名:キーをインデックス付けするために使用されるカスタムシークレット名。例:
model-decryption-key。シークレット値の設定:モデルの暗号化に使用されるキー。例:`0Bn4Q1wwY9fN3P`。実際のキーを使用してください。
暗号化マスターキー:前のステップで作成したマスターキーを選択します。
Trustee 管理インターフェイスにログインして、過去のキーアクセスレコードを表示します。
Trustee フロントエンド管理インターフェイスのアドレスを取得します。
kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}'ブラウザでアドレスにアクセスします。
Trustee フロントエンド管理インターフェイスにログインするための秘密鍵を取得します。
kubectl get secret kbs-auth-keypair -o jsonpath="{.data.private\.key}" | base64 -dキーをフロントエンドインターフェイスに貼り付けて、ログインを完了します。
Trustee Gateway Management Platform で、左側のナビゲーションウィンドウの [監査ログ] をクリックします。ページの中央にある [リソース監査インターフェイス] をクリックして、モデル復号鍵アクセスの履歴レコードを表示します。
ステップ 2:PAI-EAS を使用した暗号化モデルのデプロイ
-
PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。
[伸縮性アルゴリズムサービス (EAS)] ページで、[サービスのデプロイ] をクリックします。[カスタムモデルのデプロイメント] セクションで、[カスタムデプロイメント] をクリックします。
[カスタムデプロイメント] ページで、次のキーパラメーターを設定します。その他のパラメーターについては、「カスタムデプロイメント」をご参照ください。
パラメーター
説明
環境コンテキスト
デプロイ方法
[イメージベースのデプロイメント] を選択します。
イメージ構成
イメージを選択します。この例では、[公式イメージ] > [chat-llm-webui:3.0-vllm] を使用します。
ストレージマウント
[+OSS] ボタンをクリックし、次のパラメーターを設定します:
Uri:モデルの暗号文が配置されているディレクトリを選択します。例:
oss://examplebucket/qwen-encrypted/。実際のパスを使用してください。マウントパス:プレーンテキストモデルがマウントされるディレクトリ。例:
/mnt/model。
実行コマンド
構成例は
python webui/webui_server.py --port=8000 --model-path=/mnt/model --backend=vllmです。--model-pathの値は、復号されたモデルを読み取るためのマウントパスと同じでなければならないことに注意してください。ポート番号
このソリューションでは、ポート番号を 8000 に設定します。
環境変数
Trustee リモートアテステーションサービスによる検証のために環境変数を追加できます。このソリューションでは、キーが
eas-testで値が123の環境変数を追加します。リソースデプロイ
デプロイリソース
このソリューションでは、リソース仕様 ml.gu7i.c32m188.1-gu30 を選択します。
VPC
VPC
VPC を設定し、VPC の SNAT パブリックネットワーク送信元 IP を設定して、EAS のパブリックネットワークアクセスを有効にします。これにより、EAS はリモートアテステーションサービスにアクセスし、環境のセキュリティチェックを実行できます。
vSwitch
セキュリティグループ名
サービス機能
安全な暗号化環境の設定
[セキュアな暗号化環境の設定] スイッチをオンにし、以下のパラメーターを設定します:
ファイル暗号化方式:モデルの暗号化に使用される方式。Sam と Gocryptfs がサポートされています。このソリューションでは、Sam を選択します。
システム信頼管理サービスアドレス:デプロイされた Trustee サービスのアドレス。例:
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee。復号鍵の KBS URI:モデル復号鍵の KBS URI。フォーマットは
kbs:///default/aliyun/<secret_name_of_the_key>です。<secret_name_of_the_key>を、前のステップで作成したシークレットの名前に置き換えます。
次の例は、最終的な JSON 構成を示しています。
パラメーターを設定した後、[デプロイ] をクリックします。
[サービスステータス] が [実行中] になると、サービスはデプロイされます。その後、Trustee 管理インターフェイスにログインして、過去のキーアクセスレコードを表示できます。これにより、Trustee リモートアテステーションサービスがモデルデプロイメント環境を検証したかどうかを確認し、実行環境に関する詳細情報を表示できます。
ステップ 3:サービスの呼び出しと安全な推論
1. サービスエンドポイントの表示
[推論サービス] タブで、対象のサービス名をクリックして [概要] ページを開きます。[基本情報] エリアで、[エンドポイント情報を表示] をクリックします。
2. EAS サービスの呼び出し
次の cURL コマンドを実行して、推論リクエストを送信します。
curl <Service_URL> \
-H "Content-type: application/json" \
--data-binary @openai_chat_body.json \
-v \
-H "Connection: close" \
-H "Authorization: <Token>"次の表に、パラメーターを示します。
<Service_URL>:EAS サービスのエンドポイント。
<Token>:EAS サービスのトークン。
openai_chat_body.json は元の推論リクエストです。次のコードは、サンプルリクエストの内容を示しています。
{ "max_new_tokens": 4096, "use_stream_chat": false, "prompt": "What is the capital of Canada?", "system_prompt": "Act like you are a knowledgeable assistant who can provide information on geography and related topics.", "history": [ [ "Can you tell me what's the capital of France?", "The capital of France is Paris." ] ], "temperature": 0.8, "top_k": 10, "top_p": 0.8, "do_sample": true, "use_cache": true }
次の例は、サンプル応答を示しています。
{
"response": "The capital of Canada is Ottawa.",
"history": [
[
"Can you tell me what's the capital of France?",
"The capital of France is Paris."
],
[
"What is the capital of Canada?",
"The capital of Canada is Ottawa."
]
]
}