部分的なクエリログの有効化

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-ukj3oed7NS1 Connect sts: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
}