Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Filtres d'abonnement au niveau du compte
Important
Il existe un risque de créer une boucle récursive infinie avec des filtres d'abonnement, ce qui peut entraîner une forte augmentation de la facturation d'ingestion si rien n'est fait pour y remédier. Pour atténuer ce risque, nous vous recommandons d'utiliser des critères de sélection dans les filtres d'abonnement au niveau de votre compte afin d'exclure les groupes de journaux qui ingèrent des données de journal provenant de ressources faisant partie du flux de travail de livraison des abonnements. Pour plus d'informations sur ce problème et pour déterminer les groupes de journaux à exclure, consultezPrévention de la récursivité dans les journaux.
Vous pouvez définir une politique d'abonnement au niveau du compte qui inclut un sous-ensemble de groupes de journaux dans le compte. La politique d'abonnement au compte peut fonctionner avec Amazon Kinesis Data Streams AWS Lambda ou Amazon Data Firehose. Les journaux envoyés à un service via une politique d'abonnement au niveau du compte sont codés en base64 et compressés au format gzip. Cette section fournit des exemples que vous pouvez suivre pour créer un abonnement au niveau du compte pour Kinesis Data Streams, Lambda et Firehose.
Note
Pour consulter la liste de toutes les politiques de filtrage des abonnements de votre compte, utilisez la describe-account-policies
commande dont la valeur est SUBSCRIPTION_FILTER_POLICY
pour le --policy-type
paramètre. Pour plus d'informations, consultez describe-account-policies¶.
Exemples
Exemple 1 : filtres d'abonnement avec Kinesis Data Streams
Avant de créer un flux de données Kinesis Data Streams à utiliser dans le cadre d'une politique d'abonnement au niveau du compte, calculez le volume de données de journal qui sera généré. Assurez-vous de créer un flux avec suffisamment de partitions pour gérer le volume. Si un flux ne contient pas suffisamment de partitions, il est limité. Pour plus d'informations sur les limites de volume de flux, consultez la section Quotas et limites dans la documentation de Kinesis Data Streams.
Avertissement
Les événements de journal de plusieurs groupes de journaux étant transférés vers la destination, il existe un risque de limitation. Les livrables limités sont réessayés pendant 24 heures au maximum. Au bout de 24 heures, les livrables ayant échoué sont supprimés.
Pour réduire le risque de limitation, procédez comme suit :
Surveillez votre flux Kinesis Data Streams à l' CloudWatch aide de métriques. Cela vous permet d'identifier les ralentissements et d'ajuster votre configuration en conséquence. Par exemple, la
DeliveryThrottling
métrique suit le nombre d'événements de journal pour lesquels CloudWatch Logs a été limité lors du transfert des données vers la destination de l'abonnement. Pour de plus amples informations, veuillez consulter Surveillance à l'aide de CloudWatch métriques.Utilisez le mode de capacité à la demande pour votre flux dans Kinesis Data Streams. Le mode de capacité à la demande s'adapte instantanément à vos charges de travail à mesure qu'elles augmentent ou diminuent. Pour plus d'informations, consultez la section Mode à la demande.
Limitez le modèle de filtre de votre abonnement à CloudWatch Logs pour qu'il corresponde à la capacité de votre flux dans Kinesis Data Streams. Si vous envoyez trop de données dans le flux, il se peut que vous deviez réduire la taille du filtre ou ajuster les critères de filtrage.
L'exemple suivant utilise une politique d'abonnement au niveau du compte pour transférer tous les événements du journal vers un flux dans Kinesis Data Streams. Le modèle de filtre fait correspondre tous les événements du journal au texte Test
et les transmet au flux dans Kinesis Data Streams.
Pour créer une politique d'abonnement au niveau du compte pour Kinesis Data Streams
-
Créez un flux de destination à l'aide de la commande suivante :
$
C:\>
aws kinesis create-stream —stream-name "TestStream" —shard-count 1 -
Patientez quelques minutes pour que le stream soit actif. Vous pouvez vérifier si le flux est actif en utilisant la commande describe-stream pour vérifier le. StreamDescription StreamStatuspropriété.
aws kinesis describe-stream --stream-name "TestStream"
Voici un exemple de sortie :
{ "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "TestStream", "StreamARN": "arn:aws:kinesis:
region
:123456789012:stream/TestStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "EXAMPLE8463463374607431768211455", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "EXAMPLE688818456679503831981458784591352702181572610" } } ] } } -
Créez le rôle IAM qui autorisera CloudWatch Logs à insérer des données dans votre flux. Vous devrez tout d'abord créer une stratégie d'approbation dans un fichier (par exemple,
~/TrustPolicyForCWL-Kinesis.json
). Utilisez un éditeur de texte créer cette stratégie.Cette politique comprend une clé de contexte de condition
aws:SourceArn
globale pour aider à prévenir le problème de sécurité du député confus. Pour plus d'informations, consultez Prévention du député confus.{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:
region
:123456789012:*" } } } } -
Utilisez la commande create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation. Notez la valeur retournée de Role.Arn, car vous en aurez aussi besoin ultérieurement :
aws iam create-role --role-name
CWLtoKinesisRole
--assume-role-policy-document file://~/TrustPolicyForCWL-Kinesis.json
Voici un exemple de la sortie.
{ "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": { "arn:aws:logs:
region
:123456789012
:*" } } } } }, "RoleId": "EXAMPLE450GAB4HC5F431", "CreateDate": "2023-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::123456789012
:role/CWLtoKinesisRole" } } -
Créez une politique d'autorisation pour définir les actions que CloudWatch Logs peut effectuer sur votre compte. Vous allez tout d'abord créer une stratégie d'autorisations dans un fichier (par exemple,
~/PermissionsForCWL-Kinesis.json
). Utilisez un éditeur de texte créer cette stratégie. N'utilisez pas la console IAM pour le créer.{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:123456789012
:stream/TestStream" } ] } -
Associez la politique d'autorisations au rôle à l'aide de la put-role-policycommande suivante :
aws iam put-role-policy --role-name
CWLtoKinesisRole
--policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL-Kinesis.json
-
Une fois que le flux est à l'état actif et que vous avez créé le rôle IAM, vous pouvez créer la politique de filtrage CloudWatch des abonnements aux journaux. La politique lance immédiatement le flux de données de journal en temps réel vers votre flux. Dans cet exemple, tous les événements du journal contenant la chaîne
ERROR
sont diffusés en continu, à l'exception de ceux des groupes de journaux nommésLogGroupToExclude1
etLogGroupToExclude2
.aws logs put-account-policy \ --policy-name "ExamplePolicy" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"RoleArn":"arn:aws:iam::
123456789012
:role/CWLtoKinesisRole", "DestinationArn":"arn:aws:kinesis:region
:123456789012
:stream/TestStream", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL" -
Après avoir configuré le filtre d'abonnement, CloudWatch Logs transmet à votre stream tous les événements de journal entrants correspondant au modèle de filtre et aux critères de sélection.
Ce
selection-criteria
champ est facultatif, mais il est important pour exclure les groupes de journaux susceptibles de provoquer une récursivité infinie des journaux à partir d'un filtre d'abonnement. Pour plus d'informations sur ce problème et pour déterminer les groupes de journaux à exclure, consultezPrévention de la récursivité dans les journaux. NOT IN est actuellement le seul opérateur pris en charge pourselection-criteria
.Vous pouvez vérifier le flux des événements du journal en utilisant un itérateur de partition Kinesis Data Streams et en utilisant la commande Kinesis Data Streams pour récupérer certains enregistrements Kinesis
get-records
Data Streams :aws kinesis get-shard-iterator --stream-name TestStream --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON
{ "ShardIterator": "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP" }
aws kinesis get-records --limit 10 --shard-iterator "AAAAAAAAAAFGU/kLvNggvndHq2UIFOw5PZc6F01s3e3afsSscRM70JSbjIefg2ub07nk1y6CDxYR1UoGHJNP4m4NFUetzfL+wev+e2P4djJg4L9wmXKvQYoE+rMUiFq+p4Cn3IgvqOb5dRA0yybNdRcdzvnC35KQANoHzzahKdRGb9v4scv+3vaq+f+OIK8zM5My8ID+g6rMo7UKWeI4+IWiK2OSh0uP"
Vous devrez peut-être utiliser cette commande plusieurs fois avant que Kinesis Data Streams ne commence à renvoyer des données.
Vous devriez obtenir une réponse constituée d'un tableau d'enregistrements. L'attribut Données dans un registre Kinesis Data Streams est codé en base64 et compressé au format gzip. Vous pouvez examiner les données brutes à partir de la ligne de commande au moyen des commandes Unix suivantes :
echo -n "<Content of Data>" | base64 -d | zcat
Les données codées et décompressées en base64 sont formatées au format JSON avec la structure suivante :
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "Example1", "logStream": "logStream1", "subscriptionFilters": [ "ExamplePolicy" ], "logEvents": [ { "id": "31953106606966983378809025079804211143289615424298221568", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221569", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221570", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" } ], "policyLevel": "ACCOUNT_LEVEL_POLICY" }
Les principaux éléments de la structure de données sont les suivants :
- messageType
-
Les données de messages utiliseront le type « DATA_MESSAGE ». Parfois, CloudWatch Logs peut émettre des enregistrements Kinesis Data Streams de type « CONTROL_MESSAGE », principalement pour vérifier si la destination est accessible.
- owner
-
L'ID de AWS compte des données du journal d'origine.
- logGroup
-
Le nom du groupe de journaux des données du journal source.
- logStream
-
Le nom du flux de journaux des données du journal source.
- subscriptionFilters
-
La liste des noms de filtres d'abonnements qui correspondaient aux données du journal source.
- logEvents
-
Les données du journal réelles, représentées sous la forme d'un tableau d'enregistrements d'événements du journal. La propriété « id » est un identifiant unique pour chaque événement de journal.
- Niveau de la politique
-
Niveau auquel la politique a été appliquée. « ACCOUNT_LEVEL_POLICY » correspond à une politique de filtrage
policyLevel
d'abonnement au niveau du compte.
Exemple 2 : filtres d'abonnement avec AWS Lambda
Dans cet exemple, vous allez créer une politique de filtrage d'abonnement au niveau du compte CloudWatch Logs qui envoie les données des journaux à votre AWS Lambda fonction.
Avertissement
Avant de créer la fonction Lambda, calculez le volume de données du journal qui sera généré. Veillez à créer une fonction qui peut gérer ce volume. Si la fonction ne peut pas gérer le volume, le flux du journal sera limité. Étant donné que les événements de journal de tous les groupes de journaux ou d'un sous-ensemble des groupes de journaux du compte sont transférés vers la destination, il existe un risque de limitation. Pour plus d'informations sur les limites Lambda, consultez Limites AWS Lambda.
Pour créer une politique de filtrage des abonnements au niveau du compte pour Lambda
-
Créez la AWS Lambda fonction.
Assurez-vous d'avoir configuré le rôle d'exécution Lambda. Pour plus d'informations, consultez Étape 2.2 : Créer un rôle IAM (rôle d'exécution) dans le Guide du développeur AWS Lambda .
-
Ouvrez un éditeur de texte et créez un fichier nommé
helloWorld.js
avec le contenu suivant :var zlib = require('zlib'); exports.handler = function(input, context) { var payload = Buffer.from(input.awslogs.data, 'base64'); zlib.gunzip(payload, function(e, result) { if (e) { context.fail(e); } else { result = JSON.parse(result.toString()); console.log("Event Data:", JSON.stringify(result, null, 2)); context.succeed(); } }); };
-
Zippez le fichier helloWorld.js et enregistrez-le sous le nom
helloWorld.zip
. -
Utilisez la commande suivante, où le rôle correspond au rôle d'exécution Lambda que vous avez configuré à la première étape :
aws lambda create-function \ --function-name helloworld \ --zip-file fileb://file-path/helloWorld.zip \ --role lambda-execution-role-arn \ --handler helloWorld.handler \ --runtime nodejs18.x
-
Accordez à CloudWatch Logs l'autorisation d'exécuter votre fonction. Utilisez la commande suivante pour remplacer le compte fictif par votre propre compte.
aws lambda add-permission \ --function-name "helloworld" \ --statement-id "helloworld" \ --principal "logs.amazonaws.com" \ --action "lambda:InvokeFunction" \ --source-arn "arn:aws:logs:
region
:123456789012
:log-group:*" \ --source-account "123456789012" -
Créez une politique de filtrage des abonnements au niveau du compte à l'aide de la commande suivante, en remplaçant le compte réservé par votre propre compte. Dans cet exemple, tous les événements du journal contenant la chaîne
ERROR
sont diffusés en continu, à l'exception de ceux des groupes de journaux nommésLogGroupToExclude1
etLogGroupToExclude2
.aws logs put-account-policy \ --policy-name "ExamplePolicyLambda" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"DestinationArn":"arn:aws:lambda:
region
:123456789012
:function:helloWorld", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL"Après avoir configuré le filtre d'abonnement, CloudWatch Logs transmet à votre stream tous les événements de journal entrants correspondant au modèle de filtre et aux critères de sélection.
Ce
selection-criteria
champ est facultatif, mais il est important pour exclure les groupes de journaux susceptibles de provoquer une récursivité infinie des journaux à partir d'un filtre d'abonnement. Pour plus d'informations sur ce problème et pour déterminer les groupes de journaux à exclure, consultezPrévention de la récursivité dans les journaux. NOT IN est actuellement le seul opérateur pris en charge pourselection-criteria
. -
(Facultatif) Testez au moyen d'un exemple d'événement de journal. A l'invite de commande, exécutez la commande suivante, qui mettra un message de journal simple dans le flux abonné.
Pour voir le résultat de votre fonction Lambda, accédez à la fonction Lambda où vous verrez le résultat : in /aws/lambda/helloworld
aws logs put-log-events --log-group-name Example1 --log-stream-name logStream1 --log-events "[{\"timestamp\":
CURRENT TIMESTAMP MILLIS
, \"message\": \"Simple Lambda Test\"}]"Vous devriez voir une réponse comportant un tableau de Lambda. L'attribut Data du registre Lambda est codé en base64 et compressé au format gzip. La charge utile réelle reçue par Lambda est au format suivant
{ "awslogs": {"data": "BASE64ENCODED_GZIP_COMPRESSED_DATA"} }
. Vous pouvez examiner les données brutes à partir de la ligne de commande au moyen des commandes Unix suivantes :echo -n "<BASE64ENCODED_GZIP_COMPRESSED_DATA>" | base64 -d | zcat
Les données codées et décompressées en base64 sont formatées au format JSON avec la structure suivante :
{ "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "Example1", "logStream": "logStream1", "subscriptionFilters": [ "ExamplePolicyLambda" ], "logEvents": [ { "id": "31953106606966983378809025079804211143289615424298221568", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221569", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" }, { "id": "31953106606966983378809025079804211143289615424298221570", "timestamp": 1432826855000, "message": "{\"eventVersion\":\"1.03\",\"userIdentity\":{\"type\":\"Root\"}" } ], "policyLevel": "ACCOUNT_LEVEL_POLICY" }
Note
Le filtre d'abonnement au niveau du compte ne sera pas appliqué au groupe de journaux de la fonction Lambda de destination. Cela permet d'éviter une récursivité infinie des logs susceptible d'entraîner une augmentation de la facturation d'ingestion. Pour plus d'informations sur ce problème, consultezPrévention de la récursivité dans les journaux.
Les principaux éléments de la structure de données sont les suivants :
- messageType
-
Les données de messages utiliseront le type « DATA_MESSAGE ». Parfois, CloudWatch Logs peut émettre des enregistrements Kinesis Data Streams de type « CONTROL_MESSAGE », principalement pour vérifier si la destination est accessible.
- owner
-
L'ID de AWS compte des données du journal d'origine.
- logGroup
-
Le nom du groupe de journaux des données du journal source.
- logStream
-
Le nom du flux de journaux des données du journal source.
- subscriptionFilters
-
La liste des noms de filtres d'abonnements qui correspondaient aux données du journal source.
- logEvents
-
Les données du journal réelles, représentées sous la forme d'un tableau d'enregistrements d'événements du journal. La propriété « id » est un identifiant unique pour chaque événement de journal.
- Niveau de la politique
-
Niveau auquel la politique a été appliquée. « ACCOUNT_LEVEL_POLICY » correspond à une politique de filtrage
policyLevel
d'abonnement au niveau du compte.
Exemple 3 : filtres d'abonnement avec Amazon Data Firehose
Dans cet exemple, vous allez créer une politique de filtrage d'abonnement au niveau du compte CloudWatch Logs qui envoie les événements de journal entrants correspondant aux filtres que vous avez définis à votre flux de diffusion Amazon Data Firehose. Les données envoyées par CloudWatch Logs à Amazon Data Firehose sont déjà compressées avec la compression gzip de niveau 6. Vous n'avez donc pas besoin d'utiliser la compression dans votre flux de diffusion Firehose. Vous pouvez ensuite utiliser la fonction de décompression de Firehose pour décompresser automatiquement les journaux. Pour plus d'informations, consultez la section Écrire dans Kinesis Data CloudWatch Firehose à l'aide de journaux.
Avertissement
Avant de créer le flux Firehose, calculez le volume de données de journal qui sera généré. Assurez-vous de créer un flux Firehose capable de gérer ce volume. Si le flux ne peut pas traiter le volume, le flux de journaux sera limité. Pour plus d'informations sur les limites de volume de flux Firehose, consultez Amazon Data Firehose Data Limits.
Pour créer un filtre d'abonnement pour Firehose
-
Créez un compartiment Amazon Simple Storage Service (Amazon S3). Nous vous recommandons d'utiliser un bucket créé spécifiquement pour CloudWatch Logs. Toutefois, si vous souhaitez utiliser un compartiment existant, passez directement à l'étape 2.
Exécutez la commande suivante en remplaçant l'espace réservé à la région par la région que vous voulez utiliser :
aws s3api create-bucket --bucket
amzn-s3-demo-bucket2
--create-bucket-configuration LocationConstraint=region
Voici un exemple de sortie :
{ "Location": "/
amzn-s3-demo-bucket2
" } -
Créez le rôle IAM qui autorise Amazon Data Firehose à placer des données dans votre compartiment Amazon S3.
Pour plus d'informations, consultez la section Contrôler l'accès avec Amazon Data Firehose dans le manuel du développeur Amazon Data Firehose.
D'abord, utilisez un éditeur de texte pour créer une politique d'approbation dans un fichier
~/TrustPolicyForFirehose.json
comme suit :{ "Statement": { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } }
-
Utilisez la commande create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation. Notez la valeur Role.Arn renvoyée, car vous en aurez besoin ultérieurement :
aws iam create-role \ --role-name FirehosetoS3Role \ --assume-role-policy-document file://~/TrustPolicyForFirehose.json
{ "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" } } }, "RoleId": "EXAMPLE50GAB4HC5F431", "CreateDate": "2023-05-29T13:46:29.431Z", "RoleName": "
FirehosetoS3Role
", "Path": "/", "Arn": "arn:aws:iam::123456789012
:role/FirehosetoS3Role
" } } -
Créez une politique d'autorisation pour définir les actions que Firehose peut effectuer sur votre compte. D'abord, utilisez un éditeur de texte pour créer une stratégie d'autorisations dans un fichier
~/PermissionsForFirehose.json
:{ "Statement": [ { "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket2
", "arn:aws:s3:::amzn-s3-demo-bucket2
/*" ] } ] } -
Associez la politique d'autorisations au rôle à l'aide de la put-role-policy commande suivante :
aws iam put-role-policy --role-name
FirehosetoS3Role
--policy-namePermissions-Policy-For-Firehose
--policy-documentfile://~/PermissionsForFirehose
.json -
Créez un flux de diffusion Firehose de destination comme suit, en remplaçant les valeurs d'espace réservé pour Rolearn et BucketArn par le rôle et le bucket que vous avez créés : ARNs
aws firehose create-delivery-stream \ --delivery-stream-name 'my-delivery-stream' \ --s3-destination-configuration \ '{"RoleARN": "arn:aws:iam::
123456789012
:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2
"}'NFirehose utilise automatiquement un préfixe au format YYYY/MM/DD/HH UTC pour les objets Amazon S3 livrés. Vous pouvez spécifier un préfixe supplémentaire à ajouter devant le préfixe de format temporel. Si le préfixe se termine par une barre oblique (/), il apparaît comme un dossier dans le compartiment Amazon S3.
-
Patientez quelques minutes pour que le stream soit activé. Vous pouvez utiliser la describe-delivery-streamcommande Firehose pour vérifier le. DeliveryStreamDescription DeliveryStreamStatuspropriété. En outre, notez le DeliveryStreamDescription. DeliveryStreamValeur de l'ARN, dont vous aurez besoin ultérieurement :
aws firehose describe-delivery-stream --delivery-stream-name "
my-delivery-stream
"{ "DeliveryStreamDescription": { "HasMoreDestinations": false, "VersionId": "1", "CreateTimestamp": 1446075815.822, "DeliveryStreamARN": "arn:aws:firehose:
us-east-1
:123456789012
:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamName": "my-delivery-stream
", "Destinations": [ { "DestinationId": "destinationId-000000000001", "S3DestinationDescription": { "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "RoleARN": "delivery-stream-role", "BucketARN": "arn:aws:s3:::amzn-s3-demo-bucket2
", "BufferingHints": { "IntervalInSeconds": 300, "SizeInMBs": 5 } } } ] } } -
Créez le rôle IAM qui autorise CloudWatch Logs à insérer des données dans votre flux de diffusion Firehose. D'abord, utilisez un éditeur de texte pour créer une stratégie d'approbation dans un fichier
~/TrustPolicyForCWL.json
:Cette politique comprend une clé de contexte de condition
aws:SourceArn
globale pour aider à prévenir le problème de sécurité du député confus. Pour plus d'informations, consultez Prévention du député confus.{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:
region
:123456789012
:*" } } } } -
Utilisez la commande create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation. Notez la valeur Role.Arn renvoyée, car vous en aurez besoin ultérieurement :
aws iam create-role \ --role-name
CWLtoKinesisFirehoseRole
\ --assume-role-policy-documentfile://~/TrustPolicyForCWL.json
{ "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:
region
:123456789012
:*" } } } }, "RoleId": "AAOIIAH450GAB4HC5F431
", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisFirehoseRole
", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisFirehoseRole
" } } -
Créez une politique d'autorisation pour définir les actions que CloudWatch Logs peut effectuer sur votre compte. D'abord, utilisez un éditeur de texte pour créer une stratégie d'autorisations dans un fichier (par exemple,
~/PermissionsForCWL.json
) :{ "Statement":[ { "Effect":"Allow", "Action":["firehose:PutRecord"], "Resource":[ "arn:aws:firehose:
region
:account-id
:deliverystream/delivery-stream-name
"] } ] } -
Associez la politique d'autorisations au rôle à l'aide de la put-role-policy commande :
aws iam put-role-policy --role-name
CWLtoKinesisFirehoseRole
--policy-namePermissions-Policy-For-CWL
--policy-documentfile://~/PermissionsForCWL.json
-
Une fois que le flux de diffusion Amazon Data Firehose est actif et que vous avez créé le rôle IAM, vous pouvez créer la politique de filtrage des abonnements au niveau du compte CloudWatch Logs. La politique lance immédiatement le flux de données de journal en temps réel du groupe de journaux choisi vers votre flux de diffusion Amazon Data Firehose :
aws logs put-account-policy \ --policy-name "ExamplePolicyFirehose" \ --policy-type "SUBSCRIPTION_FILTER_POLICY" \ --policy-document '{"RoleArn":"arn:aws:iam::
123456789012
:role/CWLtoKinesisFirehoseRole", "DestinationArn":"arn:aws:firehose:us-east-1
:123456789012
:deliverystream/delivery-stream-name", "FilterPattern": "Test", "Distribution": "Random"}' \ --selection-criteria 'LogGroupName NOT IN ["LogGroupToExclude1", "LogGroupToExclude2"]' \ --scope "ALL" -
Après avoir configuré le filtre d'abonnement, CloudWatch Logs transmet les événements de journal entrants correspondant au modèle de filtre à votre flux de diffusion Amazon Data Firehose.
Ce
selection-criteria
champ est facultatif, mais il est important pour exclure les groupes de journaux susceptibles de provoquer une récursivité infinie des journaux à partir d'un filtre d'abonnement. Pour plus d'informations sur ce problème et pour déterminer les groupes de journaux à exclure, consultezPrévention de la récursivité dans les journaux. NOT IN est actuellement le seul opérateur pris en charge pourselection-criteria
.Vos données commenceront à apparaître dans votre Amazon S3 en fonction de l'intervalle de temps défini sur votre flux de diffusion Amazon Data Firehose. Après un délai suffisant, vous pouvez consulter votre compartiment Amazon S3 pour vérifier vos données.
aws s3api list-objects --bucket '
amzn-s3-demo-bucket2
' --prefix 'firehose/
'{ "Contents": [ { "LastModified": "2023-10-29T00:01:25.000Z", "ETag": "\"a14589f8897f4089d3264d9e2d1f1610\"", "StorageClass": "STANDARD", "Key": "firehose/2015/10/29/00/my-delivery-stream-2015-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250", "Owner": { "DisplayName": "cloudwatch-logs", "ID": "1ec9cf700ef6be062b19584e0b7d84ecc19237f87b5" }, "Size": 593 }, { "LastModified": "2015-10-29T00:35:41.000Z", "ETag": "\"a7035b65872bb2161388ffb63dd1aec5\"", "StorageClass": "STANDARD", "Key": "firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-35-40-EXAMPLE-7e66-49bc-9fd4-fc9819cc8ed3", "Owner": { "DisplayName": "cloudwatch-logs", "ID": "EXAMPLE6be062b19584e0b7d84ecc19237f87b6" }, "Size": 5752 } ] }
aws s3api get-object --bucket '
amzn-s3-demo-bucket2
' --key 'firehose/2023/10/29/00/my-delivery-stream-2023-10-29-00-01-21-a188030a-62d2-49e6-b7c2-b11f1a7ba250' testfile.gz{ "AcceptRanges": "bytes", "ContentType": "application/octet-stream", "LastModified": "Thu, 29 Oct 2023 00:07:06 GMT", "ContentLength": 593, "Metadata": {} }
Les données dans l'objet Amazon S3 sont comprimées au format gzip. Vous pouvez examiner les données brutes à partir de la ligne de commande au moyen de la commande Unix suivante :
zcat testfile.gz