Comment puis-je configurer le streaming intercompte depuis Kinesis Data Firehose vers Amazon OpenSearch Service ?

Lecture de 9 minute(s)
0

Je souhaite configurer un flux Amazon Kinesis Data Firehose qui envoie des données à un cluster Amazon OpenSearch Service d’un autre compte.

Brève description

Configurez Kinesis Data Firehose et ses dépendances, telles qu’Amazon Simple Storage Service (Amazon S3) et Amazon CloudWatch, pour pouvoir diffuser des données sur différents comptes. La diffusion de données en streaming fonctionne pour les clusters OpenSearch Service accessibles au public, que le contrôle d’accès affiné (FGAC) soit activé ou non.

Pour configurer un flux Kinesis Data Firehose afin qu’il envoie des données à un cluster OpenSearch Service, procédez comme suit :

  1. Créez un compartiment Amazon S3 dans le compte A.
  2. Créez un groupe de journaux et un flux de journaux CloudWatch dans le compte A.
  3. Créez un rôle et une politique Kinesis Data Firehose dans le compte A.
  4. Créez un cluster OpenSearch Service accessible au public dans le compte B vers lequel le rôle Kinesis Data Firehose du compte A pourra diffuser des données.
  5. (Facultatif) Si le FGAC est activé, connectez-vous aux tableaux de bord OpenSearch et ajoutez un mappage de rôles.
  6. Mettez à jour la politique de rôle AWS Identity Access Management (IAM) pour votre rôle Kinesis Data Firehose dans le compte A afin de pouvoir envoyer des données au compte B.
  7. Créez le flux Kinesis Data Firehose dans le compte A.
  8. Testez le streaming intercompte vers le cluster OpenSearch Service.

Résolution

Créer un compartiment Amazon S3 dans le compte A

Créez un compartiment S3 dans le compte A. Le compartiment Amazon S3 génère un Amazon Resource Name (ARN).

Remarque : l’ARN complet sera utilisé ultérieurement pour accorder à Kinesis Data Firehose l’accès nécessaire pour enregistrer et récupérer des enregistrements depuis le compartiment Amazon S3.

Créer un groupe de journaux et d’un flux de journaux CloudWatch dans le compte A

Pour créer un groupe de journaux CloudWatch, procédez comme suit :

  1. Ouvrez la console CloudWatch.
  2. Dans le volet de navigation, choisissez Journaux, puis Groupes de journaux.
  3. Sélectionnez Créer un groupe de journaux.
  4. Saisissez un nom de Groupe de journaux.
  5. Cliquez sur le bouton Créer un groupe de journaux pour enregistrer votre nouveau groupe de journaux.
  6. Recherchez le groupe de journaux que vous venez de créer, puis sélectionnez-le.

Pour créer un flux de journaux Amazon CloudWatch, procédez comme suit :

  1. Choisissez Créer un flux de journaux.
  2. Saisissez un nom de Flux de journaux.
  3. Choisissez Créer un flux de journaux.
    Important : les noms du groupe de journaux CloudWatch et du flux de journaux CloudWatch sont requis lorsque vous créez des politiques de rôle Kinesis Data Firehose.

Créer un rôle et une politique Kinesis Data Firehose dans le compte A

  1. Ouvrez la console AWS Identity and Access Management (AWS IAM).
  2. Créez une politique IAM qui permet à Kinesis Data Firehose d’effectuer les opérations suivantes :
    Enregistrer des journaux des flux dans CloudWatch
    Enregistrer dans Amazon S3
    Diffuser des données vers le cluster OpenSearch Service

Exemple :

{
  "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:*"
      ]
    }
  ]
}

Remarque : vous pourrez ajouter des autorisations de streaming à la politique de cluster d’OpenSearch Service ultérieurement. Cependant, vous devez d’abord créer le cluster dans le compte B.

  1. Enregistrez la politique.
  2. Choisissez Créer un rôle.
  3. Ajoutez la politique à votre rôle Kinesis Data Firehose.

Créer un cluster OpenSearch Service accessible au public dans le compte B pour que le rôle Kinesis Data Firehose du compte A puisse diffuser des données

  1. Créez un cluster OpenSearch Service accessible au public dans le compte B.
  2. Enregistrez l’ARN du domaine OpenSearch Service. Vous utiliserez l’ARN dans une étape ultérieure.
  3. Configurez les paramètres de sécurité de votre cluster.
    Important : vous devez configurer les paramètres de sécurité de votre service OpenSearch pour permettre au rôle Kinesis Data Firehose du compte A de diffuser des données vers votre cluster OpenSearch Service.

Pour configurer vos paramètres de sécurité, effectuez les opérations suivantes :

  1. Dans OpenSearch Service, accédez à Stratégie d’accès.

  2. Sélectionnez la stratégie d’accès définie par JSON. Votre stratégie doit disposer des autorisations suivantes :

    {
      "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"
          ]
        }
      ]
    }

    Pour en savoir plus sur les autorisations dans le cadre de la politique d’OpenSearch Service, consultez la page Diffusion intercompte vers une destination OpenSearch Service.

  3. (Facultatif) Si le FGAC est activé pour votre cluster, connectez-vous aux tableaux de bord OpenSearch et ajoutez un mappage de rôles. Le mappage de rôle permet au rôle Kinesis Data Firehose d’envoyer des demandes à OpenSearch Service.

Pour vous connecter aux tableaux de bord OpenSearch et ajouter un mappage de rôles, procédez comme suit :

  1. Ouvrez les tableaux de bord.
  2. Choisissez l’onglet Sécurité.
  3. Choisissez Rôles.
  4. Choisissez le rôle all_access.
  5. Choisissez l’onglet Utilisateurs mappés.
  6. Choisissez Gérer le mappage.
  7. Dans la section Rôles de backend, entrez le rôle Kinesis Data Firehose.
  8. Choisissez Mappage.

Mettre à jour de la politique de rôle IAM pour votre rôle Kinesis Data Firehose dans le compte A afin de pouvoir envoyer des données au compte B

Pour pouvoir envoyer des données depuis votre rôle Kinesis Data Firehose du compte A vers votre cluster OpenSearch Service dans le compte B, vous devez mettre à jour la politique Kinesis Data Firehose.

Exemple :

{
  "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"
      ]
    }
  ]
}

Pour en savoir plus, consultez la page Autoriser Kinesis Data Firehose à accéder à une destination Amazon OpenSearch Service.

Créer du flux Kinesis Data Firehose dans le compte A

Pour créer un flux Kinesis Data Firehose avec un accès intercompte à un cluster OpenSearch Service, vous devez utiliser et configurer l’interface de la ligne de commande AWS (AWS CLI).

Vérifiez que vous utilisez bien une version à jour de l’AWS CLI :

aws --version

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes AWS CLI, consultez la page Résoudre les erreurs AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente d’AWS CLI.

Créez un fichier nommé input.json avec le contenu suivant :

{
  "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"
    }
  }
}

Vérifiez que la valeur du point de terminaison est correctement saisie dans le champ d’attribut ClusterEndpoint.

Remarque : les types sont obsolètes dans Elasticsearch version 7.x. Pour Elasticsearch versions 7.x, supprimez l’attribut TypeName du fichier input.json.

Exécutez ensuite la commande suivante dans le même répertoire que l’emplacement du fichier input.json :

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

Cette syntaxe de commande crée un flux Kinesis Data Firehose dans le compte A avec une destination vers un cluster OpenSearch Service dans le compte B.

Tester du streaming intercompte vers le cluster OpenSearch Service

Utilisez le générateur de données Kinesis (KDG) pour diffuser des enregistrements dans le flux Kinesis Data Firehose du compte A.

Le KDG génère de nombreux enregistrements par seconde. Ce niveau de productivité permet à OpenSearch Service de disposer de suffisamment de points de données pour déterminer le mappage approprié pour une structure d’enregistrement.

Voici la structure du modèle utilisé dans le générateur de données Kinesis :

{
    "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")}}"
}

Pour confirmer le bon déroulement du streaming intercompte, consultez les entrées relatives à l’index sous l’onglet Indices de votre cluster. Vérifiez s’il existe un nom d’index utilisant le préfixe « local » avec la date actuelle. Vous pouvez également vérifier si les enregistrements sont présents dans les tableaux de bord OpenSearch.

Remarque : OpenSearch Service prend quelques minutes pour déterminer le mappage approprié.

Informations connexes

Créer un flux de diffusion Amazon Kinesis Data Firehose

Écriture dans Kinesis Data Firehose à l’aide de Kinesis Data Streams

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an