Segurança da camada de transporte (TLS) - AWS App Mesh

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Segurança da camada de transporte (TLS)

No App Mesh, o Transport Layer Security (TLS) criptografa a comunicação entre os proxies Envoy implantados em recursos computacionais que são representados no App Mesh por endpoints de malha, como e. Nós virtuais Gateways virtuais O procurador negocia e encerraTLS. Quando o proxy é implantado com um aplicativo, o código do aplicativo não é responsável por negociar uma TLS sessão. O proxy negocia TLS em nome do seu aplicativo.

O App Mesh permite que você forneça o TLS certificado ao proxy das seguintes formas:

  • Um certificado privado de AWS Certificate Manager (ACM) emitido por um AWS Private Certificate Authority (AWS Private CA).

  • Um certificado armazenado no sistema de arquivos local de um nó virtual emitido por sua própria autoridade de certificação (CA)

  • Um certificado fornecido por um endpoint Secrets Discovery Service (SDS) pelo soquete de domínio Unix local.

O Autorização do Envoy Proxy deve ser habilitado para o proxy Envoy implantado representado por um endpoint de malha. Recomendamos que, ao habilitar a autorização de proxy, restrinja o acesso somente ao endpoint de malha para o qual você está habilitando a criptografia.

Requisitos de certificado

Um dos nomes alternativos do assunto (SANs) no certificado deve corresponder a critérios específicos, dependendo de como o serviço real representado por um endpoint de malha é descoberto.

  • DNS— Um dos certificados SANs deve corresponder ao valor fornecido nas configurações DNS de descoberta do serviço. Para uma aplicação com o nome de descoberta de serviços mesh-endpoint.apps.local, você pode criar um certificado correspondente a esse nome ou um certificado com o curinga *.apps.local.

  • AWS Cloud Map— Um dos certificados SANs deve corresponder ao valor fornecido nas configurações AWS Cloud Map de descoberta de serviços usando o formatoservice-name.namespace-name. Para um aplicativo com as configurações de descoberta de AWS Cloud Map serviços de serviceName mesh-endpoint e o namespaceName apps.local, você pode criar um certificado que corresponda ao nome mesh-endpoint.apps.local ou um certificado com o curinga *.apps.local.

Para ambos os mecanismos de descoberta, se nenhum certificado SANs corresponder às configurações de descoberta do DNS serviço, a conexão entre os Enviados falhará com a seguinte mensagem de erro, conforme vista do Envoy do cliente.

TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

TLScertificados de autenticação

O App Mesh oferece suporte a várias fontes de certificados ao usar a TLS autenticação.

AWS Private CA

O certificado deve ser armazenado ACM na mesma região e AWS conta do endpoint de malha que usará o certificado. O certificado da CA não precisa estar na mesma AWS conta, mas ainda precisa estar na mesma região do endpoint de malha. Se você não tiver um CA privada da AWS, deverá criar um antes de solicitar um certificado. Para obter mais informações sobre como solicitar um certificado de um usuário existente AWS Private CA ACM, consulte Solicitar um certificado privado. O certificado não pode ser público.

O privado CAs que você usa para políticas de TLS cliente deve ser usuário rootCAs.

Para configurar um nó virtual com certificados e CAs de AWS Private CA, o principal (como um usuário ou uma função) que você usa para chamar o App Mesh deve ter as seguintes IAM permissões:

  • Para qualquer certificado que você adiciona à TLS configuração de um ouvinte, o principal deve ter a acm:DescribeCertificate permissão.

  • Para qualquer política CAs configurada em uma política de TLS cliente, o diretor deve ter a acm-pca:DescribeCertificateAuthority permissão.

Importante

Compartilhar CAs com outras contas pode dar a essas contas privilégios não intencionais à CA. Recomendamos o uso de políticas baseadas em recursos para restringir o acesso a apenas acm-pca:DescribeCertificateAuthority e acm-pca:GetCertificateAuthorityCertificate para contas que não precisam emitir certificados da CA.

Você pode adicionar essas permissões a uma IAM política existente anexada a um diretor ou criar um novo diretor e uma nova política e anexar a política ao principal. Para obter mais informações, consulte Edição de IAM políticas, criação de IAM políticas e adição de permissões de IAM identidade.

nota

Você paga uma taxa mensal pela operação de cada um AWS Private CA até excluí-lo. Você paga também pelos certificados privados que emite a cada mês e pelos certificados privados que exporta. Para obter mais informações, consulte Preços do AWS Certificate Manager.

Quando você habilita a autorização de proxy para o Envoy Proxy que um endpoint de malha representa, a IAM função que você usa deve receber as seguintes permissões: IAM

  • Para qualquer certificado configurado no receptor de um nó virtual, a função deve ter a permissão acm:ExportCertificate.

  • Para qualquer CAs configuração em uma política de TLS cliente, a função deve ter a acm-pca:GetCertificateAuthorityCertificate permissão.

Sistema de arquivos

Você pode distribuir certificados para o Envoy usando o sistema de arquivos. É possível fazer isso disponibilizando a cadeia de certificados e a chave privada correspondente disponível no caminho do arquivo. Dessa forma, esses recursos podem ser acessados pelo proxy do Envoy sidecar.

Serviço Secreto de Descoberta do Enviado () SDS

O Envoy busca segredos, como TLS certificados, de um endpoint específico por meio do protocolo Secrets Discovery. Para obter mais informações sobre esse protocolo, consulte a documentação do SDS Envoy.

O App Mesh configura o proxy Envoy para usar um soquete de domínio Unix que é local para o proxy para servir como endpoint do Secret Discovery Service (SDS) quando SDS serve como fonte para seus certificados e cadeias de certificados. Você pode configurar o caminho para esse endpoint usando a variável de ambiente APPMESH_SDS_SOCKET_PATH.

Importante

O Secrets Discovery Service local usando o soquete de domínio Unix é compatível com o proxy App Mesh Envoy versão 1.15.1.0 e posterior.

O App Mesh suporta o SDS protocolo V2 usando g. RPC

Integração com o SPIFFE Runtime Environment () SPIRE

Você pode usar qualquer implementação secundária do SDSAPI, incluindo cadeias de ferramentas existentes, como SPIFFERuntime Environment (). SPIRE SPIREfoi projetado para permitir a implantação da TLS autenticação mútua entre várias cargas de trabalho em sistemas distribuídos. Ele atesta a identidade das workloads em tempo de execução. SPIREtambém fornece chaves e certificados específicos para cargas de trabalho, de curta duração e com rotação automática diretamente para cargas de trabalho.

Você deve configurar o SPIRE Agente como SDS provedor do Envoy. Permita que ele forneça diretamente ao Envoy o material essencial necessário para fornecer autenticação mútuaTLS. Execute SPIRE agentes em sidecars próximos aos proxies do Envoy. O atendente se encarrega de regenerar as chaves e certificados de curta duração, conforme necessário. O Agente atesta o Envoy e determina quais identidades de serviço e certificados de CA devem ser disponibilizados ao Envoy quando o Envoy se conecta ao servidor exposto pelo Agente. SDS SPIRE

Durante esse processo, as identidades de serviço e os certificados CA são alternados e as atualizações são transmitidas de volta ao Envoy. O Envoy as aplica imediatamente às novas conexões sem interrupções ou tempo de inatividade e sem que as chaves privadas cheguem ao sistema de arquivos.

Como o App Mesh configura os Enviados para negociar TLS

O App Mesh usa a configuração do endpoint de malha do cliente e do servidor ao determinar como configurar a comunicação entre os Envoys em uma malha.

Com as políticas do cliente

Quando uma política de cliente impõe o uso deTLS, e uma das portas na política de cliente corresponde à porta da política do servidor, a política de cliente é usada para configurar o contexto de TLS validação do cliente. Por exemplo, se a política de cliente de um gateway virtual corresponder à política de servidor de um nó virtual, haverá uma tentativa de TLS negociação entre os proxies usando as configurações definidas na política de cliente do gateway virtual. Se a política do cliente não corresponder à porta da política do servidor, a negociação TLS entre os proxies pode ou não ser negociada, dependendo das configurações da política do servidor. TLS

Sem políticas de cliente

Se o cliente não tiver configurado uma política de cliente ou se a política do cliente não corresponder à porta do servidor, o App Mesh usará o servidor para determinar se deve ou não negociar TLS com o cliente e como. Por exemplo, se um gateway virtual não tiver especificado uma política de cliente e um nó virtual não tiver configurado a TLS terminação, TLS isso não será negociado entre os proxies. Se um cliente não tiver especificado uma política de cliente correspondente e um servidor tiver sido configurado com TLS modos STRICT ouPERMISSIVE, os proxies serão configurados para negociar. TLS Dependendo de como os certificados foram fornecidos para TLS rescisão, o seguinte comportamento adicional se aplica.

  • ACMTLS-certificados gerenciados — Quando um servidor configura a TLS rescisão usando um certificado ACM gerenciado, o App Mesh configura automaticamente os clientes para negociar TLS e validar o certificado com a CA do usuário raiz à qual o certificado está vinculado.

  • TLSCertificados baseados em arquivo — Quando um servidor configura a TLS rescisão usando um certificado do sistema de arquivos local do proxy, o App Mesh configura automaticamente um cliente para negociarTLS, mas o certificado do servidor não é validado.

Nomes alternativos do assunto

Opcionalmente, você pode especificar uma lista de nomes alternativos de assunto (SANs) nos quais confiar. SANsdeve estar no URI formato FQDN ou. Se SANs forem fornecidos, o Envoy verifica se o nome alternativo do assunto do certificado apresentado corresponde a um dos nomes desta lista.

Se você não especificar SANs no endpoint de malha de terminação, o proxy Envoy desse nó não o verificará SAN em um certificado de cliente de mesmo nível. Se você não especificar SANs no endpoint de malha de origem, o SAN certificado fornecido pelo endpoint de terminação deverá corresponder à configuração de descoberta do serviço de endpoint de malha.

Para obter mais informações, consulte App Mesh TLS: requisitos de certificado.

Importante

Você só pode usar o caractere curinga SANs se a política do cliente para TLS estiver definida como. not enforced Se a política do cliente para o nó virtual ou gateway virtual do cliente estiver configurada para ser aplicadaTLS, ela não poderá aceitar um caractere curingaSAN.

Verifique a criptografia

Depois de habilitarTLS, você pode consultar o proxy Envoy para confirmar se a comunicação está criptografada. O proxy Envoy emite estatísticas sobre recursos que podem ajudá-lo a entender se sua TLS comunicação está funcionando corretamente. Por exemplo, o proxy Envoy registra estatísticas sobre o número de TLS apertos de mão bem-sucedidos que ele negociou para um endpoint de malha especificado. Determine quantos TLS apertos de mão bem-sucedidos ocorreram para um endpoint de malha nomeado my-mesh-endpoint com o comando a seguir.

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep ssl.handshake

Na saída retornada do exemplo a seguir, houve três handshakes para o endpoint de malha, portanto, a comunicação é criptografada.

listener.0.0.0.0_15000.ssl.handshake: 3

O proxy Envoy também emite estatísticas quando a TLS negociação está falhando. Determine se houve TLS erros na extremidade da malha.

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep -e "ssl.*\(fail\|error\)"

Na saída retornada do exemplo, não houve nenhum erro em várias estatísticas, então a TLS negociação foi bem-sucedida.

listener.0.0.0.0_15000.ssl.connection_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_cert_hash: 0 listener.0.0.0.0_15000.ssl.fail_verify_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_no_cert: 0 listener.0.0.0.0_15000.ssl.ssl.fail_verify_san: 0

Para obter mais informações sobre TLS estatísticas do Envoy, consulte Envoy Listener Statistics.

Renovação de certificado

AWS Private CA

Quando você renova um certificado comACM, o certificado renovado será distribuído automaticamente aos seus proxies conectados dentro de 35 minutos após a conclusão da renovação. Recomendamos usar a renovação gerenciada para renovar automaticamente os certificados perto do final do período de validade. Para obter mais informações, consulte Renovação gerenciada ACM dos certificados emitidos pela Amazon no Guia do AWS Certificate Manager usuário.

Seu próprio certificado

Ao usar um certificado do sistema de arquivos local, o Envoy não recarregará automaticamente o certificado quando ele for alterado. Você pode reiniciar ou reimplantar o processo Envoy para carregar um novo certificado. É possível também colocar um certificado mais novo em um caminho de arquivo diferente e atualizar a configuração do nó virtual ou do gateway com esse caminho de arquivo.

Configure as ECS cargas de trabalho da Amazon para usar a TLS autenticação com AWS App Mesh

Você pode configurar sua malha para usar a TLS autenticação. Certifique-se de que os certificados estejam disponíveis para os sidecars do proxy do Envoy que você adiciona aos workloads. Você pode anexar um EFS volume EBS ou ao seu sidecar do Envoy ou pode armazenar e recuperar certificados do Secrets Manager. AWS

  • Se você usa a distribuição de certificados baseada em arquivos, anexe um EFS volume EBS ou ao seu sidecar do Envoy. Certifique-se de que o caminho para o certificado e a chave privada corresponda ao que está configurado em AWS App Mesh.

  • Se você estiver usando a distribuição SDS baseada, adicione um sidecar que implemente o Envoy's SDS API com acesso ao certificado.

nota

SPIREnão é compatível com a AmazonECS.

Configure as cargas de trabalho do Kubernetes para usar a autenticação com TLS AWS App Mesh

Você pode configurar o AWS App Mesh Controller for Kubernetes para habilitar a TLS autenticação para back-ends e ouvintes do serviço de nó virtual e gateway virtual. Certifique-se de que os certificados estejam disponíveis para os sidecars do proxy do Envoy que você adiciona aos workloads. Você pode ver um exemplo para cada tipo de distribuição na seção passo a passo da Autenticação mútuaTLS.

  • Se você usa a distribuição de certificados baseada em arquivos, anexe um EFS volume EBS ou ao seu sidecar do Envoy. Certifique-se de que o caminho para o certificado e a chave privada corresponda ao configurado no controlador. Como alternativa, é possível usar um Kubernetes Secret montado no sistema de arquivos.

  • Se você estiver usando a distribuição SDS baseada, deverá configurar um SDS provedor local de nós que implemente o Envoy's. SDS API O enviado chegará até lá. UDS Para habilitar o TLS suporte SDS baseado em m no EKS AppMesh controlador, defina o enable-sds sinalizador como true e forneça o UDS caminho do SDS provedor local para o controlador por meio do sds-uds-path sinalizador. Se usa o Helm, configure-os como parte da instalação do seu controlador:

    --set sds.enabled=true
nota

Você não poderá usar para SPIRE distribuir seus certificados se estiver usando o Amazon Elastic Kubernetes Service (Amazon) no modo FargateEKS.