Contêineres Confidenciais (versão prévia) no AKS (Serviço de Kubernetes do Azure)
Os contêineres confidenciais fornecem um conjunto de recursos e funcionalidades para proteger ainda mais as cargas de trabalho de contêiner padrão, para alcançar metas mais altas de segurança de dados, privacidade de dados e integridade de código de runtime. O AKS (Serviço de Kubernetes do Azure) inclui Contêineres Confidenciais (versão prévia) no AKS.
Contêineres Confidenciais se baseiam em Contêineres Confidenciais Kata e criptografia baseada em hardware para criptografar a memória do contêiner. Eles estabelecem um novo nível de confidencialidade de dados impedindo que os dados na memória durante a computação estejam em texto não criptografado e em formato legível. Obtém-se confiança no contêiner por meio do atestado de hardware, permitindo o acesso aos dados criptografados por entidades confiáveis.
Juntamente com Restrição de Área de Pod, você pode executar cargas de trabalho confidenciais isoladas no Azure para proteger seus dados e cargas de trabalho. O que torna um contêiner confidencial:
- Transparência: o ambiente de contêiner confidencial em que o aplicativo confidencial é compartilhado, você pode ver e verificar se ele é seguro. Todos os componentes da TCB (Base de Computação Confiável) devem ser de software livre.
- Auditabilidade: você tem a capacidade de verificar e ver qual versão do pacote de ambiente CoCo, inclusive o SO Convidado Linux e se todos os componentes estão atuais. A Microsoft assina o SO convidado e o ambiente de runtime do contêiner para verificações por meio do atestado. Ela também libera um SHA (algoritmo de hash seguro) de builds de SO convidado para criar uma história de audibilidade e controle de cadeia de caracteres.
- Atestado completo: tudo o que faz parte do TEE deve ser totalmente medido pela CPU com a capacidade de verificar remotamente. O relatório de hardware do processador AMD SEV-SNP deve refletir as camadas de contêiner e o hash de configuração de runtime de contêiner por meio das declarações de atestado. O aplicativo pode buscar o relatório de hardware localmente, inclusive o relatório que reflete a imagem do SO convidado e o runtime do contêiner.
- Integridade do código: a imposição de runtime está sempre disponível por meio de políticas definidas pelo cliente para contêineres e configuração de contêiner, como políticas imutáveis e assinatura de contêiner.
- Isolamento do operador: designs de segurança que presumem privilégios mínimos e maior blindagem de isolamento de todas as partes não confiáveis, inclusive administradores de cliente/locatário. Ele inclui a proteção do acesso existente do plano de controle do Kubernetes (kubelet) para os pods confidenciais.
Com outras medidas de segurança ou controles de proteção de dados, como parte da sua arquitetura geral, esses recursos ajudam você a cumprir os requisitos de conformidade regulatória, do setor ou de governança para a proteção de informações confidenciais.
Este artigo ajuda você a entender o recurso Contêineres Confidenciais e como implementar e configurar o seguinte:
- Implantar ou atualizar um cluster do AKS usando a CLI do Azure
- Adicionar uma anotação ao YAML do pod para marcar o pod como sendo executado por um contêiner confidencial
- Adicionar uma política de segurança ao YAML do pod
- Habilitar a imposição da política de segurança
- Implantar seu aplicativo em computação confidencial
Cenários com suporte
Contêineres Confidenciais (versão prévia) são apropriados para cenários de implantação que envolvem dados confidenciais. Por exemplo PII (informações de identificação pessoal) ou dados com forte segurança necessária para conformidade regulatória. Alguns cenários comuns com contêineres são:
- Execução da análise de Big Data usando o Apache Spark para reconhecimento de padrões de frauda no setor financeiro.
- Execução de executores auto-hospedados do GitHub para assinar o código com segurança como parte das práticas de DevOps de CI/CD (integração contínua e implantação contínua).
- Inferência do Machine Learning e treinamento de modelos de ML usando um conjunto de dados criptografado de uma fonte confiável. Ele só é descriptografado dentro de um ambiente de contêiner confidencial para preservar a privacidade.
- Criação de salas limpas de Big Data para correspondência de ID como parte da computação de várias partes em setores como varejo com publicidade digital.
- Criação de zonas de destino de Confiança Zero de computação confidencial para atender aos regulamentos de privacidade para migrações de aplicativos para a nuvem.
Considerações
Veja a seguir as consideração com esta versão prévia de Contêineres Confidenciais:
- Um aumento no tempo de inicialização do pod em comparação com pods runc e pods isolados do kernel.
- Não há suporte para imagens de contêiner da versão 1.
- Atualizações de segredos e ConfigMaps não são refletidas no convidado.
- Contêineres efêmeros e outros métodos de solução de problemas como
exec
em um contêiner, saídas de log de contêineres estdio
(ReadStreamRequest e WriteStreamRequest) exigem uma modificação e reimplantação de política. - A ferramenta de gerador de política não dá suporte a tipos de implantação cronjob.
- Devido às medidas de camada de imagem de contêiner que estão sendo codificadas na política de segurança, não recomendamos usar a marca
latest
ao especificar contêineres. - Serviços, balanceadores de carga e EndpointSlices só dão suporte ao protocolo TCP.
- Todos os contêineres em todos os pods nos clusters devem ser configurados para
imagePullPolicy: Always
. - O gerador de política só dá suporte a pods que usam endereços IPv4.
- Os valores de ConfigMaps e segredos não poderão ser alterados se a configuração usar o método de variável de ambiente após a implantação do pod. A política de segurança a impede.
- Não há suporte para logs de terminação de pod. Enquanto os pods gravam logs de terminação em
/dev/termination-log
ou em um local personalizado, se especificado no manifesto do pod, o host/kubelet não pode ler esses logs. As alterações do convidado para esse arquivo não são refletidas no host.
Visão geral da alocação de recursos
É importante que você entenda o comportamento de alocação de recursos de memória e processador nesta versão.
- CPU: O shim atribui uma vCPU ao sistema operacional base dentro do pod. Se nenhum recurso
limits
for especificado, as cargas de trabalho não terão compartilhamentos de CPU separados atribuídos, a vCPU será compartilhada com essa carga de trabalho. Se os limites de CPU forem especificados, os compartilhamentos de CPU serão alocados explicitamente para cargas de trabalho. - Memória: o manipulador Kata-CC usa memória de 2 GB para o sistema operacional UVM e X MB de memória adicional, em que X é o recurso
limits
se especificado no manifesto YAML (resultando em uma VM de 2 GB quando nenhum limite é fornecido, sem memória implícita para contêineres). O manipulador Kata usa memória de base de 256 MB para o sistema operacional UVM e X MB de memória adicional quando o recursolimits
é especificado no manifesto YAML. Se os limites não forem especificados, um limite implícito de 1.792 MB será adicionado, resultando em uma VM de 2 GB e 1.792 MB de memória implícita para contêineres.
Nesta versão, não há suporte para especificar solicitações de recurso nos manifestos do pod. O contêiner Kata ignora solicitações de recurso do manifesto YAML do pod e, como resultado, containerd não passa as solicitações para o shim. Use limit
de recurso em vez de requests
de recurso para alocar recursos de memória ou CPU para cargas de trabalho ou contêineres.
Com o sistema de arquivos de contêiner local apoiado pela memória de VM, gravar no sistema de arquivos do contêiner (incluindo registro em log) pode preencher a memória disponível fornecida para o pod. Essa condição pode resultar em possíveis falhas de pod.
Próximas etapas
- Confira a visão geral da Política de segurança de Contêineres Confidenciais para saber mais sobre como as cargas de trabalho e seus dados em um pod são protegidos.
- Implantar Contêineres Confidenciais no AKS com uma política de segurança padrão.
- Saiba mais sobre Hosts Dedicados do Azure para nós com seu cluster do AKS para usar o isolamento de hardware e o controle sobre eventos de manutenção da plataforma do Azure.
Azure Kubernetes Service