Considerações de implantação - Automações de segurança para AWS WAF

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

Considerações de implantação

As seções a seguir fornecem restrições e considerações para implementar essa solução.

Regras do AWS WAF

A ACL da web que essa solução gera foi projetada para oferecer proteção abrangente para aplicativos da web. A solução fornece um conjunto de regras gerenciadas da AWS e regras personalizadas que você pode adicionar à ACL da web. Para incluir uma regra, escolha yes os parâmetros relevantes ao iniciar a CloudFormation pilha. Consulte a Etapa 1. Inicie a pilha para obter a lista de parâmetros.

nota

A out-of-box solução não é compatível com o AWS Firewall Manager. Se você quiser usar as regras no Firewall Manager, recomendamos que você aplique personalizações ao código-fonte.

Registro de tráfego da Web ACL

Se você criar a pilha em uma região da AWS diferente do Leste dos EUA (Norte da Virgínia) e definir o endpoint comoCloudFront, deverá definir Ativar proteção contra inundação HTTP como ou. no yes - AWS WAF rate based rule

As outras duas opções (yes - AWS Lambda log parsereyes - Amazon Athena log parser) exigem a ativação dos registros do AWS WAF em uma ACL da web que é executada em todos os pontos de presença da AWS, e isso não é suportado fora do Leste dos EUA (Norte da Virgínia). Para obter mais informações sobre como registrar o tráfego do Web ACL, consulte o guia do desenvolvedor do AWS WAF.

Tratamento de grandes dimensões para componentes de solicitação

O AWS WAF não oferece suporte à inspeção de conteúdo superdimensionado para o corpo, cabeçalhos ou cookies do componente de solicitação da web. Ao escrever uma declaração de regra que inspeciona um desses tipos de componentes de solicitação, você pode escolher uma dessas opções para dizer ao AWS WAF o que fazer com essas solicitações:

  • yes(continuar) - Inspecione o componente da solicitação normalmente de acordo com os critérios de inspeção da regra. O AWS WAF inspeciona o conteúdo do componente da solicitação que está dentro das limitações de tamanho. Essa é a opção padrão usada na solução.

  • yes - MATCH - tratar a solicitação da Web como correspondente à instrução de regra. O AWS WAF aplica a ação da regra à solicitação sem avaliá-la de acordo com os critérios de inspeção da regra. Para uma regra com Block ação, isso bloqueia a solicitação com o componente de tamanho grande.

  • yes - NO_MATCH- Trate a solicitação da web como se não correspondesse à declaração da regra, sem avaliá-la de acordo com os critérios de inspeção da regra. O AWS WAF continua sua inspeção da solicitação da web usando o resto das regras na ACL da web, como faria com qualquer regra não correspondente.

Para obter mais informações, consulte Como lidar com componentes de solicitações web de grande porte no AWS WAF.

Implantações de várias soluções

Você pode implantar a solução várias vezes na mesma conta e região. Você deve usar um nome de CloudFormation pilha exclusivo e um nome de bucket do Amazon S3 para cada implantação. Cada implantação exclusiva incorre em cobranças adicionais e está sujeita às cotas do AWS WAF por conta, por região.

Permissões mínimas de função para implantação (opcional)

Os clientes podem criar manualmente uma função do IAM com as permissões mínimas necessárias para implantação:

  • Permissões do WAF

{ "Effect": "Allow", "Action": [ "wafv2:CreateWebACL", "wafv2:UpdateWebACL", "wafv2:DeleteWebACL", "wafv2:GetWebACL", "wafv2:ListWebACLs", "wafv2:CreateIPSet", "wafv2:UpdateIPSet", "wafv2:DeleteIPSet", "wafv2:GetIPSet", "wafv2:AssociateWebACL", "wafv2:DisassociateWebACL", "wafv2:PutLoggingConfiguration", "wafv2:DeleteLoggingConfiguration", "wafv2:ListWebACLs", "wafv2:ListIPSets", "wafv2:ListTagsForResource" ], "Resource": [ "arn:aws:wafv2:*:*:regional/webacl/*", "arn:aws:wafv2:*:*:regional/ipset/*", "arn:aws:wafv2:*:*:global/webacl/*", "arn:aws:wafv2:*:*:global/ipset/*" ] }
  • Permissões Lambda

{ "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:AddPermission", "lambda:RemovePermission" ], "Resource": "arn:aws:lambda:*:*:function:*" }
  • Permissões do Firehose

{ "Effect": "Allow", "Action": [ "firehose:CreateDeliveryStream", "firehose:DeleteDeliveryStream", "firehose:DescribeDeliveryStream", "firehose:StartDeliveryStreamEncryption", "firehose:StopDeliveryStreamEncryption", "firehose:UpdateDestination" ], "Resource": "arn:aws:firehose:*:*:deliverystream/*" }
  • Permissões do S3

{ "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:DeleteBucketPolicy", "s3:GetBucketAcl", "s3:GetBucketPolicy", "s3:GetObject", "s3:PutBucketAcl", "s3:PutBucketPolicy", "s3:PutBucketPublicAccessBlock", "s3:PutBucketVersioning", "s3:PutEncryptionConfiguration", "s3:PutObject", "s3:PutBucketTagging", "s3:PutLifecycleConfiguration", "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:PutBucketLogging", "s3:GetBucketLogging" ], "Resource": "arn:aws:s3:::*" }
  • Permissões do Athena

{ "Effect": "Allow", "Action": [ "athena:CreateWorkGroup", "athena:DeleteWorkGroup", "athena:GetWorkGroup", "athena:UpdateWorkGroup", "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StopQueryExecution" ], "Resource": "arn:aws:athena:*:*:workgroup/WAF*" }
  • Permissões do Glue

{ "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:GetTable", "glue:GetTables", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:*:*:catalog", "arn:aws:glue:*:*:database/*", "arn:aws:glue:*:*:table/*/*", "arn:aws:glue:*:*:userDefinedFunction/*" ] }
  • CloudWatch Permissões de registros

{ "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DeleteLogGroup", "logs:DeleteLogStream", "logs:PutRetentionPolicy", "logs:DescribeLogGroups" ], "Resource": [ "arn:aws:logs:*:*:log-group:/aws/lambda/*", "arn:aws:logs:*:*:log-group:*", "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/*" ] }
  • CloudWatch Permissões

{ "Effect": "Allow", "Action": [ "cloudwatch:DeleteDashboards", "cloudwatch:GetDashboard", "cloudwatch:ListDashboards", "cloudwatch:PutDashboard", "cloudwatch:PutMetricData" ], "Resource": "*" }
  • Permissões do SNS

{ "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic", "sns:Subscribe", "sns:Unsubscribe", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:*:*:*" }
  • Permissões do DynamoDB

{ "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:DeleteTable", "dynamodb:DescribeTable", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:*:*:table/*" }
  • CloudFormation Permissões

{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "cloudformation:ListStacks" ], "Resource": "arn:aws:cloudformation:*:*:stack/*/*" }
  • Permissões de registro de aplicativos do Service Catalog

{ "Effect": "Allow", "Action": [ "servicecatalog:CreateApplication", "servicecatalog:DeleteApplication", "servicecatalog:GetApplication", "servicecatalog:TagResource", "servicecatalog:CreateAttributeGroup", "servicecatalog:DeleteAttributeGroup", "servicecatalog:GetAttributeGroup", "servicecatalog:AssociateAttributeGroup", "servicecatalog:DisassociateAttributeGroup", "servicecatalog:AssociateResource", "servicecatalog:DisassociateResource" ], "Resource": "arn:aws:servicecatalog:*:*:*" }
  • Permissões do X-Ray

{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" }
  • Permissões do IAM

{ "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:CreatePolicy", "iam:CreateRole", "iam:DeleteRole", "iam:DeleteRolePolicy", "iam:DetachRolePolicy", "iam:GetRole", "iam:GetRolePolicy", "iam:ListRoles", "iam:PassRole", "iam:PutRolePolicy" ], "Resource": "arn:aws:iam::*:role/*" }
  • EventBridge Permissões

{ "Effect": "Allow", "Action": [ "events:PutTargets", "events:RemoveTargets", "events:DescribeRule", "events:EnableRule", "events:ListRules", "events:PutRule", "events:DeleteRule", "events:ListEventSources", "events:DescribeEventSource", "events:ActivateEventSource", "events:DeactivateEventSource" ], "Resource": "arn:aws:events:*:*:rule/*" }