部分的なクエリログの有効化
DNSクエリログは、DNSネームサーバーが処理したすべての要求の詳細を記録しており、DNSトラフィック、無効なレコード、成長分析に関する洞察を提供します。 IBM® NS1 Connect® では、クエリーログは時間バケット(30秒)内に集約され、顧客が定義した S3 の場所(バケットとプレフィックス)に送信される。 S3 オブジェクトはgzipエンコードされたJSONL(行区切りのJSON)であり、各行は1つの集約を表す。 オブジェクトキーは処理時間でフォーマットされ、ログはイベント時間でタイムスタンプされます。
アクセス権の認可 NS1 Connect
AWS ドキュメントに記載されている手順に従って、 S3 の場所へのサードパーティのアクセスを許可してください。 その後、 IBM サポートに以下の情報をご連絡ください:
- S3 バケット名、リージョン、プレフィックス。 注:接頭辞はスラッシュ(‘/’)で終わる必要があります。
- AWS Identity and Access Management (IAM) ロールの Amazon Resource Name (ARN):
- 少なくとも、
s3:PutObject上記の S3 場所へのアクセス権限が必要です。 arn:aws:iam::025043166333:role/ service-role/pipeline-querylogs-role-ukj3oed7に NS1 Connectsts:AssumeRoleのパーミッションを与える信頼ポリシー。
- 少なくとも、
- 上記の信頼ポリシーの条件となる
sts:ExternalId(通常はUUID)。
適切なIAMロールとポリシーの作成については、 Terraform® の設定例を参照してください。
データ例
オブジェクトの接頭辞は、年、月、日、時(グリニッジ標準時)で分割されます。
オブジェクトキーの例
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 | Point of Presence ( PoP ) ネームサーバーの物理的な場所 |
| rectype | 問い合わせたDNSレコードのタイプ |
| timestamp | クエリーイベント時間 |
| zone | 問い合わせレコードを包含するDNSゾーン |
Terraform 設定例
AWS リソースの管理に Terraform を使用している場合は、以下のコードをコピー&ペーストして、 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
}