Um operador de carga de trabalho pode transmitir opções para uma instância de VM de carga de trabalho do Confidential Space para determinar o comportamento dela antes da execução. Embora algumas flags tenham valores obrigatórios que não mudam, você ainda precisa fazer as seguintes escolhas:
Se a instância de VM será baseada em uma imagem de produção ou depuração do Confidential Space.
Se você quer usar AMD SEV, Intel TDX ou Intel TDX com NVIDIA Confidential Computing (Pré-lançamento) para manter a privacidade dos dados da sua carga de trabalho.
Quais variáveis de metadados da VM precisam ser transmitidas, incluindo detalhes como qual imagem de contêiner de carga de trabalho executar, se é necessário fazer login no Cloud Logging e quais variáveis de ambiente definir.
Qual conta de serviço anexar à VM para executar a carga de trabalho e quais permissões ela precisa para acessar dados confidenciais em outros projetos e gravar os resultados em algum lugar.
Em qual zona a instância de VM deve ser executada.
Confira um exemplo que cria uma VM confidencial e executa um contêiner do Docker chamado WORKLOAD_CONTAINER_NAME:
Cargas de trabalho baseadas em CPU
gcloud compute instances create INSTANCE_NAME \
--confidential-compute-type=CONFIDENTIAL_COMPUTING_TECHNOLOGY \
--machine-type=MACHINE_TYPE_NAME \
--maintenance-policy=MAINTENANCE_POLICY \
--shielded-secure-boot \
--image-project=confidential-space-images \
--image-family=IMAGE_FAMILY \
--metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest" \
--service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
--scopes=cloud-platform \
--zone=ZONE_NAME \
--project=PROJECT_ID
Forneça os valores a seguir:
INSTANCE_NAME
: o nome da nova instância de VM.CONFIDENTIAL_COMPUTING_TECHNOLOGY
: o tipo de tecnologia de computação confidencial a ser usada. Escolha um dos seguintes valores:SEV
TDX
MACHINE_TYPE_NAME
: o tipo de máquina da VM, por exemplo,n2d-standard-2
. Os tipos de máquinas válidos para instâncias de VM confidencial são determinados pela tecnologia de Computação Confidencial escolhida, AMD SEV ou Intel TDX. Consulte Tipos de máquinas, CPUs e zonas.MAINTENANCE_POLICY
: para tipos de máquina N2D que usam SEV, defina comoMIGRATE
para oferecer suporte à migração dinâmica. Para todos os outros tipos de máquina, defina esse valor comoTERMINATE
, já que eles não são compatíveis com a migração em tempo real.IMAGE_FAMILY_NAME
: a família das imagens do Confidential Space. Escolha uma destas opções:confidential-space
para cargas de trabalho de produçãoconfidential-space-debug
para cargas de trabalho de depuração
WORKLOAD_AUTHOR_PROJECT
: o ID do projeto que hospeda o repositório do Artifact Registry em que o contêiner da carga de trabalho está armazenado.REPOSITORY_NAME
: o nome do repositório do Artifact Registry em que o contêiner da carga de trabalho está armazenado.WORKLOAD_CONTAINER_NAME
: o nome do contêiner da carga de trabalho.WORKLOAD_SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que executa a carga de trabalho.WORKLOAD_OPERATOR_PROJECT_ID
: o ID do projeto que executa a carga de trabalho.ZONE_NAME
: a zona em que a instância de VM é executada, por exemplo,us-west1-b
. O Confidential Space exige os seguintes serviços, que estão disponíveis em locais específicos:VM confidencial, com base na tecnologia de computação confidencial em uso
PROJECT_ID
: opcional. O ID do projeto em que a instância de VM será criada.
Cargas de trabalho baseadas em GPU
Antes de começar
O Confidential Space só é compatível com o Confidential Computing da NVIDIA (prévia) em GPUs H100.
Para garantir que haja cota de GPU suficiente para os recursos solicitados, verifique sua cota de GPU. Para instâncias de VM confidenciais com GPUs, solicite uma cota de GPU preemptiva para usar os recursos. Quando você solicita cota de GPU, precisa pedir uma cota para os modelos de GPU que quer criar em cada região e outra cota global (
GPUs (all regions)
) para o número total de GPUs de todos os tipos em todas as regiões.Para entender o consumo de cota, confira VMs de GPU e cotas de alocação preemptivas.
Leia as limitações para criar uma solicitação de redimensionamento em um MIG.
Para instalar os drivers necessários para o Confidential Computing da NVIDIA (prévia), transmita a variável de metadados
tee-install-gpu-driver
com o valortrue
.Para drivers NVIDIA e o kit de ferramentas CUDA, é recomendável um disco de inicialização de VM com 30 GB ou mais de espaço.
Implantar uma carga de trabalho baseada em GPU
Para implantar uma carga de trabalho baseada em GPU, crie uma instância de VM confidencial usando o modelo de provisionamento spot ou flex-start (prévia).
Spot
Para usar o modelo de provisionamento spot, crie uma instância de VM otimizada para aceleradores.
gcloud compute instances create INSTANCE_NAME \
--provisioning-model=SPOT \
--confidential-compute-type=TDX \
--machine-type=a3-highgpu-1g \
--maintenance-policy=TERMINATE \
--shielded-secure-boot \
--image-project=confidential-space-images \
--image-family=IMAGE_FAMILY_NAME \
--metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \
--service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \
--scopes=cloud-platform \
--boot-disk-size=30G \
--zone=ZONE_NAME \
--project=PROJECT_ID
Forneça os valores a seguir:
INSTANCE_NAME
: o nome da nova instância de VM.IMAGE_FAMILY_NAME
: a família das imagens do Confidential Space. Escolha uma destas opções:confidential-space-preview-cgpu
para cargas de trabalho de produçãoconfidential-space-debug-preview-cgpu
para cargas de trabalho de depuração
WORKLOAD_AUTHOR_PROJECT
: o ID do projeto em que a carga de trabalho está sendo executada.REPOSITORY_NAME
: o nome do repositório do Artifact Registry.WORKLOAD_CONTAINER_NAME
: o nome do contêiner da carga de trabalho.WORKLOAD_SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que executa a carga de trabalho.WORKLOAD_OPERATOR_PROJECT_ID
: o ID do projeto que executa a carga de trabalho.ZONE_NAME
: uma das zonas que oferecem suporte à computação confidencial da NVIDIA (prévia).PROJECT_ID
: opcional. O ID do projeto em que a instância de VM será criada.
Início flexível
Para usar o modelo de provisionamento de início flexível (prévia), crie um modelo de instância e um grupo gerenciado de instâncias (MIG).
Criar um modelo de instância:
gcloud beta compute instance-templates create INSTANCE_TEMPLATE_NAME \ --provisioning-model=FLEX_START \ --confidential-compute-type=TDX \ --machine-type=a3-highgpu-1g \ --maintenance-policy=TERMINATE \ --shielded-secure-boot \ --image-project=confidential-space-images \ --image-family=IMAGE_FAMILY_NAME \ --metadata="^~^tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest~tee-install-gpu-driver=true" \ --service-account=WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com \ --scopes=cloud-platform \ --boot-disk-size=30G \ --reservation-affinity=none \ --max-run-duration=RUN_DURATION \ --instance-termination-action=DELETE \ --project=PROJECT_ID
Forneça os valores a seguir:
INSTANCE_TEMPLATE_NAME
: o nome do novo modelo de instância de VM.IMAGE_FAMILY_NAME
: a família das imagens do Confidential Space. Escolha uma destas opções:confidential-space-preview-cgpu
para cargas de trabalho de produçãoconfidential-space-debug-preview-cgpu
para cargas de trabalho de depuração
WORKLOAD_AUTHOR_PROJECT
: o ID do projeto em que a carga de trabalho está sendo executada.REPOSITORY_NAME
: o nome do repositório do Artifact Registry.WORKLOAD_CONTAINER_NAME
: o nome do contêiner da carga de trabalho.WORKLOAD_SERVICE_ACCOUNT_NAME
: o nome da conta de serviço que executa a carga de trabalho.WORKLOAD_OPERATOR_PROJECT_ID
: o ID do projeto que executa a carga de trabalho.RUN_DURATION
: a duração da execução das instâncias de VM solicitadas. Formate o valor como o número de dias, horas, minutos ou segundos, seguido pord
,h
,m
ous
, respectivamente. Por exemplo, especifique30m
para 30 minutos ou1d2h3m4s
para um dia, duas horas, três minutos e quatro segundos. O valor precisa estar entre 10 minutos e sete dias.PROJECT_ID
: opcional. O ID do projeto em que as instâncias de VM serão criadas.
Crie um MIG zonal usando o comando
instance-groups managed create
:gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \ --template=INSTANCE_TEMPLATE_NAME \ --size=0 \ --zone=ZONE_NAME \ --default-action-on-vm-failure=do_nothing
Forneça os valores a seguir:
INSTANCE_GROUP_NAME
: o nome do MIG;INSTANCE_TEMPLATE_NAME
: o nome do modelo de instância para VMs de GPU.ZONE_NAME
: uma das zonas que oferecem suporte à computação confidencial da NVIDIA (prévia).
No MIG, crie uma solicitação de redimensionamento. Especifique o número de instâncias de VM de GPU que você quer e a duração da execução dessas instâncias.
gcloud compute instance-groups managed resize-requests create INSTANCE_GROUP_NAME \ --resize-request=RESIZE_REQUEST_NAME \ --resize-by=COUNT \ --zone=ZONE_NAME
Forneça os valores a seguir:
INSTANCE_GROUP_NAME
: o nome do MIG;INSTANCE_TEMPLATE_NAME
: o nome do modelo de instância para instâncias de VM com GPU.ZONE_NAME
: uma das zonas que oferecem suporte à computação confidencial da NVIDIA (prévia).RESIZE_REQUEST_NAME
: o nome da solicitação de redimensionamento.COUNT
: o número de instâncias de VM a serem adicionadas de uma só vez no grupo.
A solicitação de redimensionamento criada permanece no estado
ACCEPTED
até que o MIG crie todas as instâncias de VM de GPU solicitadas. Depois que todas as instâncias de VM de GPU forem criadas no grupo, o estado da solicitação mudará paraSUCCEEDED
.Quando há recursos suficientes disponíveis para a solicitação de redimensionamento, as instâncias de VM são adicionadas ao MIG e iniciadas para executar a carga de trabalho. Para listar as instâncias presentes no MIG, execute o seguinte comando:
gcloud compute instance-groups managed list-instances INSTANCE_GROUP_NAME \ --zone=ZONE_NAME \ --project=PROJECT_ID
Forneça os valores a seguir:
INSTANCE_GROUP_NAME
: o nome do MIG;ZONE_NAME
: a zona compatível para receber uma lista de instâncias de VM.PROJECT_ID
: opcional. O ID do projeto para receber uma lista de instâncias de VM.
Conta de serviço anexada
Uma conta de serviço precisa ser anexada à VM confidencial de uma carga de trabalho para executar a carga de trabalho. A conta de serviço precisa ser configurada da seguinte maneira:
Com os seguintes papéis:
roles/confidentialcomputing.workloadUser
para gerar um token de atestado.roles/artifactregistry.reader
para recuperar uma imagem de contêiner de carga de trabalho armazenada no Artifact Registry.roles/logging.logWriter
se você quiser redirecionarSTDOUT
eSTDERR
para o Cloud Logging.
Com acesso de leitura a onde os colaboradores de dados armazenam os dados confidenciais, por exemplo, um bucket do Cloud Storage ou uma tabela do BigQuery.
Com acesso de gravação ao local em que a carga de trabalho deve gerar os dados, por exemplo, um bucket do Cloud Storage. Os colaboradores de dados precisam ter acesso de leitura a esse local.
Além disso, os colaboradores de dados e os operadores de carga de trabalho precisam configurar o seguinte:
Se os colaboradores de dados estiverem usando representação da conta de serviço em vez de acesso direto a recursos, eles precisarão adicionar a conta de serviço ao provedor do pool de identidades da carga de trabalho como uma condição de atributo:
'WORKLOAD_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
O operador de carga de trabalho precisa do papel
roles/iam.serviceAccountUser
para representar a conta de serviço. Isso permite que eles anexem a uma instância de VM de carga de trabalho para que ela possa executar a carga de trabalho.
Variáveis de metadados
É possível mudar o comportamento da VM de carga de trabalho do Confidential Space transmitindo variáveis
para a opção --metadata
ao criar a VM.
Para transmitir várias variáveis, primeiro defina o delimitador prefixando o valor --metadata
com ^~^
. Isso define o delimitador como ~
, já que ,
é usado em
valores variáveis.
Exemplo:
metadata="^~^tee-restart-policy=Always~tee-image-reference=us-docker.pkg.dev/WORKLOAD_AUTHOR_PROJECT_ID/REPOSITORY_NAME/WORKLOAD_CONTAINER_NAME:latest"
A tabela a seguir detalha as variáveis de metadados que podem ser definidas para a VM de carga de trabalho.
Chave de metadados | Tipo | Descrição e valores |
---|---|---|
Interage com:
|
String |
Obrigatório. Ele aponta para o local do contêiner da carga de trabalho. Exemplo
|
Interage com:
|
Matriz de strings JSON |
Adiciona outros recursos do Linux ao contêiner de carga de trabalho. Exemplo
|
Interage com:
|
Booleano |
O valor padrão é Exemplo
|
Interage com:
|
Matriz de strings JSON |
Substitui as instruções de
CMD
especificadas no
Exemplo
|
Interage com:
|
String definida |
Saída Os valores válidos são:
Um alto volume de registros no console serial pode afetar o desempenho da carga de trabalho. Exemplo
|
|
Número inteiro |
Define o tamanho em kB da montagem de memória compartilhada Exemplo
|
Interage com:
|
String |
Define variáveis de ambiente no contêiner da carga de trabalho. O autor da carga de trabalho também precisa adicionar os nomes das variável de ambiente à política de lançamento
Exemplo
|
Interage com:
|
String |
Uma lista de contas de serviço que podem ser representadas pelo operador de carga de trabalho. O operador de carga de trabalho precisa ter permissão para representar as contas de serviço. É possível listar várias contas de serviço separadas por vírgulas. Exemplo
|
Interage com:
|
Booleano |
Se o driver de GPU de computação confidencial da NVIDIA será instalado. Requer um tipo de máquina compatível com a Computação confidencial da NVIDIA (prévia). Exemplo
|
Interage com:
|
Booleano |
O valor padrão é Exemplo
|
Interage com:
|
String |
Uma lista de definições de montagem separadas por ponto e vírgula. Uma definição de montagem consiste em uma lista separada por vírgulas de pares de chave-valor, exigindo Exemplo
|
Interage com:
|
String definida |
A política de reinicialização do inicializador do contêiner quando a carga de trabalho é interrompida. Os valores válidos são:
Essa variável só é compatível com a imagem de produção do Confidential Space. Exemplo
|
Interage com:
|
String |
Uma lista de repositórios de contêineres separados por vírgulas que armazenam as assinaturas geradas pelo Sigstore Cosign. Exemplo
|
Escalonamento
Para escalonamento e alta disponibilidade de cargas de trabalho de produção do Confidential Space, consulte Grupos de instâncias gerenciadas.