Esse é um projeto de um Módulo Terraform para deploy de funções Lambdas através de gatilhos do Cloudwatch e envio de notificações via SNS
Esse projeto tem o objetivo de entregar no seu final uma função Lambda para automatizar o processo de correção de incidente de Segurança. O incidente em questão trata-se da exposição de recursos através de grupos de Segurança com regras totalmente permissivas, por exemplo: all traffico to 0.0.0.0/0. A função lamba executa de tempos em tempos no ambiente afim de localizar security groups vulneraveis, uma vez identificado, a função remove a regra do security group e informa via email o time/pessoal responsavel
Manter o ambiente cloud seguro é um grande desafio. Automatizar processos, principalmente resposta a incidente de Segurança é um grande passo para os objetivos do time de Segurança.
A função Lambda executa de tempos em tempos e faz alterações a nivel da conta AWS. Mapeie bem os impactos antes de usar.
Esse módulo já cria a role necessária para a execução da Função Lambda Não é necesssário habilitar nenhum recurso na console da AWS
- aws cli | configuração de autenticação via profile do arquivo credentials
- terraform | provisionamento dos recursos
- função lambda | função lambda que irá executar no ambiente
- boto3 | AWS boto3. Biblioteca necessária para interagir com os recursos da AWS via python.
Este repositório contém a função lambda que identifica e remove regras que expõe todo tráfego de rede através de Security Groups.
provider "aws" {
region = "us-east-2"
profile = "dev"
#esse atributo profile faz referencia ao arquivo credential do .aws
}
module "lambda_exposed_alltraffic" {
source = "./modules"
function_name = "rm_ingress_rule_alltraffic_exposed"
filename = "lambda_function.zip"
source_code_hash = filebase64sha256("lambda_function.zip")
handler = "lambda_function.lambda_handler"
runtime = "python3.8"
timeout = 59
memory_size = 128
event_name = "a_cada_hora"
event_description = "Dispara a cada 1hr"
schedule_expression = "rate(59 minutes)"
sns_name = "SNSSecOps"
sns_endpoint = "iluiz.sousa@gmail.com"
}
Name | Version |
---|---|
aws | n/a |
- AWS Lambda Functions
Name | Type |
---|---|
aws_cloudwatch_event_rule.rate_minutes | resource |
aws_cloudwatch_event_target.check_foo_every_five_minutes | resource |
aws_iam_role.iam_for_lambda | resource |
aws_iam_role_policy_attachment.cw-attach | resource |
aws_iam_role_policy_attachment.ec2-attach | resource |
aws_iam_role_policy_attachment.sns-attach | resource |
aws_lambda_function.traffic_exposed | resource |
aws_lambda_permission.allow_cloudwatch_to_call_lambda_check | resource |
aws_sns_topic.user_updates | resource |
aws_sns_topic_subscription.user_updates_sqs_target | resource |
Name | Description | Type | Default | Required |
---|---|---|---|---|
event_description | descrição do evento de trigger | string |
n/a | yes |
event_name | Nome do cloudwatch event que servirá de gatilho para a função lambda | string |
n/a | yes |
filename | caminho do arquivo/codigo da função lambda | string |
n/a | yes |
function_name | nome da função lambda | string |
n/a | yes |
handler | handler da função lambda | string |
n/a | yes |
memory_size | memoria alocada para execução da função lambda | string |
n/a | yes |
runtime | engine/linguagem que a função lambda é escrita/roda | string |
n/a | yes |
schedule_expression | Intervalo de execução da função lambda | string |
"" |
no |
sns_endpoint | email dos subscribers do topic sns | string |
n/a | yes |
sns_name | Nome do topico SNS | string |
n/a | yes |
source_code_hash | arquivo da função lambda compatada hasbase | string |
n/a | yes |
timeout | tempo maximo de execução da função lambda em segundos | string |
n/a | yes |
No outputs.
- Personalizar modulo para o user escolher quais recursos ele deseja deployar
- Separar os Recursos de Cloudwatch e SNS desse módulo e declara-los num módulo independente
- Alterar a trigger da função lambda para disparar mediante um alarme de detecção de alteração no Security Group.