Teilweise Abfrageprotokolle aktivieren

DNS-Abfrageprotokolle enthalten detaillierte Angaben zu allen von den DNS-Nameservern bearbeiteten Anfragen und bieten Einblicke in den DNS-Verkehr, tote Einträge und Wachstumsanalysen. In IBM® NS1 Connect® werden die Abfrageprotokolle in Zeitabschnitten (30 Sekunden) zusammengefasst und an einen vom Kunden definierten S3 Speicherort (Abschnitt und Präfix) gesendet. S3 objekte sind gzip-kodiertes JSONL (zeilenbegrenztes JSON), wobei jede Zeile eine einzelne Aggregation darstellt. Die Objektschlüssel werden mit Prozesszeiten formatiert, während die Protokolle mit der Ereigniszeit versehen werden.

Gewährung des Zugangs zu NS1 Connect

Befolgen Sie die Anweisungen in der Dokumentation AWS , um Dritten den Zugriff auf Ihren Standort S3 zu gewähren. Wenden Sie sich dann an den IBM Support und geben Sie die folgenden Informationen an:

  • S3 name des Eimers, Region und Präfix. Hinweis: Das Präfix sollte mit einem Schrägstrich ("/") enden.
  • Amazon Resource Name (ARN) einer AWS Identity and Access Management (IAM) Rolle mit den folgenden Richtlinien:
    • Mindestens s3:PutObject -Berechtigungen für den oben genannten S3 -Standort.
    • Eine Vertrauensrichtlinie, die NS1 Connect sts:AssumeRole Berechtigungen an arn:aws:iam::025043166333:role/ service-role/pipeline-querylogs-role-ukj3oed7 erteilt.
  • Eine sts:ExternalId, auf die sich die oben genannte Vertrauensrichtlinie bezieht (in der Regel eine UUID).

Siehe die Beispielkonfiguration Terraform® für die Erstellung der richtigen IAM-Rollen und Richtlinien.

Beispieldaten

Objektpräfixe werden nach Jahr, Monat, Tag und Stunde (in GMT) unterteilt.

Beispiel für Objektschlüssel
s3://<customer_bucket>/<customer_prefix>dns.query.logs/2019/10/16/20/2019-10-16-20-46- 33.115951011.gz
Hinweis : Jedes Objekt ist gzip-codiert. Das unkomprimierte Datenformat ist zeilenbegrenztes JSON.
Beispielprotokolllinie
{ 
   “count”: 10, 
   “customer”: 12345, 
   “domain”: “abc.example.com”, 
   “metric_name”: “dns.query.logs”, 
   “network”: “0”, 
   "pop":"iad",
   “rectype”: “A”, 
   “timestamp”: 1571250180, 
   “zone”: “example.com” 
}
Parameter Beschreibung
count Die Anzahl der Abfragen dieses Datensatzes innerhalb des Aggregationsfensters (30 Sekunden)
customer Die NS1 Connect Konto-ID
domain Der abgefragte Datensatz
metric_name dns.queries.logs ist derzeit der einzige enthaltene Datensatz.
network Die eindeutige Netzkennung für Kunden mit eigenen Netzen (Standard ist 0)
pop Der physische Standort des Point of Presence ( PoP ) Name Server
rectype Der Typ des abgefragten DNS-Eintrags
timestamp Der Zeitpunkt des Abfrageereignisses
zone Die umschließende DNS-Zone für den abgefragten Datensatz
Beispiel Terraform Konfiguration

Wenn Sie Terraform verwenden, um Ihre AWS Ressourcen zu verwalten, kopieren Sie den nachstehenden Code und fügen Sie ihn ein, um die Konfiguration mit Terraform anzuwenden.

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
}