この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
소개
안녕하세요! 클래스메소드 금상원 입니다. 이번 블로그에서는 CloudFormation으로 Config Rule을 구축하는 방법에 대한 설명을 하려고 합니다.
목표
Config Rule를 사용하여 AWF의 로깅체크와 문제해결을 CloudFormation을 사용하여 구축해보자!
Config Rule 템플릿파일 작성(YAML)
ConfigRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: Wafv2LoggingEnabled
MaximumExecutionFrequency: One_Hour
Scope:
ComplianceResourceTypes:
- "AWS::WAFv2::WebACL"
Source:
Owner: AWS
SourceIdentifier: "WAFV2_LOGGING_ENABLED"
ConfigRule
이라는 새로운 리소스를 작성합니다.- Type에는
AWS::Config::ConfigRule
을 입력합니다. - Properties
ConfigRuleName
을 작성하여 ConfigRule이름을 정해줍니다.MaximumExecutionFrequency
을 작성하여 규칙에 대한 평가를 실행하는 최대 빈도를 설정합니다.
허용값)One_Hour | Six_Hours | Three_Hours | Twelve_Hours | TwentyFour_Hours
Scope
을 작성하여 규칙에 대한 평가를 트리거할 수 있는 리소스를 정의합니다.Source
을 작성하여 소유자와 어떤 규칙을 사용할 지 설정합니다.
Config Rule 문제해결 템플릿파일 작성(YAML)
ConfigRuleRemediation:
Type: AWS::Config::RemediationConfiguration
Properties:
Automatic: True
ConfigRuleName: Wafv2LoggingEnabled
Parameters:
AutomationAssumeRole:
StaticValue:
Values:
- !GetAtt [ ConfigSSMAutomationRole, Arn ]
LogDestinationConfigs:
StaticValue:
Values:
- !Ref S3BuketName
WebAclArn:
ResourceValue:
Value: "RESOURCE_ID"
MaximumAutomaticAttempts: 5
ResourceType: "AWS::WAFv2::WebACL"
RetryAttemptSeconds: 60
TargetId: "EnableWAFV2Logging"
TargetType: "SSM_DOCUMENT"
TargetVersion: "1"
ConfigRuleRemediation
이라는 새로운 리소스를 작성합니다.- Type에는
AWS::Config::RemediationConfiguration
을 입력합니다. - Properties
Automatic
을 사용하여 수정을 자동으로 트리거 되도록 설정 가능합니다.ConfigRuleName
을 작성하여 어떤 ConfigRule에 대한 것인지 작성합니다.Parameters
를 작성하여 필요한 값을 입력하거나 !GetAtt, !Ref와 같은 함수를 사용하여 불러옵니다.MaximumAutomaticAttempts
를 작성하여 자동 수정 시도의 최대 실패 횟수를 설정합니다. (기본으로 5로 설정 되어있습니다.)ResourceType
을 작성하여 리소스 유형을 작성합니다.RetryAttemptSeconds
을 작성하여 AWS Config가 자동 수정을 실행하는 최대 시간(초)를 설정합니다. (기본으로 60초로 설정되어있습니다.)TargetId
를 작성하여 어떤 SSM Automation 문서를 참조하는지를 설정합니다. (SSM Automation 문서의 이름)TargetType
대상의 유형입니다. 허용값)SSM_DOCUMENT
TargetVersion
어떤 SSM Automation문서의 버전을 사용할지 설정합니다.
전체 코드
AWSTemplateFormatVersion: "2010-09-09"
Resources:
ConfigSSMAutomationRole:
Type: AWS::IAM::Role
Properties:
RoleName: "WafV2LoggingFullAccess"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service: ssm.amazonaws.com
Action:
- "sts:AssumeRole"
Path: "/"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonS3FullAccess"
- "arn:aws:iam::aws:policy/AmazonSSMFullAccess"
- "arn:aws:iam::aws:policy/AWSWAFFullAccess"
ConfigRule:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: Wafv2LoggingEnabled
MaximumExecutionFrequency: One_Hour
Scope:
ComplianceResourceTypes:
- "AWS::WAFv2::WebACL"
Source:
Owner: AWS
SourceIdentifier: "WAFV2_LOGGING_ENABLED"
ConfigRuleRemediation:
Type: AWS::Config::RemediationConfiguration
Properties:
Automatic: True
ConfigRuleName: Wafv2LoggingEnabled
Parameters:
AutomationAssumeRole:
StaticValue:
Values:
- !GetAtt [ ConfigSSMAutomationRole, Arn ]
LogDestinationConfigs:
StaticValue:
Values:
- !Ref S3BuketName
WebAclArn:
ResourceValue:
Value: "RESOURCE_ID"
MaximumAutomaticAttempts: 5
ResourceType: "AWS::WAFv2::WebACL"
RetryAttemptSeconds: 60
TargetId: "EnableWAFV2Logging"
TargetType: "SSM_DOCUMENT"
TargetVersion: "1"
마무리
이번 블로그에서는 CloudFormation으로 Config Rule을 구축하고, WAF의 로깅 활성화를 체크하고 자동으로 로깅을 활성화 시키는 작업을 해보았습니다. 평소에 Config Rule을 CloudFormation으로 작성하고 싶으신분들에게 도움이 되었으면 합니다.