부분 쿼리 로그 활성화
DNS 쿼리 로그는 DNS 네임서버가 처리하는 모든 요청을 자세히 기록하여 DNS 트래픽, 죽은 레코드, 성장 분석에 대한 통찰력을 제공합니다. IBM® NS1 Connect® 에서 쿼리 로그는 시간 버킷(30초) 내에 집계되어 고객이 정의한 S3 위치(버킷 및 접두사)로 전송됩니다. S3 객체는 각 줄이 단일 집계를 나타내는 gzip 인코딩된 JSONL(줄로 구분된 JSON)입니다. 객체 키는 처리 시간으로 포맷되는 반면, 로그는 이벤트 시간으로 타임스탬프가 지정됩니다.
다음에 대한 액세스 권한 부여 NS1 Connect
AWS 문서에 제공된 지침에 따라 타사에게 S3 위치에 대한 액세스 권한을 부여합니다. 그런 다음 다음 정보와 함께 IBM 지원팀으로 문의하세요:
- S3 버킷 이름, 지역, 접두사. 참고: 접두사는 슬래시(/)로 끝나야 합니다.
- 다음 정책을 사용하는 AWS ID 및 액세스 관리(IAM) 역할의 Amazon 리소스 이름(ARN)입니다:
- 위 S3 위치에 대한 최소한의
s3:PutObject권한이 필요합니다. arn:aws:iam::025043166333:role/ service-role/pipeline-querylogs-role-ukj3oed7에 NS1 Connectsts:AssumeRole권한을 부여하는 트러스트 정책.
- 위 S3 위치에 대한 최소한의
- 위 신뢰 정책이 적용되는 고유 식별자(
sts:ExternalId, 일반적으로 UUID).
적절한 IAM 역할 및 정책을 만들려면 Terraform® 구성 예시를 참조하세요.
예제 데이터
개체 접두사는 연도, 월, 일, 시간(GMT 기준)으로 구분됩니다.
객체 키의 예
s3://<customer_bucket>/<customer_prefix>dns.query.logs/2019/10/16/20/2019-10-16-20-46- 33.115951011.gz
참고 : 각 개체는 gzip으로 인코딩되어 있습니다. 압축되지 않은 데이터 형식은 줄로 구분된 JSON입니다.
예제 로그 라인
{
“count”: 10,
“customer”: 12345,
“domain”: “abc.example.com”,
“metric_name”: “dns.query.logs”,
“network”: “0”,
"pop":"iad",
“rectype”: “A”,
“timestamp”: 1571250180,
“zone”: “example.com”
}
| 매개변수 | 설명 |
| count | 집계 기간(30초) 내에 이 레코드가 쿼리된 횟수입니다 |
| customer | NS1 Connect 계정 ID |
| domain | 쿼리된 레코드 |
| metric_name | dns.queries.logs 현재 포함된 데이터 세트입니다. |
| network | 전용 네트워크를 사용하는 고객을 위한 고유 네트워크 식별자(기본값은 0) |
| pop | 존재 지점의 물리적 위치 ( PoP ) 네임 서버 |
| rectype | 쿼리된 DNS 레코드 유형 |
| timestamp | 쿼리 이벤트 시간 |
| zone | 쿼리된 레코드의 포괄적인 DNS 영역 |
예제 Terraform 구성
Terraform 를 사용하여 AWS 리소스를 관리하는 경우 아래 코드를 복사하여 붙여넣고 Terraform 를 사용하여 구성을 적용합니다.
variable "ns1_querylogs_s3_bucket" {
type = string
description = "The name of the destination bucket for NS1 query log objects."
}
variable "ns1_querylogs_s3_prefix" {
type = string
description = "The s3 prefix to prepend to all NS1 query log objects. Omit leading slash. Include trailing slash."
}
variable "ns1_querylogs_external_id" {
type = string
description = "An agreed-upon value for assuming external IAM roles (typically a UUID): https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user_externalid.html"
}
resource "aws_iam_role" "ns1_querylogs" {
name = "ns1-querylogs-role"
description = "The role that NS1 assumes to send query logs logs to this AWS account."
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::025043166333:role/service-role/pipeline-querylogs-role-ukj3oed7"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "${var.ns1_querylogs_external_id}"
}
}
}
]
}
EOF
}
resource "aws_iam_policy" "ns1_querylogs" {
name = "ns1-querylogs-policy"
description = "Allows s3 objects to be put to a specific bucket and prefix."
path = "/"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::${var.ns1_querylogs_s3_bucket}/${var.ns1_querylogs_s3_prefix}*"
}
]
}
EOF
}
resource "aws_iam_role_policy_attachment" "ns1_querylogs" {
role = aws_iam_role.ns1_querylogs.name
policy_arn = aws_iam_policy.ns1_querylogs.arn
}