Überlegungen zur Bereitstellung - Sicherheitsautomatisierungen für AWS WAF

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Überlegungen zur Bereitstellung

Die folgenden Abschnitte enthalten Einschränkungen und Überlegungen zur Implementierung dieser Lösung.

AWS-WAF-Regeln

Die Web-ACL, die diese Lösung generiert, wurde entwickelt, um umfassenden Schutz für Webanwendungen zu bieten. Die Lösung bietet eine Reihe von AWS Managed Rules und benutzerdefinierten Regeln, die Sie der Web-ACL hinzufügen können. Um eine Regel einzubeziehen, wählen Sie yes beim Starten des CloudFormation Stacks die entsprechenden Parameter aus. Siehe Schritt 1. Starten Sie den Stack für die Liste der Parameter.

Anmerkung

Die out-of-box Lösung unterstützt AWS Firewall Manager nicht. Wenn Sie die Regeln in Firewall Manager verwenden möchten, empfehlen wir Ihnen, Anpassungen am Quellcode vorzunehmen.

Protokollierung des Web-ACL-Datenverkehrs

Wenn Sie den Stack in einer anderen AWS-Region als USA Ost (Nord-Virginia) erstellen und den Endpunkt als festlegenCloudFront, müssen Sie Activate HTTP Flood Protection auf no oder setzenyes - AWS WAF rate based rule.

Die anderen beiden Optionen (yes - AWS Lambda log parserundyes - Amazon Athena log parser) erfordern die Aktivierung von AWS-WAF-Protokollen auf einer Web-ACL, die an allen AWS-Edge-Standorten ausgeführt wird. Dies wird außerhalb der USA Ost (Nord-Virginia) nicht unterstützt. Weitere Informationen zur Protokollierung von Web-ACL-Verkehr finden Sie im AWS WAF Developer Guide.

Bearbeitung zu großer Mengen von Anforderungskomponenten

AWS WAF unterstützt nicht die Überprüfung übergroßer Inhalte für den Hauptteil, die Header oder Cookies der Webanforderungskomponente. Wenn Sie eine Regelanweisung schreiben, die einen dieser Anforderungskomponententypen untersucht, können Sie eine der folgenden Optionen wählen, um AWS WAF mitzuteilen, was mit diesen Anfragen geschehen soll:

  • yes(weiter) — Untersuchen Sie die Anforderungskomponente auf normale Weise gemäß den Regelprüfungskriterien. AWS WAF überprüft den Inhalt der Anforderungskomponente, der innerhalb der Größenbeschränkungen liegt. Dies ist die Standardoption, die in der Lösung verwendet wird.

  • yes - MATCH – Behandeln der Web-Anforderung als übereinstimmend mit der Regelanweisung. AWS WAF wendet die Regelaktion auf die Anfrage an, ohne sie anhand der Prüfkriterien der Regel zu bewerten. Bei einer Regel mit der Block-Aktion wird die Anforderung mit der übergroßen Komponente blockiert.

  • yes - NO_MATCH— Behandeln Sie die Webanfrage so, als ob sie nicht mit der Regelaussage übereinstimmt, ohne sie anhand der Prüfkriterien der Regel zu bewerten. AWS WAF setzt die Prüfung der Webanforderung fort, indem sie die restlichen Regeln in der Web-ACL verwendet, wie dies bei jeder Regel der Fall wäre, die nicht übereinstimmend ist.

Weitere Informationen finden Sie unter Umgang mit übergroßen Webanforderungskomponenten in AWS WAF.

Bereitstellungen mehrerer Lösungen

Sie können die Lösung mehrmals im selben Konto und in derselben Region bereitstellen. Sie müssen für jede Bereitstellung einen eindeutigen CloudFormation Stacknamen und einen Amazon S3 S3-Bucket-Namen verwenden. Für jede einzelne Bereitstellung fallen zusätzliche Gebühren an und unterliegen den AWS-WAF-Kontingenten pro Konto und Region.

Minimale Rollenberechtigungen für die Bereitstellung (optional)

Kunden können manuell eine IAM-Rolle mit den für die Bereitstellung erforderlichen Mindestberechtigungen erstellen:

  • WAF-Berechtigungen

{ "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/*" ] }
  • Lambda-Berechtigungen

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

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

{ "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:::*" }
  • Athena-Berechtigungen

{ "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*" }
  • Glue-Berechtigungen

{ "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 Protokolliert Berechtigungen

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

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

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

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

{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "cloudformation:ListStacks" ], "Resource": "arn:aws:cloudformation:*:*:stack/*/*" }
  • Registrierungsberechtigungen für Service Catalog-Apps

{ "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:*:*:*" }
  • X-Ray-Genehmigungen

{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" }
  • IAM-Berechtigungen

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

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