Comment configurer le streaming entre comptes de Kinesis Data Firehose vers Amazon OpenSearch Service ?

Date de la dernière mise à jour : 23-07-2021

Je souhaite configurer un flux Amazon Kinesis Data Firehose qui envoie des données vers un cluster Amazon OpenSearch Service dans un autre compte. Comment diffuser en continu mes ressources de données sur différents comptes ?

Brève description

Vous pouvez configurer Kinesis Data Firehose et ses dépendances, par exemple Amazon Simple Storage Service (Amazon S3) et Amazon CloudWatch, pour diffuser en continu sur différents comptes. La diffusion de données en streaming fonctionne pour les clusters OpenSearch Service accessibles au public, qu'importe si le contrôle précis des accès (FGAC) est activé ou non. Cet article couvre les deux cas d'utilisation.

Remarque : Amazon OpenSearch Service est le successeur d'Amazon Elasticsearch Service.

Pour configurer un flux Kinesis Data Firehose de manière à ce 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 CloudWatch et un flux de journaux dans le compte A.

3.    Créez un rôle Kinesis Data Firehose et une stratégie dans le compte A.

4.    Créez un cluster OpenSearch Service accessible au public dans le compte B vers le rôle Kinesis Data Firehose du compte A chargé de diffuser des données.

5.    (Facultatif) Si le contrôle précis des accès (FGAC) est activé, connectez-vous aux tableaux de bord OpenSearch et ajoutez un mappage de rôles.

Remarque : les tableaux de bord OpenSearch succèdent à Kibana.

6.    Mettez à jour la stratégie de rôle AWS Identity Access Management (IAM) de votre rôle Kinesis Data Firehose dans le compte A pour envoyer des données vers le compte B.

7.    Créez le flux Kinesis Data Firehose dans le compte A.

8.    Testez le streaming entre comptes vers le cluster OpenSearch Service.

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 est utilisé ultérieurement pour accorder à Kinesis Data Firehose l'accès pour enregistrer et récupérer des enregistrements à partir de ce compartiment Amazon S3.

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

Pour créer un groupe de journaux CloudWatch, effectuez les opérations suivantes :

1.    Ouvrez la console CloudWatch.

2.    Dans le volet de navigation, sélectionnez 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 et sélectionnez-le. Cette tâche vous permet de savoir si vous pouvez maintenant créer un flux de journaux.

Pour créer un flux de journaux Amazon CloudWatch, effectuez les opérations suivantes :

1.    Sélectionnez Créer un flux de journaux.

2.    Saisissez un Nom du flux de journaux.

3.    Sélectionnez Créer un flux de journaux. Cette action enregistre le flux de journaux que vous venez de créer.

Important : les noms de groupes de journaux et de flux de journaux CloudWatch sont requis lors de la création de stratégies de rôle Kinesis Data Firehose.

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

1.    Accédez à la console AWS Identity and Access Management (IAM).

2.    Créez une stratégie IAM qui permet à Kinesis Data Firehose d'effectuer les opérations suivantes :
Enregistrements des journaux de flux dans CloudWatch
Enregistrements vers Amazon S3
Diffusion en streaming des données vers le cluster OpenSearch Service

Par 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 ajouterez des autorisations de diffusion en streaming à la stratégie de cluster OpenSearch Service ultérieurement. Toutefois, vous devez d'abord créer le cluster dans le compte B.

3.    Enregistrez la stratégie.

4.    Sélectionnez Créer un rôle.

5.    Ajoutez la stratégie que vous venez de créer à votre rôle Kinesis Data Firehose.

Créez un cluster OpenSearch Service accessible au public dans le compte B vers le rôle Kinesis Data Firehose du compte A chargé de diffuser des données.

1.    Créez votre cluster OpenSearch Service accessible au public dans le compte B.

2.    Enregistrez l'ARN du domaine OpenSearch Service. Vous aurez besoin de l'ARN pour une étape ultérieure.

3.    Configurez les paramètres de sécurité de votre cluster.

Important : vous devez configurer vos paramètres de sécurité OpenSearch Service pour permettre au rôle Kinesis Data Firehose du compte A de diffuser en streaming vers votre cluster OpenSearch Service.

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

1.    Dans OpenSearch Service, accédez à la stratégie d'accès.

2.    Sélectionnez la stratégie d'accès défini en 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 au sein de la stratégie OpenSearch Service, consultez Diffusion entre comptes vers une destination OpenSearch Service.

3.    (Facultatif) Si le contrôle précis des accès (FGAC) est activé sur votre cluster, connectez-vous aux tableaux de bord OpenSearch et ajoutez un mappage de rôles. Le mappage de déploiement permet au rôle Kinesis Data Firehose d'envoyer des requêtes à OpenSearch Service.

(Facultatif) Si le contrôle précis des accès (FGAC) est activé, connectez-vous aux tableaux de bord OpenSearch et ajoutez un mappage de rôles

Si le contrôle précis des accès au cluster OpenSearch Service est activé, vous devez vous connecter aux tableaux de bord OpenSearch et ajouter un mappage des rôles au rôle Kinesis Data Firehose. Le mappage des rôles permet au rôle Kinesis Data Firehose d'accéder à la diffusion vers le cluster OpenSearch Service.

Pour vous connecter aux tableaux de bord OpenSearch et ajouter un mappage des rôles, effectuez les opérations suivantes :

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, saisissez le rôle Kinesis Data Firehose.

8.    Choisissez Carte.

Mettez à jour la politique de rôle IAM de votre rôle Kinesis Data Firehose dans le compte A pour envoyer des données vers le compte B.

Pour envoyer les données de votre rôle Kinesis Data Firehose du compte A vers votre cluster OpenSearch Service du compte B, mettez à jour la stratégie Kinesis Data Firehose comme suit :

{
    "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 sur l'envoi de données Kinesis Data Firehose à votre cluster OpenSearch Service, consultez Attribution de l'accès à une destination Amazon OpenSearch Service à Kinesis Data Firehose.

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

Pour créer un flux Kinesis Data Firehose avec un cluster OpenSearch Service entre comptes, utilisez et configurez l'AWS Command Line Interface (AWS CLI).

Vérifiez que votre interface de ligne de commande AWS (AWS CLI) est à jour :

aws --version

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis AWS CLI, assurez-vous d'utiliser la version la plus récente d'AWS CLI.

Une fois l'interface de ligne de commande AWS (AWS CLI) mise à jour, 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"
        }
    }
}

Assurez-vous 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. Si vous utilisez Elasticsearch version 7.x, veillez à supprimer l'attribut TypeName du fichier input.json .

Exécutez ensuite la commande de CLI 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 le streaming entre comptes vers le cluster OpenSearch Service

Utilisez Kinesis Data Generator pour diffuser en streaming des enregistrements dans le flux Kinesis Data Firehose du compte A.

Kinesis Data Generator (KDG) génère de nombreux enregistrements par seconde. Avec ce niveau de productivité,OpenSearch Service dispose de suffisamment de points de données pour déterminer le mappage approprié d'une structure d'enregistrement.

Voici la structure de modèle utilisée dans Kinesis Data Generator :

{
    "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 vérifier si la diffusion entre comptes a réussi, examinez les entrées d'index sous l'onglet Indices de votre cluster. Vérifiez s'il existe un nom d'index à l'aide du 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 : quelques minutes peuvent être nécessaires pour qu'OpenSearch Service détermine le mappage approprié.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?