AWSSupport-ConfigureDNSQueryLogging 런북을 사용하여 R53 DNS 쿼리의 로깅을 구성하는 방법

5분 분량
콘텐츠 수준: 기초
1

본 기사는 AWS 지원 자동화 워크플로우 (Support Automation Workflow)의 “AWSSupport-ConfigureDNSQueryLogging” 런북을 사용하여 Route53 DNS 쿼리 로깅을 구성하는 방법에 관해 설명합니다.

[안내]

DNS 쿼리 로그 구성은 VPC 또는 Route53 호스팅 영역에서 생성된 DNS 쿼리 트래픽 흐름을 캡처할 수 있게 해주는 기능입니다. 로그 데이터는 리소스의 연결 문제를 조사하고 문제를 해결하는 데 사용될 수 있습니다. 쿼리 로깅 및 해석기 쿼리 로그에 대한 자세한 내용은 퍼블릭 DNS 쿼리 로깅 리졸버 쿼리 로깅을 참조하시길 바랍니다.

[중요사항]

로그를 전달하려는 AWS 서비스(CloudWatch Logs, S3 또는 Amazon Kinesis Firehose)와 관련된 스토리지 비용이 계정에 청구됩니다.

참고: LogDestinationArn 값을 지정하지 않으면, 런북은 AWSSupport-ConfigureDNSQueryLogging-automation:EXECUTION_ID 이름으로 새로운 CloudWatch 로그 그룹을 생성하려고 시도합니다. 또한 런북은 새 CloudWatch 로그 그룹을 생성할 때, 로그 데이터 보존 기간을 14일로 설정하며, 퍼블릭 DNS 쿼리 로그는 CloudWatch 로그 그룹만 LogDestinationArn으로 지원합니다.

[런북 자동화 실행 절차]

1.AWS Systems Manager 콘솔로 이동하여 왼쪽 네비게이션에서 자동화(Automation)을 선택합니다.

2.우측의 런북 실행(Excute runbook) 버튼을 클릭합니다.

3.자동화 런북 모음에서 “AWSSupport-ConfigureDNSQueryLogging”를 선택한 후 Next를 클릭합니다.

4.자동화 런북 실행 시 4개의 실행 옵션이 있습니다.

  • Simple execution : 단일 계정에서 설정된 파라미터에 대해 가장 기본적인 로깅 실행 방식입니다. 이를 통해 특정 VPC, 호스팅 영역에 대해 DNS 쿼리 로깅을 구성합니다.
  • Rate control : 여러 리소스에 대해 동시에 실행할 때 사용하며 동시성(Concurrency)과 오류 임계값(Error threshold)을 설정할 수 있습니다.
  • Multi-account and Region : 여러 AWS 계정과 리전에 걸쳐 DNS 쿼리 로깅을 구성할 때 사용하며 Organizations 또는 리소스 데이터 동기화와 함께 사용할 수 있습니다.
  • Manual execution : 자동화 워크플로우의 각 실행 단계를 순차적으로 수동으로 제어할 때 사용합니다.
본 기사에서는 Simple excution을 통해 단일 계정에서 수행하는 과정에 대해 소개하겠습니다.
  1. 입력 파라미터(Input Parameters) 항목에 필요한 정보를 입력합니다.
  • ResourceId : DNS 로깅을 생성하실 리소스 ID입니다. QueryLogType이 Public일 경우 리소스는 Route 53 프라이빗 호스팅 영역의 ID여야 하며 QueryLogType이 Resolver/Private일 경우 리소스는 VPC의 ID여야 합니다.
  • QueryLogType : Public(Hosted Zone ID) 또는 Resolver/Private(VPC Id)을 선택할 수 있습니다.
  • LogDestinationArn : 로깅이 저장될 위치입니다. Cloudwatch log group, S3버킷 또는 Kinesis stream의 ARN을 입력해야 합니다. 지정하지 않을 경우 런북은 Cloudwatch log group을 자동으로 생성합니다.
  • AutomationAssumeRole (선택사항): AWS IAM(Identity and Access Management) 역할의 Amazon Resource Name(ARN)을 의미합니다. 해당 항목에 입력이 없는 경우 현재 IAM 사용자를 통해 런북을 실행합니다. “AWSSupport-ConfigureDNSQueryLogging”를 실행하기 위해서는 다음과 같은 IAM 권한(IAM permission)이 필요합니다. 런북에 사용될 서비스 역할을 생성해야 하는 경우 콘솔을 사용하여 Automation을 위한 서비스 역할 생성을 참고하시길 바랍니다.
    * ec2:DescribeVpcs
    * firehose:ListTagsForDeliveryStream
    * firehose:PutRecord
    * firehose:PutRecordBatch
    * firehose:TagDeliveryStream
    * iam:AttachRolePolicy
    * iam:CreatePolicy
    * iam:CreateRole
    * iam:CreateServiceLinkedRole
    * iam:DeletePolicy
    * iam:DeleteRole
    * iam:DeleteRolePolicy
    * iam:GetPolicy
    * iam:GetRole
    * iam:PassRole
    * iam:PutRolePolicy
    * iam:TagRole
    * iam:UpdateRole
    * logs:CreateLogDelivery
    * logs:CreateLogGroup
    * logs:DeleteLogDelivery
    * logs:DeleteLogGroup
    * logs:DescribeLogGroups
    * logs:DescribeLogStreams
    * logs:DescribeResourcePolicies
    * logs:ListLogDeliveries
    * logs:PutResourcePolicy
    * logs:PutRetentionPolicy
    * logs:UpdateLogDelivery
    * logs:TagResource
    * route53:CreateQueryLoggingConfig
    * route53:DeleteQueryLoggingConfig
    * route53:GetHostedZone
    * route53resolver:AssociateResolverQueryLogConfig
    * route53resolver:CreateResolverQueryLogConfig
    * route53resolver:DeleteResolverQueryLogConfig
    * route53resolver:TagResource
    * s3:GetBucketAcl

  1. 하단에 실행(Excute)를 클릭할 경우 아래 그림과 같이 4개의 Step이 완료됩니다.

주요 유의사항 : Public 대상 런북 실행 중 4단계에서 다음과 같은 CreateQueryLoggingConfig 에러가 발생하는 경우 추가적으로 R53에서 cloudwatch log 리소스에 대한 권한을 부여해야 합니다.

RuntimeError - Something went wrong on the DNS query log creation, please check: An error occurred (InsufficientCloudWatchLogsResourcePolicy) when calling the CreateQueryLoggingConfig operation: The resource policy that you're using for Route 53 query logging doesn't grant Route 53 sufficient permission to create a log stream in the specified log group.

이때 CloudWatch 콘솔을 사용하여 리소스 정책을 생성하거나 편집할 수 없으므로 CloudWatch API, AWS SDK 중 하나 또는 AWS CLI를 사용해야 합니다.
  • AWS CLI를 통해 부여하는 방법은 다음과 같습니다.
  • AWS CLI가 수행되는 위치에 다음과 같이 권한을 부여할 r53.json을 생성합니다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Route53LogsToCloudWatchLogs",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "route53.amazonaws.com"
        ]
      },
      "Action": [
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:us-east-1:<ACCOUNTID>:log-group:*"
    }
  ]
}
  • 이어서 다음과 같이 AWS CLI를 수행합니다.
#aws logs put-resource-policy --policy-name R53permissions --policy-document file://r53.json --region us-east-1


{
    "resourcePolicy": {
        "policyName": "R53permissions",
        "policyDocument": "{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"Route53LogsToCloudWatchLogs\",\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Service\": [\n          \"route53.amazonaws.com\"\n        ]\n      },\n      \"Action\": [\n        \"logs:CreateLogStream\",\n        \"logs:PutLogEvents\"\n      ],\n      \"Resource\": \"arn:aws:logs:us-east-1:<ACCOUNTID>:log-group:*\"\n    }\n  ]\n}\n",
        "lastUpdatedTime": 1745317760301
    }
}

  1. 이어서 런북을 통해 생성된 로깅 환경을 확인 가능합니다.

[퍼블릭 환경]

[프라이빗 환경]

[DNS 쿼리 로그 비활성화]

런북 수행 이후 생성된 DNS 쿼리 로깅을 삭제하길 원하신다면 다음과 같이 삭제할 수 있습니다.

퍼블릭 DNS 쿼리 로그의 경우:

  1. Amazon Route 53 콘솔 열기
  2. 호스팅 영역 섹션으로 이동
  3. 쿼리 로깅을 비활성화할 호스팅 영역 선택
  4. 호스팅 영역 세부 정보 창 위의 "쿼리 로깅 구성" 탭 클릭
  5. "삭제" 버튼을 클릭하여 쿼리 로깅 구성 제거

Resolver/프라이빗 DNS 쿼리 로그의 경우:

  1. Amazon Route 53 콘솔 열기
  2. Resolver 섹션으로 이동
  3. VPC 탭 선택
  4. 비활성화할 쿼리 로깅 구성 선택 및 로깅 중지
  5. "삭제" 버튼을 클릭하여 구성 제거
  6. 구성이 VPC와 연결되어 있는 경우, 삭제하기 전에 VPC에서 연결 해제 필요

이러한 단계를 따르면 DNS 쿼리 로그 구성을 비활성화하고 지정된 대상으로의 DNS 쿼리 데이터 캡처 및 전달을 중지할 수 있습니다.

이와 같이 AWS 지원 자동화 워크플로우 (Support Automation Workflow) 런북을 실행하였으나 이슈가 발생한 경우, AWS Support 에 문의하여 추가 지원을 받을 수 있습니다. 이때 앞서 실행한 런북 실행 ID 및 실행 결과 등의 정보를 포함하여 문의하시면 신속한 지원에 도움이 됩니다.

참고 : https://docs.aws.amazon.com/ko_kr/systems-manager-automation-runbooks/latest/userguide/automation-aws-configure-dns-query-logging.html

1 댓글

유용한 정보 감사합니다!

답글을 게시함 10일 전