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
Connectez-vous à la console AWS de gestion.
Accédez à CloudWatch> Paramètres > Journaux.
-
Dans la section Clés d'API, choisissez Générer une clé d'API.
-
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é).
-
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 etlogs:CallWithBearerTokenautorisations)Génère des informations d'identification spécifiques au service (clé API)
-
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.
-
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 -
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-1Vé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 Logslogs:CallWithBearerToken— Authentifiez-vous à l'aide d'un jeton porteurkms: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 :
Connectez-vous à la console AWS de gestion et accédez à IAM.
Dans le volet de navigation de gauche, choisissez Utilisateurs.
Choisissez Create user (Créer un utilisateur).
Entrez un nom d'utilisateur (par exemple,
cloudwatch-logs-hlc-user).Choisissez Suivant.
-
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/*" } ] } 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-credential
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 URLlogStream— 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-applicationouapi.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 :
UpdateServiceSpecificCredential— Réglez le statut de la clé sur inactif. Vous pouvez la réactiver par la suite.
ResetServiceSpecificCredential— Réinitialisez la clé. Cela génère un nouveau mot de passe pour la clé.
DeleteServiceSpecificCredential— Supprime définitivement la clé.
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-credential
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-credential
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-credential
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.
-
Créez un parcours :
aws cloudtrail create-trail \ --name cloudwatch-logs-api-key-audit \ --s3-bucket-name my-cloudtrail-bucket \ --region us-east-1 -
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"] } ] }]' -
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és400 Bad Request— Format ou paramètres de demande non valides401 Unauthorized— Jeton porteur non valide ou expiré403 Forbidden— Autorisations insuffisantes404 Not Found— Le groupe de journaux ou le flux n'existe pas429 Too Many Requests— Limite de débit dépassée500 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