Comment transférer des journaux de flux VPC vers Splunk avec Amazon Kinesis Firehose ?

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

J'installe des redirecteurs intensifs Splunk pour analyser mes données Amazon Virtual Private Cloud (Amazon VPC). Je transfère des données de mes sources AWS vers des clusters Splunk pour traitement, mais plusieurs étapes sont nécessaires. Comment puis-je mieux intégrer mes données AWS à Splunk ?

Brève description

Plutôt que des redirecteurs intensifs, vous pouvez utiliser HTTP Event Collector (HEC) de Splunk et Amazon Kinesis Data Firehose pour envoyer des données aux clusters Splunk.

Pour envoyer des événements de données et d'applications à des clusters Splunk, effectuez les opérations suivantes :

1.    Créer un flux de diffusion Kinesis Data Firehose.

2.    Configurer AWS Lambda pour la transformation d'enregistrements.

3.    Configurer les journaux de flux VPC.

4.    Créer un abonnement Amazon CloudWatch Logs à votre flux.

Remarque : Si vous utilisez un Application Load Balancer, utilisez un Classic Load Balancer. Kinesis Data Firehose ne prend pas en charge les Application Load Balancers ou les dispositifs d’équilibrage de charge de réseau. Assurez-vous également d'autoriser les sessions permanentes basées sur la durée en désactivant l'expiration des cookies. Pour plus d'informations sur le dépannage des problèmes de flux de données avec les points de terminaison Splunk, consultez Données non transmises à Splunk.

Solution

Conditions préalables

Avant de commencer, remplissez les conditions préalables suivantes :

Démarrez la création du flux de diffusion Kinesis Data Firehose

1.     Créez votre flux de diffusion. Pour Source, choisissez Direct PUT or other sources (PUT direct ou autres sources).

2.     Sélectionnez Suivant.

Configuration de la transformation d'enregistrements avec AWS Lambda

1.     Configurez la transformation d'enregistrements.
Remarque :
Assurez-vous de choisir Enabled (Activé) pour Record transformation (Transformation d'enregistrements) sous Transform source records with AWS Lambda (Transformer des enregistrements source avec AWS Lambda). Vous devez activer cette option, car CloudWatch envoie les journaux sous forme de fichiers compressés .gzip. Amazon Kinesis doit extraire ces fichiers pour les rendre utilisables.

2.     Pour Lambda function (Fonction Lambda), choisissez Create new (Créer).

3.     Dans la fenêtre Choose Lambda blueprint (Choisir un plan Lambda), pour Lambda blueprint (Plan Lambda), choisissez Kinesis Firehose CloudWatch Logs Processor (Processeur Kinesis Firehose CloudWatch Logs).

4.     Sélectionnez le nouvel onglet qui s'ouvre dans votre navigateur pour créer la nouvelle fonction Lambda.
Dans Name (Nom), entrez un nom pour la fonction Lambda.
Dans Role (Rôle), choisissez Create a custom role (Créer un rôle personnalisé).

5.     Sélectionnez le nouvel onglet qui s'ouvre dans votre navigateur pour créer un nouveau rôle AWS Identity and Access Management (IAM).
Dans Role Name (Nom de rôle), vérifiez que ce nom est lambda_basic_execution.

6.     Choisissez Allow (Autoriser) pour créer le rôle et revenir à la page de configuration de la fonction Lambda.

7.     Choisissez Create function (Créer la fonction) et attendez que la fonction soit créée.

8.     Augmentez le délai d'expiration à 1 minute (la valeur par défaut est de 3 secondes) pour empêcher la fonction d'expirer.

9.     Sélectionnez Save (Enregistrer).

Terminez la création du flux de diffusion Kinesis Data Firehose

1.     Ouvrez la console Amazon Kinesis.

2.     Dans le volet de navigation, sélectionnez Data Firehose.

3.     Pour votre flux de diffusion, choisissez Lambda function (Fonction Lambda).
Choisissez le nom de votre nouvelle fonction AWS Lambda dans la liste déroulante.
Pour Destination, choisissez Splunk.
Entrez les détails Splunk HEC, y compris le point de terminaison Splunk HEC que vous avez créé précédemment. Le point de terminaison Splunk HEC doit être arrêté avec un certificat SSL valide. Utilisez le nom d'hôte DNS correspondant pour vous connecter à votre point de terminaison HEC. Le format du point de terminaison du cluster est https://VOTRE-POINT-DE-TERMINAISON.splunk.com:8088.
Pour Splunk endpoint type (Type de point de terminaison Splunk), choisissez Raw endpoint (Point de terminaison brut), puis entrez le jeton d'authentification.

4.     Sélectionnez Suivant.

5.     (Facultatif) Créez une sauvegarde Amazon Simple Storage Service (Amazon S3) pour les événements ayant échoué ou tous les événements en choisissant un compartiment existant ou en créant un nouveau compartiment. Assurez-vous de configurer les paramètres liés à Amazon S3 tels que les conditions de tampon, les paramètres de compression et de chiffrement et les options de journalisation d'erreurs dans l'assistant de flux de diffusion.

6.     Sous IAM role (Rôle IAM), choisissez Create New (Créer).

7.     Dans l'onglet qui s'ouvre, entrez un nom de rôle, puis choisissez Allow (Autoriser).

8.     Sélectionnez Suivant.

9.     Choisissez Create Delivery Stream (Créer un flux de diffusion).

Configurer des journaux de flux VPC

Si vous avez déjà un journal de flux VPC que vous souhaitez utiliser, vous pouvez ignorer la section suivante..

1.     Ouvrez la console CloudWatch.

2.     Dans le volet de navigation, sélectionnez Logs.

3.     Pour Actions, sélectionnez Create log group (Créer un groupe de journaux).

4.     Entrez un nom de groupe de journaux.

5.     Sélectionnez Create log group (Créer un groupe de journaux).

6.     Ouvrez la console Amazon VPC.

7.     Dans le volet de navigation, sous Virtual Private Cloud, choisissez Your VPCs (Vos VPC).

8.     Dans le volet de contenu, sélectionnez votre VPC.

9.     Choisissez la vue Flow logs (Journaux de flux).

10.    Choisissez Create flow log (Créer un journal de contenu).
Pour Filter (filtre), sélectionner All (Tout).
Dans le champ Destination log group (Groupe de journaux de destination), sélectionnez le groupe de journaux que vous venez de créer.
Pour IAM role (Rôle IAM), sélectionnez un rôle IAM qui autorise votre VPC à publier des journaux dans CloudWatch.
Remarque :
Si vous n'avez pas de rôle IAM approprié, choisissez Set Up Permissions (Configurer des autorisations) sous un rôle IAM. Choisissez Create a new IAM role (Créer un rôle IAM). Conservez les paramètres par défaut sélectionnés. Choisissez Allow (Autoriser) pour créer et associer le rôle VPCFlowLogs au groupe de journaux de destination.

11.    Choisissez Create (Créer) pour créer votre journal de flux VPC.

12.    Établissez un flux en temps réel de votre groupe de journaux vers votre flux de diffusion.
Pour obtenir des instructions relatives à AWS Lambda, consultez Accès aux Amazon CloudWatch Logs pour AWS Lambda. Pour obtenir des instructions relatives à Amazon OpenSearch Service, consultez Diffusion de données CloudWatch Logs vers Amazon OpenSearch Service.
Pour Kinesis Data Firehose, créez un abonnement CloudWatch Logs dans AWS Command Line Interface (AWS CLI) à l'aide des instructions suivantes.

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

Créer un abonnement CloudWatch Logs

1.     Donnez à CloudWatch les autorisations de rôle nécessaires pour publier votre flux Kinesis Data Firehose.

2.     Ouvrez l'interface de ligne de commande AWS CLI.

3.     Créez votre stratégie d'approbation (par exemple, TrustPolicyforCWLToFireHose.json) à l'aide de l'exemple de fichier JSON suivant. Assurez-vous de remplacer YOUR-RESOURCE-REGION par la région AWS de votre ressource.

{
  "Statement": {
    "Effect": "Allow",
    "Principal": { "Service": "logs.YOUR-RESOURCE-REGION.amazonaws.com" },
    "Action": "sts:AssumeRole"
  }
}

4.     Créez le rôle avec les autorisations à partir de la stratégie d'approbation en utilisant l'exemple de commande suivant :

$ aws iam create-role --role-name CWLtoKinesisFirehoseRole --assume-role-policy-document file://TrustPolicyForCWLToFireHose.json

5.     Créez votre stratégie IAM (par exemple, PermissionPolicyForCWLToFireHose.json) à l'aide de l'exemple de fichier JSON suivant. Remplacez ce qui suit : YOUR-AWS-ACCT-NUM par votre numéro de compte AWS,
YOUR-RESOURCE-REGION par la région de votre ressource, et
FirehoseSplunkDeliveryStream par le nom de votre flux.

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
        "Resource":["arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream"]
      },
      {
        "Effect":"Allow",
        "Action":["iam:PassRole"],
        "Resource":["arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"]
      }
    ]
}

6.     Attachez la stratégie IAM au nouveau rôle créé en utilisant l'exemple de commande suivant :

$ aws iam put-role-policy 
    --role-name CWLtoKinesisFirehoseRole 
    --policy-name Permissions-Policy-For-CWL 
    --policy-document file://PermissionPolicyForCWLToFireHose.json

7.     Créez un filtre d'abonnement en utilisant l'exemple de commande suivant. Assurez-vous de remplacer YOUR-AWS-ACCT-NUM par votre numéro de compte AWS, YOUR-RESOURCE-REGION par le région de votre ressource et FirehoseSplunkDeliveryStream par le nom de votre flux.

$ aws logs put-subscription-filter 
   --log-group-name " /vpc/flowlog/FirehoseSplunk" 
   --filter-name "Destination" 
   --filter-pattern "" 
   --destination-arn "arn:aws:firehose:YOUR-RESOURCE-REGION:YOUR-AWS-ACCT-NUM:deliverystream/FirehoseSplunkDeliveryStream" 
   --role-arn "arn:aws:iam::YOUR-AWS-ACCT-NUM:role/CWLtoKinesisFirehoseRole"