Configuration de l'authentification par jeton porteur - 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.

Configuration de l'authentification par jeton porteur

Avant de pouvoir envoyer des journaux à l'aide de l'authentification par jeton porteur avec l'un des points de terminaison d'ingestion HTTP, 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

Important

Nous recommandons d'utiliser l'authentification SigV4 avec des informations d'identification à court terme pour toutes les charges de travail lorsque cela est possible. Le SigV4 fournit la meilleure posture de sécurité. Limitez l'utilisation de clés d'API (jetons porteurs) aux scénarios dans lesquels l'authentification à court terme basée sur les informations d'identification n'est pas possible. Lorsque vous êtes prêt à intégrer les CloudWatch journaux dans des applications présentant des exigences de sécurité plus strictes, vous devez passer aux informations d'identification à court terme. Pour plus d'informations, consultez la section Alternatives aux clés d'accès longue durée dans le guide de l'utilisateur IAM.

Option 1 : démarrage rapide à l'aide de la AWS console

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 points de terminaison HTTP.

Pour configurer l'accès au point de terminaison HTTP à 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é d'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 disposera des 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 avez besoin de personnaliser les autorisations, vous pouvez configurer manuellement l'accès au point de terminaison HTTP.

É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, procédez comme suit :

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

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 à un 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" } } } ] }

Rotation des clés API

La rotation régulière de vos clés d'API réduit le risque d'accès non autorisé. Nous vous recommandons d'établir un calendrier de rotation conforme aux politiques de sécurité de votre organisation.

Processus de rotation

Pour faire pivoter une clé d'API sans interrompre la livraison du journal, procédez comme suit :

  1. Créez un nouvel identifiant (secondaire) pour l'utilisateur IAM :

    aws iam create-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com \ --credential-age-days 90
  2. (Facultatif) Stockez les nouvelles informations d'identification AWS Secrets Manager pour une récupération sécurisée et une rotation automatique.

  3. Importez les nouvelles informations d'identification dans le portail de votre fournisseur ou mettez à jour la configuration de votre application pour utiliser la nouvelle clé d'API.

  4. Définissez les informations d'identification d'origine sur inactive :

    aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  5. Vérifiez que la livraison des journaux n'est pas affectée en surveillant la IncomingBytes métrique relative à votre groupe de connexions CloudWatch. Pour plus d'informations, consultez la section Surveillance à l'aide de CloudWatch métriques.

  6. Après avoir confirmé la livraison réussie avec la nouvelle clé, supprimez les informations d'identification précédentes :

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

Surveillance de l'expiration des clés

Pour vérifier la date de création et le statut de vos clés d'API existantes, utilisez la list-service-specific-credentialscommande :

aws iam list-service-specific-credentials \ --user-name cloudwatch-logs-hlc-user \ --service-name logs.amazonaws.com

La réponse inclut CreateDate et Status pour chaque identifiant. Utilisez ces informations pour identifier les clés qui arrivent à expiration ou qui sont actives depuis plus longtemps que ne le permet votre politique de rotation.

Répondre à une clé d'API compromise

Si vous pensez qu'une clé d'API a été compromise, prenez immédiatement les mesures suivantes :

  1. Désactivez immédiatement la clé pour empêcher toute nouvelle utilisation non autorisée :

    aws iam update-service-specific-credential \ --user-name cloudwatch-logs-hlc-user \ --service-specific-credential-id ACCA1234EXAMPLE1234 \ --status Inactive
  2. Passez en revue les CloudTrail journaux pour déterminer l'étendue des accès non autorisés. Découvrez Enregistrement de l'utilisation des clés d'API avec CloudTrail comment activer l'audit de l'utilisation des clés d'API.

  3. Créez une clé de remplacement en suivant le processus de rotation décrit dansProcessus de rotation.

  4. Supprimez la clé compromise une fois que la clé de remplacement est en place :

    aws iam delete-service-specific-credential \ --service-specific-credential-id ACCA1234EXAMPLE1234
  5. Ajoutez une politique de refus si vous devez immédiatement bloquer l'accès à tout jeton porteur pour l'utilisateur IAM pendant que vous étudiez :

    { "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Action": "logs:CallWithBearerToken", "Resource": "*" } }
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.

Vous pouvez également utiliser les opérations d'API IAM suivantes pour gérer les clés compromises :

  • ResetServiceSpecificCredential— Réinitialisez la clé pour générer un nouveau mot de passe sans supprimer les informations d'identification. La clé ne doit pas avoir expiré.

Bonnes pratiques de sécurité pour les clés d'API

Suivez ces bonnes pratiques pour protéger vos clés CloudWatch d'API Logs :

  • N'intégrez jamais de clés d'API dans le code source. Ne codez pas en dur les clés d'API dans le code de l'application et ne les validez pas dans les systèmes de contrôle de version. Si une clé est accidentellement validée dans un dépôt public, le scan AWS automatique peut la signaler et vous devez immédiatement faire pivoter la clé.

  • Utilisez un gestionnaire de secrets. Stockez les clés d'API dans une solution de gestion des secrets AWS Secrets Managerou dans une solution équivalente. Cela permet un contrôle d'accès centralisé, un enregistrement des audits et une rotation automatique.

  • Définissez une date d'expiration pour toutes les clés. Spécifiez toujours une --credential-age-days valeur lors de la création de clés d'API. Pour appliquer une durée de vie maximale des clés au sein de votre organisation, utilisez la clé de condition iam:ServiceSpecificCredentialAgeDays IAM. Pour obtenir un exemple, consultez Autoriser la création de clés CloudWatch Logs uniquement si elles expirent dans les 90 jours.

  • Appliquez les autorisations du moindre privilège. Étendez les autorisations de l'utilisateur IAM uniquement aux groupes de journaux et aux actions requises. Utilisez la politique CloudWatchLogsAPIKeyd'accès géré comme point de départ et limitez davantage selon les besoins.

  • Activez la CloudTrail journalisation. Auditez l'utilisation des clés d'API en activant CloudTrail les événements de données pourAWS::Logs::LogGroupAuthorization. Consultez Enregistrement de l'utilisation des clés d'API avec CloudTrail.

  • Surveillez avec IAM Access Analyzer. Utilisez IAM Access Analyzer pour identifier les informations d'identification non utilisées et les politiques trop permissives associées aux utilisateurs IAM de votre clé d'API.

  • Faites pivoter les touches régulièrement. Établissez un calendrier de rotation et suivez le processus décrit dansRotation des clés API.

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