

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'ingestion de Syslog
<a name="CWL_Syslog_Setup"></a>

Cette section explique les étapes à suivre pour configurer l'ingestion de syslog dans CloudWatch Logs. Vous allez créer un point de terminaison VPC pour le service syslog, un groupe de journaux pour recevoir les messages, une politique de ressources pour autoriser le service syslog et une configuration syslog qui achemine le trafic de votre point de terminaison VPC vers votre groupe de journaux.

Vous pouvez effectuer toutes ces étapes à l'aide de la console AWS de gestion AWS CLI, des AWS SDK ou des kits de développement logiciel. Les instructions suivantes fournissent à la fois la console et AWS CLI des exemples.

## Conditions préalables
<a name="CWL_Syslog_Setup_Prerequisites"></a>

L'identité IAM (utilisateur ou rôle) que vous utilisez pour configurer l'ingestion de syslog doit être autorisée à créer des points de terminaison VPC, des groupes de journaux, des politiques de ressources et des configurations syslog. L'exemple de politique suivant indique les autorisations minimales requises :

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:PutResourcePolicy",
        "logs:DeleteResourcePolicy",
        "logs:PutSyslogConfiguration",
        "logs:ListSyslogConfigurations",
        "logs:DeleteSyslogConfiguration"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:CreateVpc",
        "ec2:ModifyVpcAttribute",
        "ec2:CreateSubnet",
        "ec2:CreateSecurityGroup",
        "ec2:AuthorizeSecurityGroupIngress",
        "ec2:CreateVpcEndpoint",
        "ec2:ModifyVpcEndpoint",
        "ec2:DescribeVpcEndpoints"
      ],
      "Resource": "*"
    }
  ]
}
```

**Note**  
Si vous disposez déjà d'un VPC, d'un sous-réseau et d'un groupe de sécurité, vous n'avez besoin que des `ec2:DescribeVpcEndpoints` autorisations `ec2:CreateVpcEndpoint``ec2:ModifyVpcEndpoint`, et pour les actions EC2.

## Étape 1 : créer ou identifier un VPC
<a name="CWL_Syslog_Setup_VPC"></a>

Vous avez besoin d'un VPC accessible depuis votre réseau local (via VPN ou Direct Connect) sur lequel résident vos appareils générateurs de syslog. Si un VPC est déjà connecté à votre centre de données, ignorez cette étape et utilisez vos identifiants de VPC et de sous-réseau existants.

------
#### [ Console ]

**Pour créer un VPC (console)**

1. Ouvrez la console Amazon VPC à l’adresse [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. Dans le volet de navigation, choisissez **Your VPC**, puis **Create VPC.**

1. Sous **Ressources à créer**, choisissez **VPC uniquement**.

1. Pour le **bloc d'adresse CIDR IPv4**, entrez `10.0.0.0/16` (ou un code CIDR qui n'entre pas en conflit avec votre réseau local).

1. Sélectionnez **Create VPC** (Créer un VPC).

1. Sélectionnez le VPC nouvellement créé, choisissez **Actions**, Modifier les paramètres du **VPC.** Activez à la fois **la résolution DNS** **et les noms d'hôte DNS**, puis choisissez **Enregistrer**.

1. Créez un sous-réseau pour le point de terminaison VPC :

   1. Dans le volet de navigation, choisissez **Subnets**, puis **Create subnet**.

   1. Pour l'**ID VPC**, sélectionnez le VPC que vous avez créé.

   1. Pour **Zone de disponibilité**, choisissez une zone de disponibilité.

   1. Pour le **bloc CIDR du sous-réseau IPv4**, entrez. `10.0.1.0/24`

   1. Choisissez **Create subnet** (Créer un sous-réseau).

------
#### [ AWS CLI ]

```
REGION=us-east-1

# Create VPC
VPC_ID=$(aws ec2 create-vpc \
  --cidr-block 10.0.0.0/16 \
  --region $REGION \
  --query 'Vpc.VpcId' --output text)

aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-support --region $REGION
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames --region $REGION

# Create a subnet for the VPC endpoint
SUBNET_ID=$(aws ec2 create-subnet \
  --vpc-id $VPC_ID \
  --cidr-block 10.0.1.0/24 \
  --availability-zone ${REGION}a \
  --region $REGION \
  --query 'Subnet.SubnetId' --output text)

echo "VPC: $VPC_ID, Subnet: $SUBNET_ID"
```

------

**Note**  
Le point de terminaison VPC crée une interface ELASTIC (ENI) avec une adresse IP privée dans votre sous-réseau. Vos appareils sur site accèdent à cette adresse IP via votre connexion VPN ou Direct Connect. Assurez-vous que le routage de votre réseau autorise le trafic de vos appareils vers le sous-réseau CIDR.

## Étape 2 : Créer un groupe de sécurité
<a name="CWL_Syslog_Setup_SG"></a>

Créez un groupe de sécurité pour le point de terminaison du VPC qui autorise le trafic syslog entrant depuis votre VPC. Cela contrôle les ressources qui peuvent envoyer le syslog au point de terminaison.

------
#### [ Console ]

**Pour créer un groupe de sécurité (console)**

1. Ouvrez la console Amazon VPC à l’adresse [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. Dans le volet de navigation, choisissez **Security groups**, puis **Create security group**.

1. Sous **Security group name (Nom du groupe de sécurité)**, saisissez `syslog-vpce-sg`.

1. Pour **Description**, saisissez `Allow syslog traffic to VPC endpoint`.

1. Pour le **VPC**, sélectionnez le VPC que vous avez créé ou identifié à l'étape 1.

1. Dans la section **Règles de trafic entrant**, choisissez **Ajouter une règle** et ajoutez les règles suivantes :
   + **Règle 1 :** Type = **TCP personnalisé**, plage de ports =`6514`, Source = `10.0.0.0/16` (votre VPC CIDR)
   + **Règle 2 :** Type = **TCP personnalisé**, plage de ports =`1514`, Source = `10.0.0.0/16`
   + **Règle 3 :** Type = **UDP personnalisé**, plage de ports =`514`, Source = `10.0.0.0/16`

1. Sélectionnez **Create security group** (Créer un groupe de sécurité).

------
#### [ AWS CLI ]

```
VPCE_SG_ID=$(aws ec2 create-security-group \
  --group-name syslog-vpce-sg \
  --description "Allow syslog traffic to VPC endpoint" \
  --vpc-id $VPC_ID \
  --region $REGION \
  --query 'GroupId' --output text)

# Allow TCP+TLS (port 6514), TCP plaintext (port 1514), and UDP (port 514)
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
  --protocol tcp --port 6514 --cidr 10.0.0.0/16 --region $REGION
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
  --protocol tcp --port 1514 --cidr 10.0.0.0/16 --region $REGION
aws ec2 authorize-security-group-ingress --group-id $VPCE_SG_ID \
  --protocol udp --port 514 --cidr 10.0.0.0/16 --region $REGION
```

------

**Astuce**  
Si vous prévoyez d'utiliser un seul protocole (par exemple, TCP\+TLS sur le port 6514), il vous suffit d'ouvrir ce port dans le groupe de sécurité.

## Étape 3 : Créer le point de terminaison de VPC
<a name="CWL_Syslog_Setup_VPCE"></a>

Créez un point de terminaison VPC d'interface pointant vers le service AWS PrivateLink Syslog. Cela donne à votre VPC un point d'entrée privé vers le service Syslog CloudWatch Logs.

**Note**  
Vous pouvez spécifier plusieurs ID de sous-réseau dans différentes zones de disponibilité lors de la création du point de terminaison. Le point de terminaison crée un ENI dans chaque sous-réseau, offrant ainsi une meilleure disponibilité sans avoir besoin de points de terminaison VPC distincts par zone de disponibilité. Un point de terminaison VPC unique avec des sous-réseaux dans plusieurs zones de disponibilité est suffisant.

------
#### [ Console ]

**Pour créer le point de terminaison VPC (console)**

1. Ouvrez la console Amazon VPC à l’adresse [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/).

1. Dans le volet de navigation, choisissez **Endpoints**, puis **Create endpoint**.

1. Dans le **champ Name tag**, entrez le nom du point de terminaison (par exemple,`syslog-vpce`).

1. Pour **Service category (Catégorie de service)**, choisissez **Services AWS **.

1. Dans le champ de recherche **Services**, entrez `syslog-logs` et sélectionnez le service`com.amazonaws.{{Region}}.syslog-logs`.

1. Pour le **VPC**, sélectionnez le VPC que vous avez créé ou identifié à l'étape 1.

1. Dans la section **Sous-réseaux**, sélectionnez une ou plusieurs zones de disponibilité et choisissez les sous-réseaux dans lesquels vous souhaitez créer les interfaces réseau des terminaux.

1. Pour les **groupes de sécurité**, sélectionnez le groupe de sécurité que vous avez créé à l'étape 2 (`syslog-vpce-sg`).

1. (Facultatif) Si vous souhaitez limiter le trafic autorisé via le point de terminaison, configurez une politique de point de terminaison VPC. Pour de plus amples informations, veuillez consulter [Politiques de point de terminaison VPC pour Syslog](CWL_Syslog_VPCEndpointPolicies.md).

1. Choisissez **Créer un point de terminaison**.

1. Une fois que l'état du point de terminaison **est devenu Disponible**, sélectionnez le point de terminaison et notez la valeur **des noms DNS**. Il s'agit de l'adresse à laquelle vos appareils Syslog enverront.

------
#### [ AWS CLI ]

```
VPCE_ID=$(aws ec2 create-vpc-endpoint \
  --vpc-id $VPC_ID \
  --service-name com.amazonaws.${REGION}.syslog-logs \
  --vpc-endpoint-type Interface \
  --subnet-ids $SUBNET_ID \
  --security-group-ids $VPCE_SG_ID \
  --region $REGION \
  --query 'VpcEndpoint.VpcEndpointId' --output text)

echo "VPC Endpoint: $VPCE_ID"
```

Attendez que le point de terminaison soit disponible (environ 60 secondes), puis récupérez le nom DNS :

```
VPCE_DNS=$(aws ec2 describe-vpc-endpoints --vpc-endpoint-ids $VPCE_ID \
  --region $REGION --query 'VpcEndpoints[0].DnsEntries[0].DnsName' --output text)

echo "Endpoint DNS: $VPCE_DNS"
```

Enregistrez la `VPCE_DNS` valeur : vous allez configurer vos appareils Syslog pour qu'ils envoient des messages à cette adresse.

------

## Étape 4 : Création d'un groupe de journaux
<a name="CWL_Syslog_Setup_LogGroup"></a>

Créez le groupe de CloudWatch journaux dans lequel vos messages Syslog seront envoyés. Vous pouvez utiliser n'importe quel nom de groupe de journaux. Nous vous recommandons d'utiliser un `/syslog/` préfixe pour des raisons de clarté organisationnelle.

------
#### [ Console ]

**Pour créer un groupe de journaux (console)**

1. Ouvrez la console CloudWatch Logs à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sous **Gestion des journaux**, choisissez **Log groups**.

1. Sélectionnez **Créer un groupe de journaux**.

1. Dans **Nom du groupe de journaux**, entrez`/syslog/my-devices`.

1. (Facultatif) Configurez les paramètres de rétention et de chiffrement selon vos besoins.

1. Choisissez **Créer**.

------
#### [ AWS CLI ]

```
aws logs create-log-group \
  --log-group-name /syslog/my-devices \
  --region $REGION
```

------

Il n'est pas nécessaire de créer un flux de journal. Le service syslog crée automatiquement un flux de journal nommé `{{VPCE_ID}}_Syslog_{{Region}}` (par exemple,`vpce-0abc123def456_Syslog_us-east-1`) lorsque le premier message est délivré.

## Étape 5 : Ajouter une politique de ressources
<a name="CWL_Syslog_Setup_ResourcePolicy"></a>

Le service Syslog CloudWatch Logs écrit dans votre groupe de journaux à l'aide du `syslog.logs.amazonaws.com` Service Principal. Vous devez lui accorder l'autorisation via une politique de ressources sur votre groupe de journaux. Cette `aws:SourceArn` condition garantit que seul le trafic provenant de votre point de terminaison VPC spécifique peut écrire dans ce groupe de journaux.

```
ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

aws logs put-resource-policy \
  --policy-name syslog-ingestion \
  --policy-document '{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "syslog.logs.amazonaws.com"
      },
      "Action": [
        "logs:PutLogEvents",
        "logs:CreateLogStream"
      ],
      "Resource": "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:/syslog/my-devices:*",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "'$ACCOUNT_ID'"
        },
        "ArnEquals": {
          "aws:SourceArn": "arn:aws:ec2:'$REGION':'$ACCOUNT_ID':vpc-endpoint/'$VPCE_ID'"
        }
      }
    }
  ]
}' \
  --region $REGION
```

Les conditions de la politique de ressources fournissent les protections suivantes :
+ `aws:SourceAccount`— Empêche les attaques confuses des adjoints. Seul le trafic de votre compte est accepté.
+ `aws:SourceArn`— Délimite l'accès à un point de terminaison VPC spécifique. Si vous avez plusieurs points de terminaison VPC, ajoutez-les en tant qu'ARN distinct dans la condition.

Pour autoriser plusieurs points de terminaison VPC à écrire dans le même groupe de journaux, utilisez l'opérateur de `ArnLike` condition avec un caractère générique :

```
"ArnLike": {
    "aws:SourceArn": "arn:aws:ec2:us-east-1:123456789012:vpc-endpoint/*"
}
```

## Étape 6 : Création de la configuration Syslog
<a name="CWL_Syslog_Setup_Config"></a>

Cette étape indique au service Syslog CloudWatch Logs que le trafic provenant de votre point de terminaison VPC doit être acheminé vers votre groupe de journaux. Sans cette configuration, le trafic provenant de votre terminal est rejeté.

------
#### [ Console ]

**Pour créer la configuration Syslog (console)**

1. Ouvrez la console CloudWatch Logs à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sous **Gestion des journaux**, choisissez **Log groups**.

1. Choisissez le groupe de journaux que vous avez créé à l'étape 4 (par exemple,`/syslog/my-devices`).

1. Dans les détails du groupe de journaux, recherchez la section **Syslog Ingestion.**

1. Choisissez **Configurer**.

1. Dans la liste déroulante des points de terminaison VPC, sélectionnez le point de terminaison VPC que vous avez créé à l'étape 3.

1. Choisissez **Créer**.

------
#### [ AWS CLI ]

```
aws logs put-syslog-configuration \
  --log-group-identifier /syslog/my-devices \
  --vpc-endpoint-id $VPCE_ID \
  --region $REGION
```

Vérifiez la configuration :

```
aws logs list-syslog-configurations \
  --log-group-identifier /syslog/my-devices \
  --region $REGION
```

------

Votre pipeline d'ingestion Syslog est désormais actif. Tous les messages Syslog envoyés au point de terminaison du VPC seront transmis au groupe de journaux. `/syslog/my-devices`

## Étape 7 : Vérifier la livraison et l'extraction sur le terrain
<a name="CWL_Syslog_Setup_Verify"></a>

Envoyez un message de test depuis n'importe quel hôte ou appareil EC2 pouvant atteindre le point de terminaison VPC, puis CloudWatch utilisez Log Analytics pour vérifier que le message a été délivré et que les champs structurés ont été extraits correctement. Les messages apparaissent généralement dans un délai de 10 à 20 secondes.

**Envoyer un message de test (texte brut TCP) :**

```
echo "<134>1 $(date -u +%Y-%m-%dT%H:%M:%SZ) myhost myapp 1234 - - Hello from syslog" | \
  nc $VPCE_DNS 1514
```

**Vérifiez la livraison et les champs extraits :**

------
#### [ Console ]

**Pour vérifier la livraison à l'aide de Log Analytics (console)**

1. Ouvrez la console CloudWatch Logs à l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Dans le volet de navigation, sous **Logs**, sélectionnez **Log Analytics**.

1. Dans le sélecteur de groupes de journaux, choisissez votre groupe de journaux (par exemple,`/syslog/my-devices`).

1. Entrez la requête suivante et choisissez **Exécuter la requête** :

   ```
   fields @timestamp, facility, severity, hostname, appName, procId, message
   | sort @timestamp desc
   | limit 10
   ```

1. Vérifiez que votre message de test apparaît et que les champs extraits sont correctement remplis. Pour le message de test ci-dessus, vous devriez voir `facility` `severity` =`local0`, `hostname` = `info``myhost`, =`myapp`, `appName` = et `procId` =`1234`.

------
#### [ AWS CLI ]

Lancez une requête Log Analytics pour vérifier la livraison et l'extraction des champs :

```
QUERY_ID=$(aws logs start-query \
  --log-group-name /syslog/my-devices \
  --start-time $(date -d '5 minutes ago' +%s 2>/dev/null || echo $(date -v-5M +%s)) \
  --end-time $(date +%s) \
  --query-string 'fields @timestamp, facility, severity, hostname, appName, procId, message | sort @timestamp desc | limit 10' \
  --region $REGION \
  --query 'queryId' --output text)

# Wait a few seconds for the query to complete, then retrieve results
aws logs get-query-results \
  --query-id $QUERY_ID \
  --region $REGION
```

Vérifiez que votre message de test apparaît et que les champs extraits sont correctement remplis. Pour le message de test ci-dessus, vous devriez voir `facility` `severity` =`local0`, `hostname` = `info``myhost`, =`myapp`, `appName` = et `procId` =`1234`.

------