デプロイに関する考慮事項
次のセクションでは、このソリューションを実装するための制約と考慮事項について説明します。
AWS WAF ルール
このソリューションが生成するウェブ ACL は、ウェブアプリケーションを包括的に保護するように設計されています。このソリューションは、ウェブ ACL に追加できる一連の AWS マネージドルールおよびカスタムルールを提供します。ルールを含めるには、CloudFormation スタックを起動するときに関連するパラメータで [yes
] を選択します。パラメータのリストに関しては「ステップ 1. スタックを起動する」を参照してください。
注記
すぐに使用できるソリューションは AWS Firewall Manager
ウェブ ACL トラフィックロギング
米国東部 (バージニア北部) 以外の AWS リージョンでスタックを作成して、エンドポイント を [CloudFront
] に設定する場合は、Activate HTTP Flood Protection を [no
] または [yes - AWS WAF rate based rule
] に設定する必要があります。
他の 2 つのオプション (yes - AWS Lambda log parser
と yes - Amazon Athena log parser
) では、すべての AWS エッジロケーションで実行されるウェブ ACL で AWS WAF ログをアクティブ化する必要があります。これは米国東部 (バージニア北部) 以外ではサポートされていません。ウェブ ACL トラフィックのロギングに関する詳細については、「AWS WAF 開発者ガイド」を参照してください。
過剰サイズのリクエストコンポーネントの処理
AWS WAF は、ウェブリクエストコンポーネント本文、ヘッダー、または cookie のオーバーサイズのコンテンツの検査をサポートしていません。これらのリクエストコンポーネントタイプの 1 つを検査するルールステートメントを作成する場合、これらのオプションのいずれかを選択して、これらのリクエストの処理方法を AWS WAF に指示できます。
-
yes
(continue) – ルール検査基準に従って、リクエストコンポーネントを通常どおり検査します。AWS WAF は、サイズ制限内のリクエストコンポーネントのコンテンツを検査します。このソリューションで使用するデフォルトのオプションです。 -
yes - MATCH
- ウェブリクエストをルールステートメントと一致するものとして扱います。AWS WAF は、ルールの検査基準に照らして評価することなく、ルールアクションをリクエストに適用します。Block
アクションのルールの場合、オーバーサイズコンポーネントでのリクエストをブロックします。 -
yes - NO_MATCH
– ルールの検査基準に対して評価せずに、ウェブリクエストをルールステートメントに一致しないものとして扱います。AWS WAF は、一致しないルールの場合と同様に、ウェブ ACL の残りのルールを使用してウェブリクエストの検査を続行します。
詳細については、「AWS WAF でのオーバーサイズウェブリクエストコンポーネントの処理」を参照してください。
複数のソリューションデプロイ
ソリューションは、同じアカウントとリージョンに複数回デプロイできます。デプロイごとに一意の CloudFormation スタック名と Amazon S3 バケット名を使用する必要があります。それぞれの固有のデプロイメントには追加料金が発生し、アカウントごと、リージョンごとの AWS WAF クォータが適用されます。
デプロイに必要なロールの最小限のアクセス許可 (オプション)
お客様は、デプロイに必要な最小限のアクセス許可を持つ IAM ロールを手動で作成できます。
-
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/*" ] }
-
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:*" }
-
Firehose のアクセス許可
{ "Effect": "Allow", "Action": [ "firehose:CreateDeliveryStream", "firehose:DeleteDeliveryStream", "firehose:DescribeDeliveryStream", "firehose:StartDeliveryStreamEncryption", "firehose:StopDeliveryStreamEncryption", "firehose:UpdateDestination" ], "Resource": "arn:aws:firehose:*:*:deliverystream/*" }
-
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:::*" }
-
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*" }
-
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 Logs のアクセス許可
{ "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 のアクセス許可
{ "Effect": "Allow", "Action": [ "cloudwatch:DeleteDashboards", "cloudwatch:GetDashboard", "cloudwatch:ListDashboards", "cloudwatch:PutDashboard", "cloudwatch:PutMetricData" ], "Resource": "*" }
-
SNS のアクセス許可
{ "Effect": "Allow", "Action": [ "sns:CreateTopic", "sns:DeleteTopic", "sns:Subscribe", "sns:Unsubscribe", "sns:SetTopicAttributes" ], "Resource": "arn:aws:sns:*:*:*" }
-
DynamoDB のアクセス許可
{ "Effect": "Allow", "Action": [ "dynamodb:CreateTable", "dynamodb:DeleteTable", "dynamodb:DescribeTable", "dynamodb:PutItem", "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem" ], "Resource": "arn:aws:dynamodb:*:*:table/*" }
-
CloudFormation のアクセス許可
{ "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "cloudformation:ListStacks" ], "Resource": "arn:aws:cloudformation:*:*:stack/*/*" }
-
Service Catalog App Registry のアクセス許可
{ "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 のアクセス許可
{ "Effect": "Allow", "Action": [ "xray:PutTraceSegments", "xray:PutTelemetryRecords" ], "Resource": "*" }
-
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 のアクセス許可
{ "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/*" }