Considérations relatives au déploiement - Automatisations de sécurité pour AWS WAF

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Considérations relatives au déploiement

Les sections suivantes présentent les contraintes et les considérations relatives à la mise en œuvre de cette solution.

Règles AWS WAF

L'ACL Web généré par cette solution est conçue pour offrir une protection complète aux applications Web. La solution fournit un ensemble de règles gérées par AWS et de règles personnalisées que vous pouvez ajouter à l'ACL Web. Pour inclure une règle, choisissez yes les paramètres appropriés lors du lancement de la CloudFormation pile. Reportez-vous à l'étape 1. Lancez la pile pour la liste des paramètres.

Note

La out-of-box solution ne prend pas en charge AWS Firewall Manager. Si vous souhaitez utiliser les règles de Firewall Manager, nous vous recommandons d'appliquer des personnalisations à son code source.

Journalisation du trafic Web ACL

Si vous créez la pile dans une région AWS autre que l'est des États-Unis (Virginie du Nord) et que vous définissez le point de terminaison comme telCloudFront, vous devez définir Activate HTTP Flood Protection sur no ouyes - AWS WAF rate based rule.

Les deux autres options (yes - AWS Lambda log parseretyes - Amazon Athena log parser) nécessitent l'activation des journaux AWS WAF sur une ACL Web qui s'exécute dans tous les emplacements périphériques AWS, ce qui n'est pas pris en charge en dehors de l'est des États-Unis (Virginie du Nord). Pour plus d'informations sur la journalisation du trafic ACL Web, consultez le guide du développeur AWS WAF.

Gestion des composants de demande surdimensionnés

AWS WAF ne prend pas en charge l'inspection du contenu surdimensionné pour détecter le corps, les en-têtes ou les cookies du composant de requête Web. Lorsque vous rédigez une instruction de règle qui inspecte l'un de ces types de composants de demande, vous pouvez choisir l'une des options suivantes pour indiquer à AWS WAF ce qu'il doit faire avec ces demandes :

  • yes(continue) - Inspectez le composant de demande normalement conformément aux critères d'inspection des règles. AWS WAF inspecte le contenu du composant de demande qui respecte les limites de taille. Il s'agit de l'option par défaut utilisée dans la solution.

  • yes - MATCH - Traiter la demande Web comme correspondant à l'instruction de règle. AWS WAF applique l'action de règle à la demande sans l'évaluer par rapport aux critères d'inspection de la règle. Pour une règle comportant une Block action, cela bloque la demande avec le composant surdimensionné.

  • yes - NO_MATCH- Traitez la requête Web comme ne correspondant pas à l'énoncé de règle, sans l'évaluer par rapport aux critères d'inspection de la règle. AWS WAF poursuit son inspection de la requête Web en utilisant le reste des règles de l'ACL Web, comme il le ferait pour toute règle non correspondante.

Pour plus d'informations, reportez-vous à la section Gestion des composants de requêtes Web surdimensionnés dans AWS WAF.

Déploiements de solutions multiples

Vous pouvez déployer la solution plusieurs fois dans le même compte et dans la même région. Vous devez utiliser un nom de CloudFormation pile et un nom de compartiment Amazon S3 uniques pour chaque déploiement. Chaque déploiement unique entraîne des frais supplémentaires et est soumis aux quotas AWS WAF par compte et par région.

Autorisations de rôle minimales pour le déploiement (facultatif)

Les clients peuvent créer manuellement un rôle IAM avec les autorisations minimales requises pour le déploiement :

  • Autorisations 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/*" ] }
  • Autorisations 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:*" }
  • Autorisations Firehose

{ "Effect": "Allow", "Action": [ "firehose:CreateDeliveryStream", "firehose:DeleteDeliveryStream", "firehose:DescribeDeliveryStream", "firehose:StartDeliveryStreamEncryption", "firehose:StopDeliveryStreamEncryption", "firehose:UpdateDestination" ], "Resource": "arn:aws:firehose:*:*:deliverystream/*" }
  • Autorisations 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:::*" }
  • Autorisations d'Athéna

{ "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*" }
  • Autorisations 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 Autorisations relatives aux journaux

{ "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 Autorisations

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

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

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

{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "cloudformation:ListStacks" ], "Resource": "arn:aws:cloudformation:*:*:stack/*/*" }
  • Autorisations de registre de l'application 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:*:*:*" }
  • Autorisations X-Ray

{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" }
  • Autorisations 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 Autorisations

{ "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/*" }