Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, você usa a CLI do Azure para implantar um cluster do Serviço Kubernetes do Azure (AKS) e configurar Contêineres Confidenciais (visualização) com uma política de segurança gerada automaticamente. Em seguida, você implanta um aplicativo como um contêiner confidencial. Para saber mais, leia a visão geral dos Contêineres Confidenciais AKS.
Em geral, começar a usar os Contêineres Confidenciais do AKS envolve as seguintes etapas.
- Implantar ou atualizar um cluster AKS usando a CLI do Azure
- Adicione uma anotação ao manifesto YAML do pod para marcar o pod como usando contêineres confidenciais
- Adicionar uma política de segurança ao manifesto YAML do pod
- Implante seu aplicativo em computação confidencial
Importante
A partir de 30 de novembro de 2025, o Azure Kubernetes Service (AKS) deixou de suportar nem fornecer atualizações de segurança para o Azure Linux 2.0. A imagem da máquina virtual do Azure Linux 2.0 está congelada na versão 202512.06.0. A partir de 31 de março de 2026, as imagens dos nós serão removidas e não poderá ajustar o tamanho dos seus pools de nós. Migre para uma versão Azure Linux suportada atualizando os seus pools de nós para uma versão Kubernetes suportada ou migrando para o osSku AzureLinux3. Para mais informações, consulte a edição do Retirement GitHub e o anúncio de reforma do Azure Updates. Para se manter informado sobre anúncios e atualizações, siga as notas de lançamento do AKS.
Pré-requisitos
A versão 2.44.1 ou posterior da CLI do Azure. Execute
az --versionpara localizar a versão e executeaz upgradepara atualizar a versão. Se precisar de instalar ou atualizar, veja Install CLI do Azure (Instalar o CLI do Azure).A versão 0.5.169 ou posterior da extensão da CLI do Azure
aks-preview.A
confcomextensão da CLI do Azure para Contêiner Confidencial 0.3.3 ou posterior.confcomé necessário para gerar uma política de segurança.Registre o
Previewrecurso em sua assinatura do Azure.O AKS suporta Contentores Confidenciais (pré-visualização) na versão 1.25.0 e superior.
Uma identidade de carga de trabalho e uma credencial de identidade federada. A credencial de identidade de carga de trabalho permite que os aplicativos Kubernetes acessem os recursos do Azure com segurança com uma ID do Microsoft Entra com base em contas de serviço anotadas. Se você não estiver familiarizado com o ID de Carga de Trabalho do Microsoft Entra, consulte a Visão geral do ID de Carga de Trabalho do Microsoft Entra e analise como a Identidade da Carga de Trabalho funciona com o AKS.
A identidade que você está usando para criar seu cluster tem as permissões mínimas apropriadas. Para obter mais informações sobre acesso e identidade para AKS, consulte Opções de acesso e identidade para o Serviço Kubernetes do Azure (AKS).
Para gerir um cluster Kubernetes, utilize o cliente de linha de comandos do Kubernetes kubectl. O Azure Cloud Shell vem com
kubectl. Você pode instalar o kubectl localmente usando o comando az aks install-cli .Os contentores confidenciais no AKS fornecem um contentor sidecar de código aberto para atestado e libertação segura de chaves. O sidecar integra-se com um KMS (Serviço de Gerenciamento de Chaves), como o Azure Key Vault, para liberar uma chave para o grupo de contêineres após a conclusão da validação. A implantação de um HSM (Módulo de Segurança de Hardware) gerenciado pelo Azure Key Vault é opcional, mas recomendada para dar suporte à integridade e ao atestado no nível do contêiner. Consulte Aprovisionar e ativar um Managed HSM para implementar o Managed HSM.
Instalar a extensão aks-preview da CLI do Azure
Importante
As funcionalidades de pré-visualização do AKS estão disponíveis num regime de autosserviço e de adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de pré-visualização do AKS são apenas parcialmente abrangidas pelo suporte ao cliente, na medida do possível. Como tal, estas funcionalidades não se destinam a utilização em produção. Para obter mais informações, consulte os seguintes artigos de suporte:
Para instalar a extensão aks-preview, execute o seguinte comando:
az extension add --name aks-preview
Execute o seguinte comando para atualizar para a versão mais recente da extensão:
az extension update --name aks-preview
Instalar a extensão confcom CLI do Azure
Para instalar a extensão confcom, execute o seguinte comando:
az extension add --name confcom
Execute o seguinte comando para atualizar para a versão mais recente da extensão:
az extension update --name confcom
Registrar o sinalizador de recurso KataCcIsolationPreview
Registe o KataCcIsolationPreview sinalizador de funcionalidade ao utilizar o comando az feature register, conforme mostrado no exemplo seguinte:
az feature register --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Leva alguns minutos para que o status mostre Registrado. Verifique o status do registro usando o comando az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "KataCcIsolationPreview"
Quando o estado indicar Registered, atualize o registo do fornecedor de recursos Microsoft.ContainerService utilizando o comando az provider register:
az provider register --namespace "Microsoft.ContainerService"
Implantar um novo cluster
Crie um cluster AKS usando o comando az aks create e especificando os seguintes parâmetros:
- --os-sku: AzureLinux. Apenas o Azure Linux os-sku suporta esta funcionalidade nesta versão de pré-visualização.
- --node-vm-size: Qualquer tamanho de VM do Azure que ofereça suporte a VMs filhas protegidas por AMD SEV-SNP funciona. Por exemplo, Standard_DC8as_cc_v5 VMs.
- --enable-workload-identity: Permite criar um ID de carga de trabalho do Microsoft Entra permitindo que os pods usem uma identidade do Kubernetes.
- --enable-oidc-issuer: Habilita o emissor OpenID Connect (OIDC). Ele permite que um ID do Microsoft Entra ou outra plataforma de gerenciamento de identidade e acesso do provedor de nuvem descubra as chaves de assinatura públicas do servidor de API.
- --workload-runtime: Especifique KataCcIsolation para habilitar a funcionalidade Contentores Confidenciais no pool de nós.
az aks create --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <1.25.0 and above> --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolation --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keysApós alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.
Quando o cluster estiver pronto, obtenha as credenciais do cluster usando o comando az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Implantar em um cluster existente
Para usar esse recurso com um cluster AKS existente, os seguintes requisitos devem ser atendidos:
- Siga os passos para registar o sinalizador de funcionalidade KataCcIsolationPreview.
- Verifique se o cluster está executando o Kubernetes versão 1.25.0 e superior.
- Ative a identidade da carga de trabalho no cluster, caso ainda não esteja ativada.
Use o comando a seguir para habilitar Contêineres Confidenciais (visualização) criando um pool de nós para hospedá-lo.
Adicione um pool de nós ao seu cluster AKS usando o comando az aks nodepool add . Especifique os parâmetros seguintes:
- --resource-group: Insira o nome de um grupo de recursos existente para criar o cluster AKS.
- --cluster-name: Insira um nome exclusivo para o cluster AKS, como myAKSCluster.
- --name: insira um nome exclusivo para o pool de nós de clusters, como nodepool2.
-
--workload-runtime: Especifique KataCcIsolation para habilitar a funcionalidade no pool de nós. Juntamente com o
--workload-runtimeparâmetro, estes outros parâmetros devem satisfazer os seguintes requisitos: Caso contrário, o comando falhará e relatará um problema com o(s) parâmetro(s) correspondente(s). - --os-sku: AzureLinux. Apenas o Azure Linux os-sku suporta esta funcionalidade nesta versão de pré-visualização.
- --node-vm-size: Qualquer tamanho de VM do Azure que ofereça suporte à virtualização aninhada de VMs filhas protegidas pelo AMD SEV-SNP funciona. Por exemplo, Standard_DC8as_cc_v5 VMs.
O exemplo a seguir adiciona um pool de nós de usuário a myAKSCluster com dois nós em nodepool2 no myResourceGroup:
az aks nodepool add --resource-group myResourceGroup --name nodepool2 –-cluster-name myAKSCluster --node-count 2 --os-sku AzureLinux --node-vm-size Standard_DC8as_cc_v5 --workload-runtime KataCcIsolationApós alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.
Execute o comando az aks update para habilitar Contêineres Confidenciais (visualização) no cluster.
az aks update --name myAKSCluster --resource-group myResourceGroupApós alguns minutos, o comando conclui e retorna informações formatadas em JSON sobre o cluster.
Quando o cluster estiver pronto, obtenha as credenciais do cluster usando o comando az aks get-credentials .
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Configurar contentor
Antes de configurar o acesso ao Cofre da Chave do Azure e ao segredo e implantar um aplicativo como um contêiner Confidencial, você precisa concluir a configuração da identidade da carga de trabalho.
Para configurar a identidade da carga de trabalho, execute as seguintes etapas descritas no artigo Implantar e configurar a identidade da carga de trabalho:
- Recuperar o URL do emissor OIDC
- Criar uma identidade gerenciada
- Criar conta de serviço do Kubernetes
- Estabelecer credencial de identidade federada
Importante
Você precisa definir as variáveis de ambiente na seção Exportar variáveis ambientais no artigo Implantar e configurar identidade de carga de trabalho para continuar concluindo este tutorial. Lembre-se de definir a variável SERVICE_ACCOUNT_NAMESPACE como kafka, e execute o comando kubectl create namespace kafka antes de configurar a identidade da carga de trabalho.
Implante um aplicativo confiável com kata-cc e contêiner de atestado
As etapas a seguir configuram a criptografia de ponta a ponta para mensagens Kafka usando chaves de criptografia gerenciadas pelo mHSM (Managed Hardware Security Modules ) do Azure. A chave só é liberada quando o consumidor Kafka é executado dentro de um contêiner confidencial com um contêiner de provisionamento secreto de atestado do Azure injetado no pod.
Esta configuração baseia-se nos seguintes quatro componentes:
- Cluster Kafka: um cluster Kafka simples implantado no namespace Kafka no cluster.
- Kafka Producer: Um produtor Kafka a executar como um pod Kubernetes simples que envia mensagens encriptadas definidas pelo utilizador utilizando uma chave pública para um tópico Kafka.
- Kafka Consumer: Um pod consumidor do Kafka em execução com o runtime kata-cc, equipado com um contentor seguro de disponibilização da chave para obter a chave privada para desencriptar mensagens do Kafka e apresentar as mensagens na interface Web.
Para esta versão de visualização, recomendamos para fins de teste e avaliação criar ou usar um recurso de camada Premium existente do Azure Key Vault para dar suporte ao armazenamento de chaves em um módulo de segurança de hardware (HSM). Não recomendamos utilizar o cofre de chaves de produção. Se você não tiver um Cofre de Chaves do Azure, consulte Criar um cofre de chaves usando a CLI do Azure.
Conceda acesso ao Key Vault à identidade gerida que criou anteriormente e à sua conta. Atribua a ambas as identidades as funções Key Vault Crypto Officer e Key Vault Crypto User do Azure RBAC.
Nota
A identidade gerenciada é o valor atribuído à
USER_ASSIGNED_IDENTITY_NAMEvariável.Para adicionar atribuições de função, você deve ter
Microsoft.Authorization/roleAssignments/writeeMicrosoft.Authorization/roleAssignments/deletepermissões, como Administrador de Acesso a Dados do Cofre de Chaves, Administrador de Acesso de Usuário ou Proprietário.Você deve usar o Key Vault Premium SKU para suportar chaves protegidas por HSM.
Execute o seguinte comando para definir o escopo:
AKV_SCOPE=$(az keyvault show --name <AZURE_AKV_RESOURCE_NAME> --query id --output tsv)Execute o seguinte comando para atribuir a função Key Vault Crypto Officer .
az role assignment create --role "Key Vault Crypto Officer" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPEExecute o seguinte comando para atribuir a função Key Vault Crypto User .
az role assignment create --role "Key Vault Crypto User" --assignee "${USER_ASSIGNED_IDENTITY_NAME}" --scope $AKV_SCOPEInstale o cluster Kafka no namespace kafka executando o seguinte comando:
kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafkaExecute o comando seguinte para aplicar o ficheiro CR do cluster
kafka.kubectl apply -f https://strimzi.io/examples/latest/kafka/kafka-persistent-single.yaml -n kafkaPrepare a chave de encriptação/desencriptação RSA utilizando o script bash para o workload do GitHub. Guarde o ficheiro como
setup-key.sh.Defina a variável de ambiente
MAA_ENDPOINTcom o FQDN da URI de atestação, ao executar o seguinte comando.export MAA_ENDPOINT="$(az attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-)"Verifique se o FQDN do URI do Attest está no formato correto (o MAA_ENDPOINT não deve incluir o prefixo "https://"):
echo $MAA_ENDPOINTNota
Para configurar o Atestado do Microsoft Azure, consulte Guia de início rápido: configurar o Atestado do Azure com a CLI do Azure.
Copie o seguinte manifesto YAML e salve-o como
consumer.yaml.apiVersion: v1 kind: Pod metadata: name: kafka-golang-consumer namespace: kafka labels: azure.workload.identity/use: "true" app.kubernetes.io/name: kafka-golang-consumer spec: serviceAccountName: workload-identity-sa runtimeClassName: kata-cc-isolation containers: - image: "mcr.microsoft.com/aci/skr:2.7" imagePullPolicy: Always name: skr env: - name: SkrSideCarArgs value: ewogICAgImNlcnRjYWNoZSI6IHsKCQkiZW5kcG9pbnRfdHlwZSI6ICJMb2NhbFRISU0iLAoJCSJlbmRwb2ludCI6ICIxNjkuMjU0LjE2OS4yNTQvbWV0YWRhdGEvVEhJTS9hbWQvY2VydGlmaWNhdGlvbiIKCX0gIAp9 command: - /bin/skr volumeMounts: - mountPath: /opt/confidential-containers/share/kata-containers/reference-info-base64 name: endor-loc - image: "mcr.microsoft.com/acc/samples/kafka/consumer:1.0" imagePullPolicy: Always name: kafka-golang-consumer env: - name: SkrClientKID value: kafka-encryption-demo - name: SkrClientMAAEndpoint value: sharedeus2.eus2.test.attest.azure.net - name: SkrClientAKVEndpoint value: "myKeyVault.vault.azure.net" - name: TOPIC value: kafka-demo-topic command: - /consume ports: - containerPort: 3333 name: kafka-consumer resources: limits: memory: 1Gi cpu: 200m volumes: - name: endor-loc hostPath: path: /opt/confidential-containers/share/kata-containers/reference-info-base64 --- apiVersion: v1 kind: Service metadata: name: consumer namespace: kafka spec: type: LoadBalancer selector: app.kubernetes.io/name: kafka-golang-consumer ports: - protocol: TCP port: 80 targetPort: kafka-consumerNota
Atualize o valor da variável
SkrClientAKVEndpointde ambiente pod para corresponder à URL do seu Cofre da Chave do Azure, excluindo o valorhttps://do protocolo . O valor atual do marcador de posição émyKeyVault.vault.azure.net. Atualize o valor da variávelSkrClientMAAEndpointde ambiente pod com o valor deMAA_ENDPOINT. Você pode encontrar o valor deMAA_ENDPOINTexecutando o comandoecho $MAA_ENDPOINTou o comandoaz attestation show --name "myattestationprovider" --resource-group "MyResourceGroup" --query 'attestUri' -o tsv | cut -c 9-.Gere a política de segurança para o manifesto YAML do consumidor Kafka e obtenha o hash da política de segurança armazenada na
WORKLOAD_MEASUREMENTvariável executando o seguinte comando:export WORKLOAD_MEASUREMENT=$(az confcom katapolicygen -y consumer.yaml --print-policy | base64 -d | sha256sum | cut -d' ' -f1)Para gerar um par de chaves assimétricas RSA (chaves pública e privada), execute o
setup-key.shscript usando o seguinte comando. O<Azure Key Vault URL>valor deve ser<your-unique-keyvault-name>.vault.azure.netexport MANAGED_IDENTITY=${USER_ASSIGNED_CLIENT_ID} bash setup-key.sh "kafka-encryption-demo" <Azure Key Vault URL>Nota
A variável
MANAGED_IDENTITYde ambiente é exigida pelo scriptsetup-key.shbash.A chave pública será guardada como
kafka-encryption-demo-pub.pemapós a execução do script Bash.
Importante
Se você receber o erro
ForbiddenByRbac, talvez seja necessário aguardar até 24 horas, pois os serviços de back-end para identidades gerenciadas mantêm um cache por URI de recurso por até 24 horas. Consulte também: Solucionar problemas do Azure RBAC.Para verificar se as chaves foram carregadas com êxito no cofre de chaves, execute os seguintes comandos:
az account set --subscription <Subscription ID> az keyvault key list --vault-name <KeyVault Name> -o tableCopie o seguinte manifesto YAML e salve-o como
producer.yaml.apiVersion: v1 kind: Pod metadata: name: kafka-producer namespace: kafka spec: containers: - image: "mcr.microsoft.com/acc/samples/kafka/producer:1.0" name: kafka-producer command: - /produce env: - name: TOPIC value: kafka-demo-topic - name: MSG value: "Azure Confidential Computing" - name: PUBKEY value: |- -----BEGIN PUBLIC KEY----- MIIBojAN***AE= -----END PUBLIC KEY----- resources: limits: memory: 1Gi cpu: 200mNota
Atualize o valor que começa com a cadeia de caracteres
-----BEGIN PUBLIC KEY-----e termina com a cadeia de caracteres-----END PUBLIC KEY-----com o conteúdo dekafka-encryption-demo-pub.pem, que foi criado no passo anterior.Implemente os manifestos YAML
consumereproducerutilizando os ficheiros que guardou anteriormente.kubectl apply -f consumer.yamlkubectl apply -f producer.yamlObtenha o endereço IP do serviço Web usando o seguinte comando:
kubectl get svc consumer -n kafkaCopie e cole o endereço IP externo do serviço ao consumidor no seu navegador e observe a mensagem desencriptada.
O exemplo a seguir é semelhante à saída do comando:
Welcome to Confidential Containers on AKS! Encrypted Kafka Message: Msg 1: Azure Confidential ComputingTambém deve tentar executar o consumidor como um pod normal do Kubernetes, removendo a especificação
skr containerekata-cc runtime class. Como não está a executar o consumidor com a classe de execução kata-cc, já não precisa da política.Remova toda a política e observe as mensagens novamente no navegador após reimplantar a carga de trabalho. As mensagens aparecem como texto cifrado codificado em base64 porque a chave de criptografia privada não pode ser recuperada. A chave não pode ser recuperada porque o consumidor já não está em execução num ambiente confidencial e falta o
skr container, o que impede a desencriptação das mensagens.
Limpeza
Quando terminar de avaliar esse recurso, para evitar cobranças do Azure, limpe seus recursos desnecessários. Se você implantou um novo cluster como parte de sua avaliação ou teste, poderá excluí-lo usando o comando az aks delete .
az aks delete --resource-group myResourceGroup --name myAKSCluster
Se ativou os Contentores Confidenciais (pré-visualização) num cluster existente, pode remover o(s) pod(s) utilizando o comando kubectl delete pod.
kubectl delete pod pod-name
Próximos passos
- Saiba mais sobre Azure Dedicated Hosts para nós no seu cluster AKS, para utilizar o isolamento de hardware e o controlo sobre os eventos de manutenção da plataforma do Azure.