

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 배포 고려 사항
<a name="deployment-considerations"></a>

다음 섹션에서는이 솔루션을 구현하기 위한 제약 조건과 고려 사항을 제공합니다.

## AWS WAF 규칙
<a name="aws-waf-rules"></a>

이 솔루션이 생성하는 웹 ACL은 웹 애플리케이션에 대한 포괄적인 보호를 제공하도록 설계되었습니다. 이 솔루션은 웹 ACL에 추가할 수 있는 AWS 관리형 규칙 및 사용자 지정 규칙 세트를 제공합니다. 규칙을 포함하려면 CloudFormation 스택을 시작할 때 관련 파라미터에 `yes` 대해를 선택합니다. [1단계를 참조하세요. 파라미터 목록에 대한 스택을 시작합니다](step-1.-launch-the-stack.md).

**참고**  
out-of-box 제공 솔루션은 [AWS Firewall Manager](https://aws.amazon.com/firewall-manager)를 지원하지 않습니다. Firewall Manager의 규칙을 사용하려면 [소스 코드](https://github.com/aws-solutions/aws-waf-security-automations)에 사용자 지정을 적용하는 것이 좋습니다.

## 웹 ACL 트래픽 로깅
<a name="web-acl-traffic-logging"></a>

미국 동부(버지니아 북부) 이외의 AWS 리전에서 스택을 생성하고 **엔드포인트**를 로 설정하는 경우 **HTTP 서비스 장애 방지 활성화**를 `no` 또는 로 설정해야 `CloudFront`합니다`yes - AWS WAF rate based rule`.

다른 두 옵션(`yes - AWS Lambda log parser` 및 `yes - Amazon Athena log parser`)은 모든 AWS 엣지 로케이션에서 실행되는 웹 ACL에서 AWS WAF 로그를 활성화해야 하며 미국 동부(버지니아 북부) 외부에서는 지원되지 않습니다. 웹 ACL 트래픽 로깅에 대한 자세한 내용은 [AWS WAF 개발자 안내서](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html)를 참조하세요.

## 요청 구성 요소에 대한 과대 처리
<a name="oversize-handling-for-request-components"></a>

AWS WAF는 웹 요청 구성 요소의 본문, 헤더 또는 쿠키에 대한 크기 초과 콘텐츠 검사를 지원하지 않습니다. 이러한 요청 구성 요소 유형 중 하나를 검사하는 규칙 문을 작성할 때 다음 옵션 중 하나를 선택하여 AWS WAF에 이러한 요청으로 수행할 작업을 지시할 수 있습니다.
+  `yes` (계속) - 규칙 검사 기준에 따라 요청 구성 요소를 정상적으로 검사합니다. AWS WAF는 크기 제한 내에 있는 요청 구성 요소 콘텐츠를 검사합니다. 솔루션에 사용되는 기본 옵션입니다.
+  `yes - MATCH` - 웹 요청을 규칙 문과 일치하는 것으로 처리합니다. AWS WAF는 규칙의 검사 기준에 따라 평가하지 않고 요청에 규칙 작업을 적용합니다. `Block` 작업이 있는 규칙의 경우 과대 구성 요소로 요청을 차단합니다.
+  `yes - NO_MATCH` - 웹 요청을 규칙의 검사 기준에 따라 평가하지 않고 규칙 문과 일치하지 않는 것으로 취급합니다. AWS WAF는 일치하지 않는 규칙과 마찬가지로 웹 ACL의 나머지 규칙을 사용하여 웹 요청에 대한 검사를 계속합니다.

자세한 내용은 [ AWS WAF에서 과대 웹 요청 구성 요소 처리를](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-oversize-handling.html) 참조하세요.

## 여러 솔루션 배포
<a name="multiple-solution-deployments"></a>

솔루션을 동일한 계정 및 리전에 여러 번 배포할 수 있습니다. 각 배포에 고유한 CloudFormation 스택 이름과 Amazon S3 버킷 이름을 사용해야 합니다. 각 고유 배포에는 추가 요금이 발생하며 계정당, 리전당 [AWS WAF 할당량이](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html) 적용됩니다.

## 배포를 위한 최소 역할 권한(선택 사항)
<a name="minimum-role-permissions"></a>

고객은 배포에 필요한 최소 권한으로 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 앱 레지스트리 권한

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