Wie richte ich kontoübergreifendes Streaming von Amazon Data Firehose zu Amazon OpenSearch Service ein?

Lesedauer: 8 Minute
0

Ich möchte einen Stream in Amazon Data Firehose einrichten, der Daten an einen Amazon OpenSearch Service-Cluster in einem anderen Konto sendet.

Kurzbeschreibung

Richten Sie Amazon Data Firehose und seine Abhängigkeiten wie Amazon Simple Storage Service (Amazon S3) und Amazon CloudWatch ein, um über verschiedene Konten zu streamen. Die Bereitstellung von Streaming-Daten funktioniert für öffentlich zugängliche OpenSearch Service-Cluster, unabhängig davon, ob differenzierte Zugriffskontrolle (FGAC) aktiviert ist.

Gehen Sie wie folgt vor, um einen Data Firehose-Stream so einzurichten, dass er Daten an einen OpenSearch Service-Cluster sendet:

  1. Erstellen Sie einen Amazon S3-Bucket in Konto A.
  2. Erstellen Sie eine Protokollgruppe und einen Protokollstream mit CloudWatch in Konto A.
  3. Erstellen Sie eine Rolle und eine Richtlinie für Data Firehose in Konto A.
  4. Erstellen Sie einen öffentlich zugänglichen OpenSearch Service-Cluster in Konto B, zu dem die Data Firehose-Rolle in Konto A Daten streamen kann.
  5. (Optional) Wenn FGAC aktiviert ist, melden Sie sich bei OpenSearch Dashboards an und fügen Sie eine Rollenzuordnung hinzu.
  6. Aktualisieren Sie die AWS Identity Access Management (IAM)-Rollenrichtlinie für Ihre Data Firehose-Rolle in Konto A, um Daten an Konto B zu senden.
  7. Erstellen Sie den Data Firehose-Stream in Konto A.
  8. Testen Sie das kontoübergreifende Streaming zum OpenSearch Service-Cluster.

Behebung

Erstellen eines Amazon S3-Buckets in Konto A

Erstellen Sie einen S3-Bucket in Konto A. Der Amazon S3-Bucket generiert einen Amazon-Ressourcennamen (ARN).

Hinweis: Der vollständige ARN wird später verwendet, um Data Firehose Zugriff zum Speichern und Abrufen von Datensätzen aus dem Amazon S3-Bucket zu gewähren.

Erstellen einer Protokollgruppe und eines Protokollstreams mit CloudWatch in Konto A

Gehen Sie wie folgt vor, um eine CloudWatch-Protokollgruppe zu erstellen:

  1. Öffnen Sie die CloudWatch-Konsole.
  2. Wählen Sie im Navigationsbereich Protokolle und dann Protokollgruppen aus.
  3. Wählen Sie Protokollgruppe erstellen aus.
  4. Geben Sie einen Namen für die Protokollgruppe ein.
  5. Betätigen Sie die Schaltfläche Protokollgruppe erstellen, um Ihre neue Protokollgruppe zu speichern.
  6. Suchen Sie nach Ihrer neu erstellten Protokollgruppe und wählen Sie sie aus.

Führen Sie die folgenden Schritte aus, um einen Protokollstream mit Amazon CloudWatch zu erstellen:

  1. Wählen Sie Protokollstream erstellen aus.
  2. Geben Sie einen Protokoll-Streamnamen ein.
  3. Wählen Sie Protokollstream erstellen aus.
    Wichtig: Sie benötigen die Namen der CloudWatch-Protokollgruppe und des CloudWatch-Protokollstreams, wenn Sie Rollenrichtlinien für Data Firehose erstellen.

Erstellen einer Rolle und einer Richtlinie für Data Firehose in Konto A

  1. Öffnen Sie die AWS Identity and Access Management (IAM)-Konsole.
  2. Erstellen Sie eine IAM-Richtlinie, die Data Firehose Folgendes ermöglicht:
    Speichert Stream-Protokolle in CloudWatch
    Erstellt Datensätze in Amazon S3
    Streamt Daten zum OpenSearch Service-Cluster

Beispiel:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "<Bucket ARN>",
        "<Bucket ARN>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*"
      ]
    }
  ]
}

Hinweis: Stream-Berechtigungen fügen Sie später an die Richtlinie des OpenSearch Service-Clusters an. Sie müssen den Cluster jedoch zuerst in Konto B erstellen.

  1. Speichern Sie die Richtlinie.
  2. Wählen Sie Rolle erstellen aus.
  3. Fügen Sie die Richtlinie zu Ihrer Data Firehose-Rolle hinzu.

Erstellen eines öffentlich zugänglichen OpenSearch Service-Clusters in Konto B, zu dem die Data-Firehose-Rolle in Konto A Daten streamen kann

  1. Erstellen Sie einen öffentlich zugänglichen OpenSearch Service-Cluster in Konto B.
  2. Notieren Sie den Domain-ARN von OpenSearch Service. Sie verwenden den ARN in einem späteren Schritt.
  3. Konfigurieren Sie die Sicherheitseinstellungen für den Cluster.
    Wichtig: Sie müssen die Sicherheitseinstellungen für OpenSearch Service so konfigurieren, dass die Data Firehose-Rolle in Konto A zum OpenSearch Service-Cluster streamen kann.

Gehen Sie wie folgt vor, um die Sicherheitseinstellungen zu konfigurieren:

  1. Navigieren Sie in OpenSearch Service zu Zugriffsrichtlinie.

  2. Wählen Sie die JSON-definierte Zugriffsrichtlinie aus. Die Richtlinie muss über die folgenden Berechtigungen verfügen:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "es:*",
          "Resource": "<ES Domain ARN in Account B>/*",
          "Condition": {
            "IpAddress": {
              "aws:SourceIp": "<Your IP Address for OpenSearch Dashboards access>"
            }
          }
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "<Firehose Role ARN in Account A>"
          },
          "Action": [
            "es:ESHttpPost",
            "es:ESHttpPut"
          ],
          "Resource": [
            "<ES Domain ARN in Account B>",
            "<ES Domain ARN in Account B>/*"
          ]
        },
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "<Firehose Role ARN in Account A>"
          },
          "Action": "es:ESHttpGet",
          "Resource": [
            "<ES Domain ARN in Account B>/_all/_settings",
            "<ES Domain ARN in Account B>/_cluster/stats",
            "<ES Domain ARN in Account B>/index-name*/_mapping/type-name",
            "<ES Domain ARN in Account B>/roletest*/_mapping/roletest",
            "<ES Domain ARN in Account B>/_nodes",
            "<ES Domain ARN in Account B>/_nodes/stats",
            "<ES Domain ARN in Account B>/_nodes/*/stats",
            "<ES Domain ARN in Account B>/_stats",
            "<ES Domain ARN in Account B>/index-name*/_stats",
            "<ES Domain ARN in Account B>/roletest*/_stats"
          ]
        }
      ]
    }

    Weitere Informationen zu Berechtigungen innerhalb der OpenSearch Service-Richtlinie finden Sie unter Kontoübergreifende Lieferung an ein OpenSearch Service-Ziel.

  3. (Optional) Wenn FGAC für Ihren Cluster aktiviert ist, melden Sie sich bei OpenSearch Dashboards an und fügen Sie eine Rollenzuordnung hinzu. Die Rollenzuordnung ermöglicht es der Data Firehose-Rolle, Anfragen an OpenSearch Service zu senden.

Gehen Sie wie folgt vor, um sich bei OpenSearch Dashboards anzumelden und eine Rollenzuordnung hinzuzufügen:

  1. Öffnen Sie Dashboards.
  2. Wählen Sie die Registerkarte Sicherheit aus.
  3. Wählen Sie Rollen aus.
  4. Wählen Sie die Rolle all_access aus.
  5. Wählen Sie die Registerkarte Zugeordnete Benutzer aus.
  6. Wählen Sie Zuordnung verwalten aus.
  7. Geben Sie im Abschnitt Backend-Rollen die Data-Firehose-Rolle ein.
  8. Wählen Sie Zuordnen aus.

Aktualisieren der IAM-Rollenrichtlinie für die Data Firehose-Rolle in Konto A, um Daten an Konto B zu senden

Aktualisieren Sie die Data Firehose-Richtlinie, um Daten von Ihrer Data Firehose-Rolle in Konto A an Ihren OpenSearch Service-Cluster in Konto B zu senden.

Beispiel:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "<Bucket ARN>",
        "<Bucket ARN>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "logs:PutLogEvents"
      ],
      "Resource": [
        "arn:aws:logs:<region>:<account-id>:log-group:/aws/kinesisfirehose/<Firehose Name>:log-stream:*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpPost",
        "es:ESHttpPut",
        "es:DescribeDomain",
        "es:DescribeDomains",
        "es:DescribeDomainConfig"
      ],
      "Resource": [
        "<Domain ARN in Account B>",
        "<Domain ARN in Account B>/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "es:ESHttpGet"
      ],
      "Resource": [
        "<Domain ARN in Account B>/_all/_settings",
        "<Domain ARN in Account B>/_cluster/stats",
        "<Domain ARN in Account B>/index-name*/_mapping/superstore",
        "<Domain ARN in Account B>/_nodes",
        "<Domain ARN in Account B>/_nodes/stats",
        "<Domain ARN in Account B>/_nodes/*/stats",
        "<Domain ARN in Account B>/_stats",
        "<Domain ARN in Account B>/index-name*/_stats"
      ]
    }
  ]
}

Weitere Informationen finden Sie unter Amazon Data Firehose Zugriff auf ein öffentliches OpenSearch Service-Ziel gewähren.

Erstellen des Data-Firehose-Streams in Konto A

Um einen Data Firehose-Stream mit kontoübergreifendem Zugriff auf einen OpenSearch Service-Cluster zu erstellen, verwenden und konfigurieren Sie AWS Command Line Interface (AWS CLI).

Stellen Sie sicher, dass AWS CLI auf dem neuesten Stand ist:

aws --version

Hinweis: Wenn Sie beim Ausführen von Befehlen in AWS CLI Fehlermeldungen erhalten, finden Sie weitere Informationen unter Beheben von AWS CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Erstellen Sie eine Datei namens input.json mit dem folgenden Inhalt:

{
  "DeliveryStreamName": "<Firehose Name>",
  "DeliveryStreamType": "DirectPut",
  "ElasticsearchDestinationConfiguration": {
    "RoleARN": "",
    "ClusterEndpoint": "",
    "IndexName": "local",
    "TypeName": "TypeName",
    "IndexRotationPeriod": "OneDay",
    "BufferingHints": {
      "IntervalInSeconds": 60,
      "SizeInMBs": 50
    },
    "RetryOptions": {
      "DurationInSeconds": 60
    },
    "S3BackupMode": "FailedDocumentsOnly",
    "S3Configuration": {
      "RoleARN": "",
      "BucketARN": "",
      "Prefix": "",
      "BufferingHints": {
        "SizeInMBs": 128,
        "IntervalInSeconds": 128
      },
      "CompressionFormat": "UNCOMPRESSED",
      "CloudWatchLoggingOptions": {
        "Enabled": true,
        "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>",
        "LogStreamName": "S3Delivery"
      }
    },
    "CloudWatchLoggingOptions": {
      "Enabled": true,
      "LogGroupName": "/aws/kinesisfirehose/<Firehose Name>",
      "LogStreamName": "ElasticsearchDelivery"
    }
  }
}

Stellen Sie sicher, dass der Endpunktwert korrekt in das Attributfeld ClusterEndpoint eingegeben wurde.

Hinweis: Typen sind in Version 7.x von Elasticsearch veraltet. Entfernen Sie für Elasticsearch-Versionen 7.x das Attribut TypeName aus der Datei input.json.

Führen Sie dann den folgenden Befehl in demselben Verzeichnis aus, in dem sich die Datei input.json befindet:

aws firehose create-delivery-stream --cli-input-json file://input.json

Diese Befehlssyntax erstellt einen Data Firehose-Stream in Konto A mit einem OpenSearch-Service-Cluster in Konto B als Ziel.

Testen des kontoübergreifenden Streamings zum OpenSearch Service-Cluster

Verwenden Sie den Kinesis Data Generator (KDG), um Datensätze in den Data Firehose-Stream in Konto A zu streamen.

Der KDG generiert viele Datensätze pro Sekunde. Dieses Produktivitätsniveau stellt OpenSearch Service genügend Datenpunkte zur Verfügung, um die korrekte Zuordnung einer Datensatzstruktur zu bestimmen.

Im Kinesis Data Generator wird folgende Vorlagenstruktur verwendet:

{
    "device_id": {{random.number(5)}},
    "device_owner": "{{name.firstName}}  {{name.lastName}}",
    "temperature": {{random.number(
        {
            "min":10,
            "max":150
        }
    )}},
    "timestamp": "{{date.now("DD/MMM/YYYY:HH:mm:ss Z")}}"
}

Um zu überprüfen, ob das kontoübergreifende Streaming erfolgreich war, überprüfen Sie die Indexeinträge auf der Registerkarte Indizes des Clusters. Prüfen Sie, ob ein Indexname vorhanden ist, der das Präfix „local“ mit dem aktuellen Datum verwendet. Sie können auch überprüfen, ob die Datensätze in OpenSearch Dashboards vorhanden sind.

Hinweis: OpenSearch Service benötigt einige Minuten, um die richtige Zuordnung zu ermitteln.

Verwandte Informationen

Erstellen eines Amazon Kinesis Data Firehose-Lieferstroms

Schreiben in Amazon Data Firehose mit Kinesis-Datenströmen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr