CloudWatch Logs
, S3 버킷
, Kinesis Data Firehose
입니다.웹 ACL에서 내보내는 요금은 따로 발생하지 않고, 각 서비스에 저장할 때 그 서비스의 비용 정책에 따릅니다.
저는 S3 버킷
에 로그를 전송해보려 합니다. 이 작업을 진행하는 사용자에게는 아래의 정책이 부여되어 있어야 합니다. 아래 정책은 웹 ACL 로깅 설정
과 S3 버킷으로 로그를 전송할 수 있는 권한
이 들어있습니다.
{
"Version":"2012-10-17",
"Statement":[
{
"Action":[
"wafv2:PutLoggingConfiguration",
"wafv2:DeleteLoggingConfiguration"
],
"Resource":[
"*"
],
"Effect":"Allow",
"Sid":"LoggingConfigurationAPI"
},
{
"Sid":"WebACLLogDelivery",
"Action":[
"logs:CreateLogDelivery",
"logs:DeleteLogDelivery"
],
"Resource": "*",
"Effect":"Allow"
},
{
"Sid":"WebACLLoggingS3",
"Action":[
"s3:PutBucketPolicy",
"s3:GetBucketPolicy"
],
"Resource": [
"arn:aws:s3:::aws-waf-logs-example-bucket"
],
"Effect":"Allow"
}
]
}
WAF에서 S3로 트래픽 로그를 전송하는 과정에 대한 자세한 사항은 AWS 공식 문서 - 웹 ACL 트래픽 로깅: S3를 참고하세요.
[WAF 콘솔] > Web ACLs
> 웹 ACL 선택
> Logging and metrics
탭 > Logging
활성화(enable)
저는 S3 버킷
을 생성하고 이 버킷에 로그를 저장해보도록 하겠습니다.
이름 지정 요구 사항 및 구문에 명시된 방법에 따라 네이밍을 진행합니다.
버킷을 생성합니다.
생성한 버킷에는 아래의 버킷 정책이 있어야 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSLogDeliveryWrite",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::<버킷 이름>/AWSLogs/<계정 ID>/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceAccount": ["<계정 ID>"]
},
"ArnLike": {
"aws:SourceArn": ["arn:aws:logs:<리전 명>:<계정 ID>:*"]
}
}
},
{
"Sid": "AWSLogDeliveryAclCheck",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:GetBucketAcl",
"Resource": "arn:aws:s3:::<버킷 이름>",
"Condition": {
"StringEquals": {
"aws:SourceAccount": ["<계정 ID>"]
},
"ArnLike": {
"aws:SourceArn": ["arn:aws:logs:<리전 명>:<계정 ID>:*"]
}
}
}
]
}
다시 웹 ACL 생성 화면으로 돌아옵니다. 새로고침 버튼을 누르면 앞에 접두사로 aws-waf-logs
가 붙은 버킷이 나타나는 것을 확인할 수 있습니다.
Redacted fields
에서 로깅하길 원하지 않는 필드를 선택할 수 있습니다.
로그에 대한 필터를 만들 수 있습니다. 예를 들어, 요청이 Block
된 것에 대해서만 로그가 남도록 할 수 있습니다.
저장
버튼을 누르면 웹 ACL의 로깅
이 활성화됩니다.