O EAS oferece suporte a ambientes de criptografia confidencial para implantação segura de modelos criptografados e execução de inferências. Essa abordagem fornece segurança em várias camadas, mantendo dados e modelos protegidos durante todo o ciclo de vida. Utilize este recurso em cenários com altos requisitos de sensibilidade de dados, como serviços financeiros, governo e aplicações corporativas.
Como funciona
A inferência confidencial envolve três etapas:
-
Criptografe o modelo: utilize Gocryptfs ou Sam para criptografia e faça upload para uma fonte de dados, como Object Storage Service (OSS), para que o EAS possa montá-lo durante a implantação.
Armazene a chave de descriptografia: guarde a chave no Key Management Service (KMS) por meio de um serviço de atestação remota implantado no ACK Serverless. Isso permite validar a segurança do ambiente de implantação do modelo e do ambiente de inferência.
-
Step 2: Deploy the encrypted model by using PAI-EAS
Ao implantar um modelo criptografado com o PAI-EAS, o sistema se conecta automaticamente ao serviço de atestação remota Trustee para validar o ambiente de implantação. Após a validação bem-sucedida, o EAS utiliza a chave no KMS para descriptografar e montar o modelo, implantando-o como um serviço EAS.
-
Step 3: Call the service to run confidential inference
Após a implantação, envie solicitações de inferência para o serviço.
Etapa 1: Preparar um modelo criptografado
Antes da implantação, criptografe o modelo e faça upload para o armazenamento em nuvem. Um serviço de atestação remota controla o acesso à chave de descriptografia gerenciada pelo KMS. Criptografe seu modelo em um ambiente local ou confiável. Este exemplo utiliza o Qwen2.5-3B-Instruct.
1. Preparar o modelo (opcional)
Se você já possui um modelo, pule esta seção e prossiga para 2. Encrypt the model.
Utilize o ModelScope para baixar o modelo Qwen2.5-3B-Instruct. É necessário Python 3.9 ou superior.
pip3 install modelscope importlib-metadata
modelscope download --model Qwen/Qwen2.5-3B-Instruct
O modelo será baixado para o diretório ~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/.
2. Criptografar o modelo
O PAI-EAS suporta os dois métodos de criptografia a seguir. Este exemplo utiliza Sam.
Gocryptfs: criptografia AES-256-GCM compatível com o padrão de código aberto Gocryptfs.
Sam: formato de criptografia de modelos de IA confiáveis da Alibaba Cloud que impede o uso não autorizado e a adulteração de licenças.
Opção 1: Criptografar com Sam
-
Baixe e extraia o pacote do módulo de criptografia Sam RAI_SAM_SDK_2.1.0-20240731.tgz.
# Extract the Sam encryption module tar xvf RAI_SAM_SDK_2.1.0-20240731.tgz -
Criptografe o modelo.
# Navigate to the encryption directory of the Sam encryption module cd RAI_SAM_SDK_2.1.0-20240731/tools # Encrypt the model ./do_content_packager.sh <model_directory> <plaintext_key> <key_ID>Parâmetros:
<model_directory>: diretório do modelo a ser criptografado. Caminhos relativos ou absolutos são suportados, como
~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/.<plaintext_key>: chave de criptografia personalizada, de 4 a 128 bytes, como
0Bn4Q1wwY9fN3P. Faça upload desta chave posteriormente para o serviço de atestação remota Trustee.<key_ID>: identificador de chave personalizado, de 8 a 48 bytes, por exemplo,
LD_Demo_0001.
Após a criptografia, o modelo criptografado estará no diretório
<key_ID>dentro do caminho atual. Visualize os arquivos gerados no diretório correspondente ao ID da chave:RAI_SAM_SDK_2.1.0-20240731/tools/LD_Demo_0001# ll drwx------ 2 root root 4096 2月 25 11:47 ./ drwxrwxr-x 4 1004 1004 4096 2月 26 15:08 ../ -rw-r--r-- 1 root root 1365 2月 25 11:47 config.json -rw-r--r-- 1 root root 706 2月 25 11:47 configuration.json -rw-r--r-- 1 root root 946 2月 25 11:47 generation_config.json -rw-r--r-- 1 root root 8092 2月 25 11:47 LICENSE -rw-r--r-- 1 root root 1672543 2月 25 11:47 merges.txt -rw-r--r-- 1 root root 3968659648 2月 25 11:47 model-00001-of-00002.safetensors -rw-r--r-- 1 root root 2203268752 2月 25 11:47 model-00002-of-00002.safetensors -rw-r--r-- 1 root root 36285 2月 25 11:47 model.safetensors.index.json -rw-r--r-- 1 root root 5605 2月 25 11:47 README.md -rw-r--r-- 1 root root 166 2月 25 11:47 sam.lic -rw-r--r-- 1 root root 8009 2月 25 11:47 tokenizer_config.json -rw-r--r-- 1 root root 7032349 2月 25 11:47 tokenizer.json -rw-r--r-- 1 root root 2777537 2月 25 11:47 vocab.json
Opção 2: Criptografar com Gocryptfs
-
Instale o Gocryptfs v2.4.0 com parâmetros de criptografia padrão. Apenas a versão v2.4.0 é suportada.
Método 1: (Recomendado) Instalar via repositório yum
Para Alinux 3 ou AnolisOS 23, instale o Gocryptfs a partir do repositório yum.
Alinux 3
sudo yum install gocryptfs -yAnolisOS 23
sudo yum install anolis-epao-release -y sudo yum install gocryptfs -yMétodo 2: Baixar o binário pré-compilado
# Download the pre-compiled Gocryptfs package 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 # Extract and install tar xf gocryptfs_v2.4.0_linux-static_amd64.tar.gz sudo install -m 0755 ./gocryptfs /usr/local/bin -
Crie um arquivo de chave Gocryptfs para usar como chave de criptografia do modelo. Posteriormente, você fará upload dessa chave para o Trustee para hospedagem.
Este exemplo usa
0Bn4Q1wwY9fN3Pcomo chave de criptografia do modelo e a armazena no arquivocachefs-password. Você pode usar sua própria chave. Em produção, utilize uma chave forte gerada aleatoriamente.cat << EOF > ~/cachefs-password 0Bn4Q1wwY9fN3P EOF -
Utilize a chave criada para criptografar o modelo.
-
Configure o caminho do modelo em texto simples.
NotaEspecifique o caminho do seu modelo em texto simples. Substitua caso esteja usando um modelo diferente.
PLAINTEXT_MODEL_PATH=~/.cache/modelscope/hub/models/Qwen/Qwen2.5-3B-Instruct/ -
Use o Gocryptfs para criptografar o diretório do modelo.
Após a criptografia, o modelo é armazenado como texto cifrado no diretório
./cipher.mkdir -p ~/mount cd ~/mount mkdir -p cipher plain # Install Gocryptfs runtime dependencies sudo yum install -y fuse # initialize gocryptfs cat ~/cachefs-password | gocryptfs -init cipher # mount to plain cat ~/cachefs-password | gocryptfs cipher plain # move AI model to ~/mount/plain cp -r ${PLAINTEXT_MODEL_PATH}/. ~/mount/plain
-
3. Fazer upload do modelo
Modelos criptografados aceitam diversos backends de armazenamento. O EAS monta o modelo descriptografado na instância de serviço durante a implantação. Para mais informações, consulte Storage mounts.
Este exemplo utiliza o Object Storage Service (OSS). Siga as instruções em Console quick start para criar um bucket e um diretório chamado qwen-encrypted, por exemplo, oss://examplebucket/qwen-encrypted/. Para arquivos de modelo grandes, utilize ossbrowser para fazer upload do modelo criptografado para o diretório.
Se você utilizar o ossutil command-line tool, use multipart upload.
A listagem a seguir mostra o resultado para um modelo criptografado com Sam.
Com Gocryptfs, os nomes dos arquivos também são criptografados e aparecem como texto ilegível.
Após a conclusão do upload, o diretório qwen-encrypted/ deve conter os seguintes arquivos:
Shards de pesos do modelo:
model-00001-of-00002.safetensors(3,696 GB),model-00002-of-00002.safetensors(2,052 GB) e arquivo de índicemodel.safetensors.index.jsonArquivos de configuração:
config.json,configuration.json,generation_config.jsonArquivos do tokenizador:
tokenizer.json,tokenizer_config.json,merges.txt,vocab.jsonLicença de criptografia:
sam.licOutros:
LICENSE,README.md
4. Configurar o serviço de atestação e fazer upload da chave
Hospede a chave de descriptografia do modelo no serviço de atestação remota. Esse serviço de validação, gerenciado pelo usuário, verifica os ambientes de execução tanto do modelo quanto do serviço de inferência. A chave de descriptografia do modelo é injetada, e o modelo é descriptografado e montado, somente após a confirmação de que o ambiente de implantação do modelo EAS atende ao nível de confiança esperado.
Atualmente, o EAS suporta um serviço de atestação remota Trustee autogerenciado hospedado na Alibaba Cloud. Implante o serviço de atestação remota em um cluster ACK Serverless para validar os ambientes de implantação e inferência, e utilize o KMS para hospedar a chave de descriptografia. Siga as etapas abaixo:
O cluster ACK Serverless não precisa estar na mesma região do serviço EAS.
A instância KMS deve estar na mesma região do cluster ACK Serverless onde o serviço de atestação remota Trustee está implantado.
Crie uma VPC e dois vSwitches antes de criar a instância KMS e o cluster ACK. Para mais informações, consulte Create and manage a VPC.
-
Crie uma instância KMS como backend de armazenamento de chaves.
-
Acesse o console KMS. No painel de navegação à esquerda, escolha . Na aba Software Key Management, crie e ative uma instância. Ao ativar a instância, selecione a mesma Virtual Private Cloud (VPC) do cluster ACK. Para mais informações, consulte Purchase and enable a KMS instance.
A ativação leva cerca de 10 minutos.
Após a ativação da instância, no painel de navegação à esquerda, escolha . Na página Keys, crie uma chave mestra de cliente (CMK) para a instância. Para mais informações, consulte Step 1: Create a software key.
-
No painel de navegação à esquerda, escolha . Na aba Application Access, crie um ponto de acesso de aplicação para a instância. Em Scope, selecione a instância KMS criada. Para mais detalhes de configuração, consulte Method 1: Quick creation.
Após a criação do ponto de acesso da aplicação, seu navegador baixará automaticamente um arquivo
ClientKey***.zip. Ao extrair o arquivo compactado, ele conterá:Credential (ClientKeyContent): o nome padrão do arquivo é
clientKey_****.json.Credential Password (ClientKeyPassword): o nome padrão do arquivo é
clientKey_****_Password.txt.
Acesse a página e clique em Details ao lado de Instance CA Certificate para exportar o arquivo de certificado de chave pública
PrivateKmsCA_***.pem.
-
-
Crie um cluster ACK Serverless e instale o componente csi-provisioner.
-
Acesse a página Create cluster para criar um cluster ACK Serverless. Para mais informações, consulte Create an ACK Serverless cluster. Parâmetros principais:
-
Cluster configurations: configure os seguintes parâmetros e clique em Next: Component configurations.
Parâmetro
Descrição
Download
Selecione Use Existing e marque a caixa de seleção VPC. Isso é necessário para baixar a imagem do Trustee.
Configure SNAT for VPC
Garanta que existam pelo menos dois vSwitches na VPC. Caso contrário, não será possível expor um ALB público.
-
Component configurations: configure os seguintes parâmetros e clique em Next: Confirm configuration.
Parâmetro
Descrição
vSwitch
Selecione Service Discovery.
CoreDNS
Selecione Ingress. Para a origem da instância do gateway nativo da nuvem ALB, selecione New e escolha dois vSwitches.
Confirm configuration: confirme as informações de configuração e os termos de serviço e clique em ALB Ingress.
-
Após a criação do cluster, instale o componente csi-provisioner (Managed). Para mais informações, consulte Manage components.
-
-
Implante o serviço de atestação remota Trustee no cluster ACK.
Conecte-se ao cluster pela rede pública ou por uma rede interna. Para mais informações, consulte Connect to a cluster.
-
Faça upload da credencial KMS (
clientKey_****.json), da senha (clientKey_****_Password.txt) e do certificado CA (PrivateKmsCA_***.pem) para o ambiente do cluster ACK Serverless. Em seguida, execute o comando abaixo para implantar o Trustee com o KMS como backend de chaves.# Install the plugin 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 # Set the region of the ACK cluster, for example, cn-hangzhou export REGION_ID=cn-hangzhou # Information about the KMS instance that you exported # Replace with your KMS instance ID export KMS_INSTANCE_ID=kst-hzz66a0*******e16pckc # Replace with the path to your KMS instance application identity credential export KMS_CLIENT_KEY_FILE=/path/to/clientKey_KAAP.***.json # Replace with the path to your KMS instance credential password export KMS_PASSWORD_FILE=/path/to/clientKey_KAAP.***_Password.txt # Replace with the path to your KMS instance CA certificate 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}NotaO primeiro comando no bloco de código anterior,
helm plugin install..., pode levar muito tempo para concluir. Se a instalação falhar, executehelm plugin uninstall cm-pushpara desinstalar o plugin e, em seguida, execute novamente o comando de instalação do plugin.Exemplo de saída:
NAME: trustee LAST DEPLOYED: Tue Feb 25 18:55:33 2025 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None -
Obtenha o endpoint do serviço Trustee.
export TRUSTEE_URL=http://$(kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}')/api echo ${TRUSTEE_URL}Exemplo de saída:
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/api. -
Teste a conectividade do serviço 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" } EOFUma conexão bem-sucedida retorna uma saída semelhante a:
{"nonce":"PIDUjUxQdBMIXz***********IEysXFfUKgSwk=","extra-params":""}
-
Configure uma lista de permissões de rede para o Trustee.
NotaEsta configuração permite que o ambiente de implantação de modelos do PAI-EAS acesse ativamente o serviço de atestação remota e realize verificações de segurança do ambiente.
-
Acesse o console ALB, crie um grupo de políticas de controle de acesso e adicione os endereços IP ou intervalos de endereços que precisam acessar o Trustee. Para mais informações, consulte Access control. Adicione os seguintes intervalos de endereços:
O endereço IP público da VPC onde o serviço EAS está implantado.
O endereço IP de saída do cliente de inferência.
-
Execute o seguinte comando para obter o ID da instância ALB usada pela instância Trustee.
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'Saída esperada:
alb-llcdzbw0qivhk0**** No painel de navegação à esquerda do console ALB, escolha . Localize a instância ALB da etapa anterior na região do seu cluster e clique em seu ID para ir à página de detalhes. Na parte inferior da página, na seção Instances, desative o Instance Information.
Mude para a aba Configuration Read-only Mode. Na coluna de controle de acesso do listener alvo, ative o controle de acesso e defina a lista de permissões como o grupo de políticas de controle de acesso criado.
-
-
Crie um segredo para armazenar a chave de descriptografia do modelo.
O Trustee armazena a chave de descriptografia do modelo no KMS. A chave é liberada apenas após a atestação bem-sucedida.
Acesse o console KMS. No painel de navegação à esquerda, escolha . Na aba Secrets, clique em Generic Secrets. Os parâmetros principais estão descritos abaixo:
Secret name: um nome personalizado usado para indexar a chave, por exemplo,
model-decryption-key.Secret value: insira a chave usada para criptografar o modelo. Por exemplo, 0Bn4Q1wwY9fN3P. Use sua chave real.
Encryption key: selecione a chave mestra de cliente (CMK) criada.
-
Faça login na interface de gerenciamento do Trustee para visualizar o histórico de acesso às chaves.
-
Obtenha o endereço da interface de gerenciamento frontend do Trustee.
kubectl get AlbConfig alb-$DEPLOY_RELEASE_NAME -o jsonpath='{.status.loadBalancer.dnsname}'Acesse o endereço em um navegador.
-
Obtenha a chave privada para fazer login na interface de gerenciamento frontend do Trustee.
kubectl get secret kbs-auth-keypair -o jsonpath="{.data.private\.key}" | base64 -dCole a chave na interface para fazer login.
Na Trustee Gateway Management Platform, clique em Audit log no painel de navegação à esquerda. Em seguida, clique na Resource audit interface para visualizar o histórico de acesso à chave de descriptografia do modelo.
-
Etapa 2: Implantar o modelo criptografado usando o PAI-EAS
Faça login no PAI console. Selecione uma região no topo da página. Em seguida, selecione o workspace desejado e clique em Create Secret.
Na página Elastic Algorithm Service (EAS), clique em Inference Service. Na seção Deploy Service, clique em Custom Model Deployment.
-
Configure os seguintes parâmetros. Outras opções estão descritas em Custom Deployment.
Parâmetro
Descrição
Custom Deployment
Environment Information
Selecione Deployment Method.
Image-based Deployment
Selecione uma imagem de runtime. Neste exemplo, selecione Image Configuration > chat-llm-webui:3.0-vllm.
Alibaba Cloud Image
Selecione OSS e configure os seguintes parâmetros:
-
Uri: selecione o diretório onde o modelo criptografado está armazenado. Exemplo:
oss://examplebucket/qwen-encrypted/. Use seu caminho real. -
Storage Mount: o diretório onde o modelo em texto simples será montado. Exemplo:
/mnt/model.
Mount Path
Exemplo:
python webui/webui_server.py --port=8000 --model-path=/mnt/model --backend=vllm. O valor de--model-pathdeve corresponder ao caminho de montagem.Command to Run
Defina como 8000.
Port Number
Adicione variáveis de ambiente para a atestação do Trustee. Neste exemplo, adiciona-se uma variável de ambiente com a chave
eas-teste o valor123.Environment Variables
Resource Information
Neste exemplo, o tipo de instância é ml.gu7i.c32m188,1-gu30.
Deployment
Network Information
Configure uma VPC e set an SNAT public IP address for the VPC. O acesso à rede pública é necessário para que o EAS alcance o serviço de atestação remota.
VPC
vSwitch
Security Group Name
Features
Ative Configure Secure Encryption Environment e configure os seguintes parâmetros:
-
Configure Secure Encryption Environment: o método usado para criptografar o modelo. Tanto Sam quanto Gocryptfs são suportados. Este exemplo usa Sam.
-
Encryption Method: o endpoint do serviço Trustee implantado. Exemplo:
http://alb-ppams74szbwg2f****.cn-shanghai.alb.aliyuncsslb.com/trustee. -
System Trust Management Service Address: o URI KBS da chave de descriptografia do modelo, formatado como
kbs:///default/aliyun/<secret_name>. Substitua<secret_name>pelo nome do segredo criado.
Exemplo de configuração JSON:
-
-
Após configurar os parâmetros, clique em KBS URI of Decryption Key.
Quando o service status mostrar Running, o serviço estará implantado. Você pode então check the key access history in the Trustee management UI para confirmar se o serviço de atestação remota Trustee concluiu a validação do ambiente de implantação do modelo e para visualizar informações detalhadas do ambiente de execução.
No console de gerenciamento do Trustee, selecione Deploy no painel de navegação à esquerda e vá para a aba Audit Logs para visualizar os registros de auditoria. Clique na coluna de operação de um registro para abrir a caixa de diálogo Attestation Audit, que exibe o status geral de verificação do EAR Token (por exemplo, Token Details), tempo de expiração, identificadores de desenvolvedor e build, além do status de verificação de cada dispositivo (por exemplo, cpu0 como valid). Mude para a aba affirming para visualizar evidências de atestação no formato JSON, incluindo runtime_data_claims (nonce, tee-pubkey), AA_INSTANCE_INFO (ID da instância, nome da instância, entre outros) e outros detalhes do ambiente de execução.
Etapa 3: Chamar o serviço para executar inferência confidencial
1. Visualizar o endpoint do serviço
Na aba Evidence Details, clique no nome do serviço alvo para abrir a página Inference Service. Na área Overview, clique em Overview.
2. Chamar o serviço EAS
Envie uma solicitação de inferência usando cURL.
curl <Service_URL> \
-H "Content-type: application/json" \
--data-binary @openai_chat_body.json \
-v \
-H "Connection: close" \
-H "Authorization: <Token>"
Parâmetros:
<Service_URL>: o endpoint do serviço EAS.
<Token>: o token do serviço EAS.
-
openai_chat_body.json: o corpo da solicitação de inferência. Exemplo:
{ "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 }
Exemplo de resposta:
{
"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."
]
]
}