Implemente controles de acesso baseados em atributos de detetive para sub-redes públicas usando AWS Config - Recomendações da AWS

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á.

Implemente controles de acesso baseados em atributos de detetive para sub-redes públicas usando AWS Config

Alberto Menendez, Amazon Web Services

Resumo

As arquiteturas de rede de borda distribuída dependem da segurança de borda da rede que funciona junto com as cargas de trabalho em suas nuvens privadas virtuais ()VPCs. Isso proporciona uma escalabilidade sem precedentes em comparação com a abordagem centralizada mais comum. Embora a implantação de sub-redes públicas em contas de workload possa oferecer benefícios, ela também introduz novos riscos de segurança, pois aumenta a superfície de ataque. Recomendamos que você implante somente recursos do Elastic Load Balancing, como Application Load Balancers ou gateways NAT nas sub-redes públicas desses. VPCs O uso de balanceadores de carga e gateways NAT em sub-redes públicas dedicadas ajuda a implementar um controle refinado do tráfego de entrada e saída.

Recomendamos que você implemente controles preventivos e detectivos para limitar os tipos de recursos que podem ser implantados em sub-redes públicas. Para obter mais informações sobre como usar o controle de acesso por atributo (ABAC) para implementar controles preventivos em sub-redes públicas, consulte Implantação de controles de acesso preventivos por atributo para sub-redes públicas. Embora eficazes na maioria das situações, esses controles preventivos podem não abranger todos os casos de uso possíveis. Portanto, este padrão se baseia na abordagem ABAC e ajuda você a configurar alertas sobre recursos que não estão em conformidade e foram implantados em sub-redes públicas. A solução verifica se as interfaces de rede elásticas pertencem a um recurso não permitido em sub-redes públicas.

Para atingir esse objetivo, esse padrão usa regras personalizadas do AWS Config e ABAC. A regra personalizada processa a configuração de uma interface de rede elástica sempre que ela é criada ou modificada. Em linhas gerais, essa regra executa duas ações para determinar se a interface de rede está em conformidade:

  1. Para determinar se a interface de rede está dentro do escopo da regra, a regra verifica se a sub-rede conta com etiquetas da AWS específicas que indicam que se trata de uma sub-rede pública. Por exemplo, essa etiqueta pode ser IsPublicFacing=True.

  2. Se a interface de rede for implantada em uma sub-rede pública, a regra verificará quem AWS service (Serviço da AWS) criou esse recurso. Se o recurso não for um recurso do Elastic Load Balancing ou um gateway NAT, ele será marcado como não conforme.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS

  • O AWS Configconfigurado na conta da workload

  • Permissões para implantar os recursos necessários na conta da workload

  • Uma VPC com sub-redes públicas

  • Etiquetas aplicadas corretamente para identificar as sub-redes públicas de destino

  • (Opcional) Uma organização em AWS Organizations

  • (Opcional) Uma conta de segurança central que é o administrador delegado de AWS Config e AWS Security Hub CSPM

Arquitetura

Arquitetura de destino

Uso de uma regra personalizada do AWS Config para detectar recursos que não estão em conformidade em sub-redes públicas.

O diagrama ilustra o seguinte:

  1. Quando um recurso de interface de elastic network (AWS::EC2::NetworkInterface) é implantado ou modificado, AWS Config captura o evento e a configuração.

  2. AWS Config compara esse evento com a regra personalizada usada para avaliar a configuração.

  3. A AWS Lambda função associada a essa regra personalizada é invocada. A função avalia o recurso e aplica a lógica especificada para determinar se a configuração do recurso está COMPLIANT, NON_COMPLIANT ou NOT_APPLICABLE.

  4. Se for determinado que um recurso éNON_COMPLIANT, AWS Config envia um alerta por meio do Amazon Simple Notification Service (Amazon SNS).

    Nota: Se essa conta for uma conta de membro AWS Organizations, você poderá enviar dados de conformidade para uma conta de segurança central por meio de AWS Config ou AWS Security Hub CSPM.

Lógica de avaliação da função do Lambda

O diagrama apresentado a seguir ilustra a lógica aplicada pela função do Lambda para avaliar a conformidade da interface de rede elástica.

Diagrama da lógica aplicada pela função do Lambda

Automação e escala

Esse padrão é uma solução de detecção. Você também pode complementá-lo com uma regra de correção para resolver automaticamente quaisquer recursos não conformes. Para obter mais informações, consulte Correção de recursos não compatíveis com regras. AWS Config

É possível escalar essa solução das seguintes maneiras:

  • Impondo a aplicação das AWS tags correspondentes que você estabelece para identificar sub-redes voltadas para o público. Para obter mais informações, consulte Políticas de tags na AWS Organizations documentação.

  • Configurar uma conta de segurança central que aplique a regra AWS Config personalizada a cada conta de carga de trabalho na organização. Para obter mais informações, consulte Automatizar a conformidade da configuração em grande escala AWS (postagem no AWS blog).

  • Integração AWS Config com AWS Security Hub CSPM para capturar, centralizar e notificar em grande escala. Para obter mais informações, consulte Configuração AWS Config na AWS Security Hub CSPM documentação.

Ferramentas

  • AWS Configfornece uma visão detalhada dos recursos em seu computador Conta da AWS e de como eles estão configurados. Ajuda a identificar como os recursos estão relacionados entre si e como suas configurações foram alteradas ao longo do tempo.

  • O Elastic Load Balancing (ELB) distribui o tráfego de entrada de aplicativos ou de rede em vários destinos. Por exemplo, você pode distribuir tráfego entre instâncias, contêineres e endereços IP do Amazon Elastic Compute Cloud (Amazon EC2) em uma ou mais zonas de disponibilidade.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

  • O Amazon Simple Notification Service (Amazon SNS) ajuda você a coordenar e gerenciar a troca de mensagens entre publicadores e clientes, incluindo servidores web e endereços de e-mail. 

  • A Amazon Virtual Private Cloud (Amazon VPC) ajuda você a lançar AWS recursos em uma rede virtual que você definiu. Essa rede virtual é semelhante a uma rede tradicional que você operaria no próprio datacenter, com os benefícios de usar a infraestrutura escalável da AWS.

Práticas recomendadas

Para obter mais exemplos e melhores práticas para o desenvolvimento de AWS Config regras personalizadas, consulte o Repositório de AWS Config Regras oficial em GitHub.

Épicos

TarefaDescriptionHabilidades necessárias

Criar a função do Lambda.

  1. Faça login no e Console de gerenciamento da AWS, em seguida, abra o AWS Lambda console.

  2. Na página Functions (Funções), escolha Create function (Criar função).

  3. Selecione Criar do zero.

  4. No painel Informações básicas, em Nome da função, insira um nome.

  5. Em Runtime, selecione Python 3.12.

  6. Mantenha a arquitetura definida como x86_64.

  7. Escolha a opção Criar função.

  8. Escolha a guia Código.

  9. No explorador de arquivos, escolha lambda_function.py.

  10. Cole o código de amostra fornecido na seção Informações adicionais deste padrão na guia lambda_function.py. Personalize o código de amostra para identificar qualquer lógica de avaliação personalizada na função evaluate_change_notification_compliance.

  11. Escolha Implantar.

AWS geral

Adicione permissões ao perfil de execução da função do Lambda.

  1. Selecione Funções no painel de navegação.

  2. Selecione a função que você acabou de criar.

  3. Escolha Configuration (Configuração) e depois Permissions (Permissões).

  4. Escolha o nome da função para abrir a função no console AWS Identity and Access Management (IAM).

  5. Em Políticas de permissões, selecione Adicionar permissões e, em seguida, selecione Criar política em linha.

  6. Escolha JSON.

  7. Cole a política apresentada a seguir no editor de políticas. Isso permite que a função do Lambda:

    • Obtenha os detalhes das etiquetas da sub-rede.

    • Envie o resultado da conformidade de volta para AWS Config.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "config:PutEvaluations", "ec2:DescribeSubnets" ], "Resource": "*", "Effect": "Allow" } ] }
  8. Escolha Próximo.

  9. Insira um nome para a política e escolha Create policy (Criar política).

AWS geral

Recupere o nome do recurso da Amazon (ARN) da função do Lambda.

  1. Abra o console do lambda.

  2. Selecione Funções no painel de navegação.

  3. Selecione a função que você acabou de criar.

  4. Na seção Visão geral da função, em ARN da função, copie o valor.

AWS geral

Crie a regra AWS Config personalizada.

  1. Abra o console do AWS Config.

  2. Na página Rules (Regras), selecione Add rule (Adicionar regra).

  3. Na página Especificar tipo de regra, escolha Criar regra personalizada do Lambda e, em seguida, selecione Próximo.

  4. Na página Configurar regra, faça o seguinte:

    1. Insira um nome e uma descrição.

    2. No campo ARN da função do AWS Lambda , cole o ARN que você copiou anteriormente.

    3. Para Tipo de gatilho, escolha Quando a configuração muda.

    4. Em Escopo das alterações, selecione Recursos.

    5. Em Tipo de recurso, escolha AWS EC2 NetworkInterface.

    6. Escolha Próximo.

  5. Na página Analisar e criar, verifique sua regra e, em seguida, escolha Salvar.

AWS geral

Configure as notificações.

  1. Siga as instruções apresentadas em Criação de um tópico do Amazon SNS para criar um tópico do Amazon SNS.

  2. Siga as instruções apresentadas em Criação de uma assinatura em um tópico do Amazon SNS para configurar um endpoint que receberá notificações para o tópico do Amazon SNS.

  3. Siga as instruções em Como posso ser notificado quando um AWS recurso não está em conformidade usando AWS Config para configurar uma EventBridge regra personalizada da Amazon para seus recursos não compatíveis.

AWS geral
TarefaDescriptionHabilidades necessárias

Crie um recurso compatível.

  1. Use as instruções apresentadas a seguir para criar um dos recursos compatíveis em uma sub-rede pública:

  2. Depois que o recurso é criado, a regra AWS Config personalizada avalia as interfaces de rede elástica associadas ao recurso. A regra marca essas interfaces de rede como COMPLIANT. Você pode visualizar os recursos AWS Config seguindo estas etapas:

    1. Abra o console do AWS Config.

    2. Na página Regras, selecione sua regra.

    3. Na página Detalhes da regra, role até o final da página.

    4. Em Recursos dentro do escopo, selecione Em conformidade. Confirme se você vê as interfaces IDs de rede que foram criadas.

    5. Para obter mais detalhes sobre a configuração da interface de rede, selecione o ID do recurso.

AWS geral

Crie um recurso que não está em conformidade.

  1. Use as instruções apresentadas a seguir para criar um recurso que não está em conformidade em uma sub-rede pública:

  2. Depois que o recurso é criado, a regra AWS Config personalizada avalia as interfaces de rede elástica associadas ao recurso. A regra marca essas interfaces de rede como NON_COMPLIANT. Você pode visualizar os recursos AWS Config seguindo estas etapas:

    1. Abra o console do AWS Config.

    2. Na página Regras, selecione sua regra.

    3. Na página Detalhes da regra, role até o final da página.

    4. Em Recursos no escopo, selecione NonCompliant. Confirme se você vê as interfaces IDs de rede que foram criadas.

    5. Para obter mais detalhes sobre a configuração da interface de rede, selecione o ID do recurso.

  3. Confirme se você recebeu a notificação no endpoint que configurou no Amazon SNS.

AWS geral

Crie um recurso que não seja aplicável.

  1. Em uma sub-rede privada, crie qualquer recurso que exija uma interface de rede elástica.

  2. Depois que o recurso é criado, a regra AWS Config personalizada avalia as interfaces de rede elástica associadas ao recurso. A regra marca essas interfaces de rede como NOT_APPLICABLE. Esses recursos não são exibidos no AWS Config console.

AWS geral

Recursos relacionados

AWS documentação

Outros AWS recursos

Mais informações

A seguir, apresentamos uma amostra de função do Lambda apenas para fins de demonstração.

import boto3 import json import os # Init clients config_client = boto3.client('config') ec2_client = boto3.client('ec2') def lambda_handler(event, context): # Init values compliance_value = 'NOT_APPLICABLE' invoking_event = json.loads(event['invokingEvent']) configuration_item = invoking_event['configurationItem'] status = configuration_item['configurationItemStatus'] eventLeftScope = event['eventLeftScope'] # First check if the event configuration applies. Ex. resource event is not delete if (status == 'OK' or status == 'ResourceDiscovered') and not eventLeftScope: compliance_value = evaluate_change_notification_compliance(configuration_item) config_client.put_evaluations( Evaluations=[ { 'ComplianceResourceType': invoking_event['configurationItem']['resourceType'], 'ComplianceResourceId': invoking_event['configurationItem']['resourceId'], 'ComplianceType': compliance_value, 'OrderingTimestamp': invoking_event['configurationItem']['configurationItemCaptureTime'] }, ], ResultToken=event['resultToken']) # Function with the logs to evaluate the resource def evaluate_change_notification_compliance(configuration_item): is_in_scope = is_in_scope_subnet(configuration_item['configuration']['subnetId']) if (configuration_item['resourceType'] != 'AWS::EC2::NetworkInterface') or not is_in_scope: return 'NOT_APPLICABLE' else: alb_condition = configuration_item['configuration']['requesterId'] in ['amazon-elb'] nlb_condition = configuration_item['configuration']['interfaceType'] in ['network_load_balancer'] nat_gateway_condition = configuration_item['configuration']['interfaceType'] in ['nat_gateway'] if alb_condition or nlb_condition or nat_gateway_condition: return 'COMPLIANT' return 'NON_COMPLIANT' # Function to check if elastic network interface is in public subnet def is_in_scope_subnet(eni_subnet): subnet_description = ec2_client.describe_subnets( SubnetIds=[eni_subnet] ) for subnet in subnet_description['Subnets']: for tag in subnet['Tags']: if tag['Key'] == os.environ.get('TAG_KEY') and tag['Value'] == os.environ.get('TAG_VALUE'): return True return False