Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pertimbangan deployment
Bagian berikut memberikan kendala dan pertimbangan untuk menerapkan solusi ini.
Aturan AWS WAF
ACL web yang dihasilkan solusi ini dirancang untuk menawarkan perlindungan komprehensif untuk aplikasi web. Solusinya menyediakan seperangkat Aturan Terkelola AWS dan aturan khusus yang dapat Anda tambahkan ke ACL web. Untuk memasukkan aturan, pilih yes
parameter yang relevan saat meluncurkan CloudFormation tumpukan. Lihat Langkah 1. Luncurkan tumpukan untuk daftar parameter.
catatan
out-of-boxSolusinya tidak mendukung AWS Firewall Manager
Pencatatan lalu lintas ACL web
Jika Anda membuat tumpukan di Wilayah AWS selain US East (Virginia N.) dan menetapkan Endpoint sebagaiCloudFront
, Anda harus menyetel Activate HTTP Flood Protection ke no
atau. yes - AWS WAF rate based rule
Dua opsi lainnya (yes - AWS Lambda log parser
danyes - Amazon Athena log parser
) memerlukan pengaktifan log AWS WAF di ACL web yang berjalan di semua lokasi edge AWS, dan ini tidak didukung di luar US East (Virginia N.). Untuk informasi selengkapnya tentang mencatat lalu lintas ACL Web, lihat panduan pengembang AWS WAF.
Penanganan kebesaran untuk komponen permintaan
AWS WAF tidak mendukung pemeriksaan konten berukuran besar untuk isi, header, atau cookie komponen permintaan web. Saat Anda menulis pernyataan aturan yang memeriksa salah satu jenis komponen permintaan ini, Anda dapat memilih salah satu opsi ini untuk memberi tahu AWS WAF apa yang harus dilakukan dengan permintaan ini:
-
yes
(lanjutkan) - Periksa komponen permintaan secara normal sesuai dengan kriteria inspeksi aturan. AWS WAF memeriksa konten komponen permintaan yang berada dalam batasan ukuran. Ini adalah opsi default yang digunakan dalam solusi. -
yes - MATCH
- Perlakukan permintaan web sebagai pencocokan pernyataan aturan. AWS WAF menerapkan tindakan aturan pada permintaan tanpa mengevaluasinya terhadap kriteria inspeksi aturan. Untuk aturan denganBlock
tindakan, ini memblokir permintaan dengan komponen oversize. -
yes - NO_MATCH
- Perlakukan permintaan web sebagai tidak cocok dengan pernyataan aturan, tanpa mengevaluasinya terhadap kriteria inspeksi aturan. AWS WAF melanjutkan inspeksi permintaan web dengan menggunakan aturan lainnya di ACL web, seperti yang akan dilakukan untuk aturan yang tidak cocok.
Untuk informasi selengkapnya, lihat Menangani komponen permintaan web yang terlalu besar di AWS WAF.
Beberapa penerapan solusi
Anda dapat menerapkan solusi beberapa kali di akun dan Wilayah yang sama. Anda harus menggunakan nama CloudFormation tumpukan unik dan nama bucket Amazon S3 untuk setiap penerapan. Setiap penerapan unik dikenakan biaya tambahan dan tunduk pada kuota AWS WAF per akun, per Wilayah.
Izin peran minimum untuk penerapan (Opsional)
Pelanggan dapat membuat peran IAM secara manual dengan izin minimum yang diperlukan untuk penerapan:
-
Izin 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/*" ] }
-
Izin 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:*" }
-
Izin Firehose
{ "Effect": "Allow", "Action": [ "firehose:CreateDeliveryStream", "firehose:DeleteDeliveryStream", "firehose:DescribeDeliveryStream", "firehose:StartDeliveryStreamEncryption", "firehose:StopDeliveryStreamEncryption", "firehose:UpdateDestination" ], "Resource": "arn:aws:firehose:*:*:deliverystream/*" }
-
Izin 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:::*" }
-
Izin 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*" }
-
Izin 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 Izin Log
{ "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 Izin
{ "Effect": "Allow", "Action": [ "cloudwatch:DeleteDashboards", "cloudwatch:GetDashboard", "cloudwatch:ListDashboards", "cloudwatch:PutDashboard", "cloudwatch:PutMetricData" ], "Resource": "*" }
-
Izin SNS
{ "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic", "sns:Subscribe", "sns:Unsubscribe", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:*:*:*" }
-
Izin DynamoDB
{ "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:DeleteTable", "dynamodb:DescribeTable", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:*:*:table/*" }
-
CloudFormation Izin
{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "cloudformation:ListStacks" ], "Resource": "arn:aws:cloudformation:*:*:stack/*/*" }
-
Izin Registri Aplikasi 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:*:*:*" }
-
Izin X-Ray
{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" }
-
Izin 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 Izin
{ "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/*" }