AWS

Présentation

Associez Amazon Web Services (AWS) pour :

  • Visualiser les mises à jour automatiques de statut AWS dans votre Events Explorer
  • Obtenir des métriques CloudWatch pour les hosts EC2 sans installer l’Agent
  • Taguer vos hosts EC2 avec des informations propres à EC2
  • Visualiser les événements de maintenance EC2 planifiés dans votre flux
  • Recueillir des métriques et des événements CloudWatch depuis de nombreux autres produits AWS
  • Visualiser les alarmes CloudWatch dans votre Events Explorer

Pour profiter au plus vite de l’intégration AWS, consultez le guide de prise en main d’AWS.

L’intégration Amazon Web Services de Datadog permet de recueillir les logs, les événements et toutes les métriques en provenance de CloudWatch pour plus de 90 services AWS.

Configuration

La délégation des rôles AWS n'est pas prise en charge par le site gouvernemental Datadog. En effet, il nécessite l'utilisation de clés d'accès.

Choisissez l’une des méthodes suivantes pour intégrer vos comptes AWS dans Datadog et ainsi recueillir vos métriques, vos événements, vos traces et vos logs :

Configuration automatique

Méthode manuelle

  • Délégation des rôles Pour configurer l’intégration AWS manuellement avec la délégation des rôles, consultez le guide de configuration manuelle.

  • Clés d’accès (régions GovCloud ou Chine uniquement)
    Pour configurer l’intégration AWS avec les clés d’accès, consultez le guide de configuration manuelle.

AWS IAM permissions

AWS IAM permissions enable Datadog to collect metrics, tags, EventBridge events, and other data necessary to monitor your AWS environment.

To correctly set up the AWS Integration, you must attach the relevant IAM policies to the Datadog AWS Integration IAM Role in your AWS account.

AWS integration IAM policy

The set of permissions necessary to use all the integrations for individual AWS services.

The following permissions included in the policy document use wild cards such as List* and Get*. If you require strict policies, use the complete action names as listed and reference the Amazon API documentation for your respective services.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "apigateway:GET",
                "autoscaling:Describe*",
                "backup:List*",
                "backup:ListRecoveryPointsByBackupVault",
                "bcm-data-exports:GetExport",
                "bcm-data-exports:ListExports",
                "budgets:ViewBudget",
                "cassandra:Select",
                "cloudfront:GetDistributionConfig",
                "cloudfront:ListDistributions",
                "cloudtrail:DescribeTrails",
                "cloudtrail:GetTrailStatus",
                "cloudtrail:LookupEvents",
                "cloudwatch:Describe*",
                "cloudwatch:Get*",
                "cloudwatch:List*",
                "codedeploy:BatchGet*",
                "codedeploy:List*",
                "cur:DescribeReportDefinitions",
                "directconnect:Describe*",
                "dynamodb:Describe*",
                "dynamodb:List*",
                "ec2:Describe*",
                "ec2:GetSnapshotBlockPublicAccessState",
                "ec2:GetTransitGatewayPrefixListReferences",
                "ec2:SearchTransitGatewayRoutes",
                "ecs:Describe*",
                "ecs:List*",
                "elasticache:Describe*",
                "elasticache:List*",
                "elasticfilesystem:DescribeAccessPoints",
                "elasticfilesystem:DescribeFileSystems",
                "elasticfilesystem:DescribeTags",
                "elasticloadbalancing:Describe*",
                "elasticmapreduce:Describe*",
                "elasticmapreduce:List*",
                "es:DescribeElasticsearchDomains",
                "es:ListDomainNames",
                "es:ListTags",
                "events:CreateEventBus",
                "fsx:DescribeFileSystems",
                "fsx:ListTagsForResource",
                "glacier:GetVaultNotifications",
                "glue:ListRegistries",
                "health:DescribeAffectedEntities",
                "health:DescribeEventDetails",
                "health:DescribeEvents",
                "kinesis:Describe*",
                "kinesis:List*",
                "lambda:GetPolicy",
                "lambda:List*",
                "lightsail:GetInstancePortStates",
                "logs:DeleteSubscriptionFilter",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:DescribeSubscriptionFilters",
                "logs:FilterLogEvents",
                "logs:PutSubscriptionFilter",
                "logs:TestMetricFilter",
                "oam:ListAttachedLinks",
                "oam:ListSinks",
                "organizations:Describe*",
                "organizations:List*",
                "rds:Describe*",
                "rds:List*",
                "redshift:DescribeClusters",
                "redshift:DescribeLoggingStatus",
                "route53:List*",
                "s3:GetBucketLocation",
                "s3:GetBucketLogging",
                "s3:GetBucketNotification",
                "s3:GetBucketTagging",
                "s3:ListAccessGrants",
                "s3:ListAllMyBuckets",
                "s3:PutBucketNotification",
                "savingsplans:DescribeSavingsPlanRates",
                "savingsplans:DescribeSavingsPlans",
                "ses:Get*",
                "sns:GetSubscriptionAttributes",
                "sns:List*",
                "sns:Publish",
                "sqs:ListQueues",
                "states:DescribeStateMachine",
                "states:ListStateMachines",
                "support:DescribeTrustedAdvisor*",
                "support:RefreshTrustedAdvisorCheck",
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "timestream:DescribeEndpoints",
                "waf-regional:ListRuleGroups",
                "waf-regional:ListRules",
                "waf:ListRuleGroups",
                "waf:ListRules",
                "wafv2:GetIPSet",
                "wafv2:GetLoggingConfiguration",
                "wafv2:GetRegexPatternSet",
                "wafv2:GetRuleGroup",
                "wafv2:ListLoggingConfigurations",
                "xray:BatchGetTraces",
                "xray:GetTraceSummaries"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

Collecte de logs

Il existe deux façons d’envoyer des logs de service AWS à Datadog :

  • Destination Kinesis Firehose : utilisez la destination Datadog dans votre flux de diffusion Kinesis Firehose pour transmettre vos logs à Datadog. Il est conseillé de procéder de la même façon pour envoyer un volume très élevé de logs depuis CloudWatch.
  • Fonction Lambda du Forwarder : déployez la fonction Lambda du Forwarder Datadog qui s’abonne aux compartiments S3 ou à vos groupes de logs CloudWatch. Transmettez ensuite vos logs à Datadog. Datadog vous conseille également d’utiliser cette méthode pour envoyer des logs depuis S3 ou depuis d’autres ressources ne prenant pas en charge la diffusion de données vers Kinesis.

Collecte de métriques

Il existe deux façons d’envoyer des métriques AWS à Datadog :

  • Interrogation des métriques : l’intégration AWS contient une fonctionnalité d’interrogation d’API. Celle-ci effectue une analyse métrique par métrique de l’API CloudWatch afin d’extraire les données à envoyer à Datadog. De nouvelles métriques sont extraites toutes les 10 minutes en moyenne.
  • Flux de métriques avec Kinesis Firehose : vous pouvez utiliser les flux de métriques Amazon CloudWatch et Amazon Kinesis Data Firehose pour visualiser vos métriques. Remarque : cette méthode implique une latence de deux à trois minutes, et requiert une configuration distincte.

Consultez la section Facturation des intégrations AWS pour découvrir les solutions pour exclure certaines ressources et ainsi réduire vos coûts.

Collecte de ressources

Certains produits Datadog tirent parti d’informations relatives à la configuration de vos ressources AWS (tels que les compartiments S3, les snapshots RDS et les distributions CloudFront). Datadog récupère ces informations en effectuant des appels API en lecture seule vers votre compte AWS.

Cloud Security Posture Management

Implémentation

Si vous n’avez pas encore configuré l’intégration AWS pour votre compte AWS, suivez les étapes requises ci-dessus. Prenez soin d’activer Cloud Security Posture Management lorsque vous y êtes invité.

Remarque : pour utiliser cette fonctionnalité, l’intégration AWS doit être configurée avec la délégation des rôles.

Pour ajouter la solution Cloud Security Posture Management à une intégration AWS existante, suivez les étapes ci-dessous pour activer la collecte de ressources.

  1. Accordez les autorisations requises au rôle IAM Datadog en suivant les étapes manuelles ou automatiques :

    Méthode automatique - Mise à jour de votre modèle CloudFormation.  a. Dans la console CloudFormation, repérez la stack principale que vous avez utilisée pour installer l’intégration Datadog, puis sélectionnez Update.  b. Sélectionnez Replace current template. c. Sélectionnez Amazon S3 URL, saisissez https://datadog-cloudformation-template.s3.amazonaws.com/aws/main.yaml, puis cliquez sur Next. d. Définissez l’option CloudSecurityPostureManagementPermissions sur true, puis cliquez sur Next sans modifier d’autres paramètres jusqu’à atteindre la page Review, qui vous permet de vérifier l’ensemble des changements prévus. e. Cochez les deux cases d’acceptation en bas de la page et cliquez sur Update stack.

    Méthode manuelle : associez la stratégie SecurityAudit gérée d’AWS à votre rôle AWS IAM Datadog. Cette stratégie est disponible dans la console AWS.

  2. Suivez les étapes ci-dessous pour terminer la configuration sur la page de l’intégration Datadog/AWS. Vous pouvez également utiliser l’endpoint d’API pour la mise à jour d’une intégration AWS.

    1. Cliquez sur le compte AWS pour lequel vous souhaitez activer la collecte de ressources.
    2. Dans l’onglet Resource collection de ce compte, activez Cloud Security Posture Management Collection.
    3. En bas à droite de la page, cliquez sur Save.

Collecte d’alarmes

Vous pouvez envoyer des alarmes AWS CloudWatch à l’Events Explorer Datadog de deux façons différentes :

  • Récupération d’alarmes : cette fonctionnalité est fournie par défaut avec l’intégration AWS et permet de récupérer les alarmes liées aux métriques par l’intermédiaire de l’API DescribeAlarmHistory. Si vous utilisez cette méthode, vos alarmes sont classées sous la source d’événements Amazon Web Services. Remarque : le crawler ne récupère pas les alarmes composites.
  • Rubrique SNS : pour visualiser toutes vos alarmes AWS CloudWatch dans votre Events Explorer, abonnez les alarmes à une rubrique SNS, puis transférez les messages SNS à Datadog. Pour découvrir comment recevoir des messages SNS en tant qu’événements dans Datadog, consultez la rubrique Recevoir les messages de SNS. Si vous utilisez cette méthode, vos alarmes sont classées sous la source d’événements Amazon SNS.

Données collectées

Métriques

aws.events.failed_invocations
(count)
Measures the number of invocations that failed permanently. This does not include invocations that are retried or that succeeded after a retry attempt
aws.events.invocations
(count)
Measures the number of times a target is invoked for a rule in response to an event. This includes successful and failed invocations but does not include throttled or retried attempts until they fail permanently.
aws.events.matched_events
(count)
Measures the number of events that matched with any rule.
aws.events.throttled_rules
(count)
Measures the number of triggered rules that are being throttled.
aws.events.triggered_rules
(count)
Measures the number of triggered rules that matched with any event.
aws.logs.delivery_errors
(count)
The number of log events for which CloudWatch Logs received an error when forwarding data to the subscription destination.
Shown as event
aws.logs.delivery_throttling
(count)
The number of log events for which CloudWatch Logs was throttled when forwarding data to the subscription destination.
Shown as event
aws.logs.forwarded_bytes
(gauge)
The volume of log events in compressed bytes forwarded to the subscription destination.
Shown as byte
aws.logs.forwarded_log_events
(count)
The number of log events forwarded to the subscription destination.
Shown as event
aws.logs.incoming_bytes
(gauge)
The volume of log events in uncompressed bytes uploaded to Cloudwatch Logs.
Shown as byte
aws.logs.incoming_log_events
(count)
The number of log events uploaded to Cloudwatch Logs.
Shown as event
aws.usage.call_count
(count)
The number of specified operations performed in your account
Shown as operation
aws.usage.resource_count
(count)
The number of specified resources in your account
Shown as resource

Événements

La collecte d’événements AWS se configure au niveau de chaque service AWS. Consultez la documentation du service AWS pertinent pour obtenir plus d’informations sur la collecte d’événements.

Tags

Les tags suivants sont recueillis à l’aide de l’intégration AWS. Remarque : certains tags s’affichent uniquement pour des métriques spécifiques.

IntégrationClés de tag Datadog
Toutesregion
API Gatewayapiid, apiname, method, resource, stage
App Runnerinstance, serviceid, servicename
Auto Scalingautoscalinggroupname, autoscaling_group
Billingaccount_id, budget_name, budget_type, currency, servicename, time_unit
CloudFrontdistributionid
CodeBuildproject_name
CodeDeployapplication, creator, deployment_config, deployment_group, deployment_option, deployment_type, status
DirectConnectconnectionid
DynamoDBglobalsecondaryindexname, operation, streamlabel, tablename
EBSvolumeid, volume-name, volume-type
EC2autoscaling_group, availability-zone, image, instance-id, instance-type, kernel, name, security_group_name
ECSclustername, servicename, instance_id
EFSfilesystemid
ElastiCachecachenodeid, cache_node_type, cacheclusterid, cluster_name, engine, engine_version, preferred_availability-zone, replication_group
ElasticBeanstalkenvironmentname, enviromentid
ELBavailability-zone, hostname, loadbalancername, name, targetgroup
EMRcluster_name, jobflowid
ESdedicated_master_enabled, ebs_enabled, elasticsearch_version, instance_type, zone_awareness_enabled
Firehosedeliverystreamname
FSxfilesystemid, filesystemtype
Healthevent_category, status, service
IoTactiontype, protocol, rulename
Kinesisstreamname, name, state
KMSkeyid
Lambdafunctionname, resource, executedversion, memorysize, runtime
Machine Learningmlmodelid, requestmode
MQbroker, queue, topic
OpsWorksstackid, layerid, instanceid
Pollyoperation
RDSauto_minor_version_upgrade, dbinstanceclass, dbclusteridentifier, dbinstanceidentifier, dbname, engine, engineversion, hostname, name, publicly_accessible, secondary_availability-zone
RDS Proxyproxyname, target, targetgroup, targetrole
Redshiftclusteridentifier, latency, nodeid, service_class, stage, wlmid
Route 53healthcheckid
S3bucketname, filterid, storagetype
SESLes clés de tag sont personnalisées dans AWS.
SNStopicname
SQSqueuename
VPCnategatewayid, vpnid, tunnelipaddress
WorkSpacesdirectoryid, workspaceid

Checks de service

aws.status
Renvoie CRITICAL si une ou plusieurs régions AWS rencontrent des problèmes. Si ce n’est pas le cas, renvoie OK.
Statuses: ok, critical

Dépannage

Consultez la section Dépannage de l’intégration AWS pour résoudre les problèmes liés à l’intégration AWS.

Pour aller plus loin