Envoi de CloudWatch journaux à Logs à l'aide du point de terminaison HLC - Amazon CloudWatch Logs

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.

Envoi de CloudWatch journaux à Logs à l'aide du point de terminaison HLC

Amazon CloudWatch Logs prend en charge un point de terminaison HTTP Log Collector (HLC) qui vous permet d'envoyer des journaux directement à CloudWatch Logs à l'aide d'un protocole HTTP simple. Cette fonctionnalité simplifie l'ingestion des journaux pour les applications et les services sans nécessiter l'intégration du AWS SDK.

La fonctionnalité de point de terminaison HLC vous permet de :

  • Envoyer des journaux à CloudWatch Logs à l'aide du protocole HTTP

  • Authentifiez-vous à l'aide d'informations d'identification spécifiques au service IAM (jetons porteurs)

  • Ingérez les journaux sans nécessiter l'intégration du AWS SDK

  • Utilisez de simples requêtes HTTP POST depuis n'importe quelle application ou service

Note

La clé API (jeton porteur) pour l'accès aux terminaux HLC est actuellement en version préliminaire et disponible dans les AWS régions suivantes :us-east-1, us-west-1us-west-2, et. us-east-2 Veuillez consulter cette documentation pour les mises à jour à venir.

Conditions préalables

Avant de pouvoir envoyer des journaux à l'aide du point de terminaison HLC, vous devez :

  • Création d'un utilisateur IAM avec des autorisations CloudWatch Logs

  • Générer des informations d'identification spécifiques au service (jeton porteur)

  • Création d'un groupe de journaux et d'un flux de journaux

  • Activer l'authentification par jeton porteur sur le groupe de journaux

Option 1 : configuration simplifiée à l'aide de la AWS console (recommandée)

La console AWS de gestion fournit un flux de travail rationalisé pour générer des clés d'API pour l'accès aux terminaux HLC.

Pour configurer l'accès au point de terminaison HLC à l'aide de la console
  1. Connectez-vous à la console AWS de gestion.

  2. Accédez à CloudWatch> Paramètres > Journaux.

  3. Dans la section Clés d'API, choisissez Générer une clé d'API.

  4. Pour Epiration de la clé d’API, effectuez l’une des actions suivantes :

    • Sélectionnez une durée d'expiration de la clé API de 1, 5, 30, 90 ou 365 jours.

    • Choisissez Durée personnalisée pour spécifier une date d’expiration personnalisée pour la clé d’API.

    • Sélectionnez Ne jamais expirer (non recommandé).

  5. Choisissez Générer une clé d’API.

    La console :

    • Crée un nouvel utilisateur IAM doté des autorisations appropriées

    • Joint la politique CloudWatchLogsAPIKeyd'accès géré (logs:PutLogEventsinclusions et logs:CallWithBearerToken autorisations)

    • Génère des informations d'identification spécifiques au service (clé API)

  6. Copiez et enregistrez en toute sécurité les informations d'identification affichées :

    • ID de clé d'API (ID d'identification spécifique au service)

    • Secret de la clé API (jeton porteur)

    Important

    Enregistrez immédiatement le secret de la clé API. Vous ne pourrez pas la récupérer ultérieurement. Si vous la perdez, vous devrez générer une nouvelle clé d'API.

  7. Créez le groupe de journaux et le flux de journaux dans lesquels vos journaux seront stockés :

    # Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1
  8. Activez l'authentification par jeton porteur sur le groupe de journaux :

    aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

    Vérifiez la configuration :

    aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Autorisations incluses : L'utilisateur IAM créé automatiquement aura les autorisations suivantes :

  • logs:PutLogEvents— Envoie les événements du journal à CloudWatch Logs

  • logs:CallWithBearerToken— Authentifiez-vous à l'aide d'un jeton porteur

  • kms:Describe*,kms:GenerateDataKey*, kms:Decrypt — Accédez à des groupes de journaux chiffrés par KMS (avec une condition se limitant au service de journaux)

Option 2 : Configuration manuelle

Si vous préférez mieux contrôler la configuration IAM ou si vous devez personnaliser les autorisations, vous pouvez configurer le point de terminaison HLC manuellement.

Étape 1 : créer un utilisateur IAM

Créez un utilisateur IAM qui sera utilisé pour l'ingestion des journaux :

  1. Connectez-vous à la console AWS de gestion et accédez à IAM.

  2. Dans le volet de navigation de gauche, choisissez Utilisateurs.

  3. Choisissez Create user (Créer un utilisateur).

  4. Entrez un nom d'utilisateur (par exemple,cloudwatch-logs-hlc-user).

  5. Choisissez Suivant.

  6. Joignez l'une des politiques IAM suivantes :

    Option A : utiliser la politique gérée (recommandée)

    Joignez la politique de gestion des CloudWatchLogsAPIKeyaccès.

    Option B : créer une politique personnalisée

    Créez et attachez la politique IAM suivante :

    { "Version": "2012-10-17", "Statement": [ { "Sid": "LogsAPIs", "Effect": "Allow", "Action": [ "logs:CallWithBearerToken", "logs:PutLogEvents" ], "Resource": "*" }, { "Sid": "KMSAPIs", "Effect": "Allow", "Action": [ "kms:Describe*", "kms:GenerateDataKey*", "kms:Decrypt" ], "Condition": { "StringEquals": { "kms:ViaService": [ "logs.*.amazonaws.com" ] } }, "Resource": "arn:aws:kms:*:*:key/*" } ] }
  7. Choisissez Suivant, puis Créer un utilisateur.

Note

Les autorisations KMS sont requises si vous prévoyez d'envoyer des journaux à des groupes de journaux chiffrés par KMS. La condition limite l'accès KMS aux seules clés utilisées via le service CloudWatch Logs.

Étape 2 : générer des informations d'identification spécifiques au service (clé API)

Générez la clé CloudWatch d'API Logs à l'aide de l'CreateServiceSpecificCredentialAPI. Vous pouvez également utiliser la commande create-service-specific-credentialCLI. Pour l'âge des informations d'identification, vous pouvez spécifier une valeur comprise entre 1 et 36 600 jours. Si vous ne spécifiez pas de durée de validité, la clé d’API n’expirera pas.

Pour générer une clé d'API dont l'expiration est de 30 jours :

aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 30

La réponse est un ServiceSpecificCredentialobjet. La ServiceCredentialSecret valeur est votre clé CloudWatch d'API Logs (jeton porteur).

Important

Stockez la valeur ServiceCredentialSecret en toute sécurité, car vous ne pourrez pas la récupérer ultérieurement. Si vous la perdez, vous devrez générer une nouvelle clé d'API.

Étape 3 : créer un groupe de journaux et un flux de journaux

Créez le groupe de journaux et le flux de journaux dans lesquels vos journaux seront stockés :

# Create the log group aws logs create-log-group \ --log-group-name /aws/hlc-logs/my-application \ --region us-east-1 # Create the log stream aws logs create-log-stream \ --log-group-name /aws/hlc-logs/my-application \ --log-stream-name application-stream-001 \ --region us-east-1

Étape 4 : activer l'authentification par jeton porteur

Activez l'authentification par jeton porteur sur le groupe de journaux :

aws logs put-bearer-token-authentication \ --log-group-identifier /aws/hlc-logs/my-application \ --bearer-token-authentication-enabled \ --region us-east-1

Vérifiez la configuration :

aws logs describe-log-groups \ --log-group-name-prefix /aws/hlc-logs/my-application \ --region us-east-1

Envoi de journaux au point de terminaison HLC

Format du point de terminaison

L'URL du point de terminaison HLC suit le format suivant :

https://logs.<region>.amazonaws.com/services/collector/event?logGroup=<name>&logStream=<name>[&entityName=<name>&entityEnvironment=<environment>]

Paramètres requis :

  • <region>— AWS Région (par exempleus-east-1,eu-west-1)

  • logGroup— Nom du groupe de logs codé en URL

  • logStream— Nom du flux de journal codé en URL

Paramètres facultatifs :

Vous pouvez éventuellement associer les événements de votre journal à une Service entité en incluant les paramètres de requête suivants. Les journaux envoyés via le point de terminaison HLC étant de la télémétrie personnalisée, ils ne sont pas automatiquement associés à une entité. En fournissant ces paramètres, CloudWatch Logs crée une entité KeyAttributes.Type définie sur Service et l'associe à vos événements de journal. Cela permet à la fonctionnalité associée CloudWatch à Explore de corréler ces journaux avec d'autres données de télémétrie (métriques, traces et journaux) du même service, ce qui facilite le dépannage et la surveillance de vos applications sur différents types de signaux. Pour plus d'informations sur les entités et la télémétrie associée, consultez la section Ajout d'informations associées à la télémétrie personnalisée.

  • entityName— Nom de l'entité de service à associer aux événements du journal. Cette valeur est stockée en tant qu'entité KeyAttributes.Name (par exemple, my-application ouapi.myservice.com).

  • entityEnvironment— L'environnement dans lequel le service est hébergé ou à quoi il appartient. Cette valeur est stockée en tant qu'entité KeyAttributes.Environment (par exempleproduction,ec2:default, oueks:my-cluster/default).

Format des demandes

Envoyez les journaux à l'aide du protocole HTTP POST avec les en-têtes et le corps suivants :

En-têtes :

  • Authorization: Bearer <your-bearer-token>

  • Content-Type: application/json

Format du boîtier :

Le corps de la requête doit être au format JSON avec un tableau d'événements :

{ "event": [ { "time": 1730141374.001, "event": "Application started successfully", "host": "web-server-1", "source": "application.log", "severity": "info" }, { "time": 1730141374.457, "event": "User login successful", "host": "web-server-1", "source": "auth.log", "user": "john.doe" } ] }

Descriptions des champs :

  • time— Horodatage de l'époque Unix en millisecondes (obligatoire)

  • event— Le message du journal ou les données de l'événement (obligatoire)

  • host— Nom d'hôte ou identifiant source (facultatif)

  • source— Identifiant de la source du journal (facultatif)

Des champs personnalisés supplémentaires peuvent être inclus selon les besoins.

Exemple de demande

curl -X POST \ 'https://logs.<region>.amazonaws.com/services/collector/event?logGroup=/aws/hlc-logs/my-application&logStream=application-stream-001' \ -H "Authorization: Bearer <your-bearer-token>" \ -H "Content-Type: application/json" \ -d '{ "event": [ { "time": 1730141374.001, "event": "Application started", "host": "web-server-1", "severity": "info" } ] }'

Autorisations de contrôle pour la génération et l'utilisation CloudWatch des clés d'API Logs

La génération et l'utilisation des clés d'API CloudWatch Logs sont contrôlées par des actions et des clés de condition dans les services CloudWatch Logs et IAM.

Contrôle de la génération des clés d'API CloudWatch Logs

L'CreateServiceSpecificCredentialaction iam : contrôle la génération d'une clé spécifique au service (telle qu'une clé d'API CloudWatch Logs). Vous pouvez étendre cette action aux utilisateurs IAM en tant que ressource afin de limiter le nombre d’utilisateurs pour lesquels une clé peut être générée.

Vous pouvez utilisez les clés de condition suivantes pour imposer des conditions à l’autorisation pour l’action iam:CreateServiceSpecificCredential :

  • iam : ServiceSpecificCredentialAgeDays — Permet de spécifier, dans la condition, le délai d'expiration de la clé en jours. Par exemple, vous pouvez utiliser cette clé de condition pour autoriser uniquement des clés API qui expirent au terme d’un délai de 90 jours.

  • iam : ServiceSpecificCredentialServiceName — Permet de spécifier, dans la condition, le nom d'un service. Par exemple, vous pouvez utiliser cette clé de condition pour autoriser uniquement la création de clés d'API pour les CloudWatch journaux et non pour d'autres services.

Contrôle de l'utilisation des clés d'API CloudWatch Logs

L'logs:CallWithBearerTokenaction contrôle l'utilisation d'une clé d'API CloudWatch Logs. Pour empêcher une identité d'utiliser CloudWatch les clés de l'API Logs, associez une politique qui refuse l'logs:CallWithBearerTokenaction à l'utilisateur IAM associé à la clé.

Exemples de politiques

Empêcher une identité de générer et d'utiliser CloudWatch les clés d'API Logs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyCWLAPIKeys", "Effect": "Deny", "Action": [ "iam:CreateServiceSpecificCredential", "logs:CallWithBearerToken" ], "Resource": "*" } ] }
Avertissement

Cette politique empêchera la création d'informations d'identification pour tous les AWS services qui prennent en charge la création d'informations d'identification spécifiques au service. Pour plus d’informations, consultez Informations d’identification spécifiques au service pour les utilisateurs IAM.

Empêcher une identité d'utiliser CloudWatch les clés de l'API Logs

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } ] }

Autoriser la création de clés CloudWatch Logs uniquement si elles expirent dans les 90 jours

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:CreateServiceSpecificCredential", "Resource": "arn:aws:iam::123456789012:user/username", "Condition": { "StringEquals": { "iam:ServiceSpecificCredentialServiceName": "logs.amazonaws.com" }, "NumericLessThanEquals": { "iam:ServiceSpecificCredentialAgeDays": "90" } } } ] }

Gérer les clés API CloudWatch Logs compromises

Si votre clé d’API est compromise, vous devez révoquer les autorisations d’utilisation. Vous pouvez utiliser les opérations d'API IAM suivantes pour gérer les clés compromises :

Note

Pour effectuer ces actions via l'API, vous devez vous authentifier à l'aide AWS d'informations d'identification et non à l'aide d'une clé d'API CloudWatch Logs.

Modifier le statut d'une clé d'API CloudWatch Logs

Pour désactiver une touche, utilisez la update-service-specific-credentialcommande :

aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive

Pour réactiver la clé, changez le statut enActive.

Réinitialisation d'une clé d'API CloudWatch Logs

Si la valeur de votre clé a été compromise ou si vous ne l'avez plus, réinitialisez-la à l'aide de la reset-service-specific-credentialcommande. La clé ne doit pas encore avoir expirée. Si elle est déjà expirée, supprimez la clé et créez-en une nouvelle.

aws iam reset-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

Supprimer une clé d'API CloudWatch Logs

Si vous n'avez plus besoin d'une clé ou si elle a expiré, supprimez-la à l'aide de la delete-service-specific-credentialcommande suivante :

aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234

Joindre des politiques IAM pour supprimer les autorisations d'utilisation d'une clé d'API CloudWatch Logs

Pour empêcher une identité de passer des appels avec une clé d'API CloudWatch Logs, associez la politique suivante à l'utilisateur IAM associé à la clé :

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } }

Enregistrement de l'utilisation des clés d'API avec CloudTrail

Vous pouvez l'utiliser AWS CloudTrail pour enregistrer les événements de données liés à l'utilisation des clés de l'API CloudWatch Logs. CloudWatch Logs émet AWS::Logs::LogGroupAuthorization des événements de données pour les CallWithBearerToken appels, ce qui vous permet de vérifier quand et comment les clés d'API sont utilisées pour envoyer des journaux.

Pour activer la CloudTrail journalisation pour l'utilisation des clés de l'API CloudWatch Logs :

Note

Le compartiment S3 que vous spécifiez pour le suivi doit disposer d'une politique de compartiment qui CloudTrail permet d'y écrire des fichiers journaux. Pour plus d'informations, consultez la politique relative aux compartiments Amazon S3 pour CloudTrail.

  1. Créez un parcours :

    aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1
  2. Configurez des sélecteurs d'événements avancés pour capturer CloudWatch les événements d'autorisation des groupes de journaux journaux :

    aws cloudtrail put-event-selectors \ --region us-east-1 \ --trail-name cloudwatch-logs-api-key-audit \ --advanced-event-selectors '[{ "Name": "CloudWatch Logs API key authorization events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": ["Data"] }, { "Field": "resources.type", "Equals": ["AWS::Logs::LogGroupAuthorization"] } ] }]'
  3. Commencez à enregistrer les sentiers :

    aws cloudtrail start-logging \ --name cloudwatch-logs-api-key-audit \ --region us-east-1

Bonnes pratiques

Événements liés au traitement par lots

Pour de meilleures performances et une meilleure efficacité :

  • Batch de plusieurs événements en une seule demande lorsque cela est possible

  • Taille de lot recommandée : 10 à 100 événements par demande

  • Taille maximale de la demande : 1 Mo

Gestion des erreurs

Implémentez une gestion appropriée des erreurs dans votre application. Codes d'état HTTP courants :

  • 200 OK— Logs correctement ingérés

  • 400 Bad Request— Format ou paramètres de demande non valides

  • 401 Unauthorized— Jeton porteur non valide ou expiré

  • 403 Forbidden— Autorisations insuffisantes

  • 404 Not Found— Le groupe de journaux ou le flux n'existe pas

  • 429 Too Many Requests— Limite de débit dépassée

  • 500 Internal Server Error— Erreur de service (nouvelle tentative avec retard exponentiel)

Limitations

  • Taille maximale de l'événement : 256 Ko par événement

  • Taille maximale de la demande : 1 Mo

  • Nombre maximum d'événements par demande : 10 000

  • Les noms des groupes de journaux doivent respecter les conventions de dénomination des CloudWatch journaux

  • L'authentification par jeton porteur doit être activée sur le groupe de journaux