Comment transférer les CloudWatch Logs d'un compte à l'autre vers Kinesis Data Firehose ?

Lecture de 8 minute(s)
0

Je souhaite diffuser des Amazon CloudWatch Logs depuis Amazon Kinesis Data Firehose vers un autre compte dans une autre région AWS.

Brève description

Pour envoyer des Amazon CloudWatch Logs vers un flux Kinesis Data Firehose dans une autre région, la région doit prendre en charge Kinesis Data Firehose. Vérifiez que votre région prend en charge Kinesis Data Firehose.

Pour utiliser Kinesis Data Firehose afin de diffuser des journaux dans d'autres comptes et régions prises en charge, procédez comme suit :

  1. Créez un compartiment Amazon Simple Storage Service (Amazon S3) dans le compte de destination. Créez un rôle AWS Identity and Access Management (IAM). Attachez ensuite l'autorisation requise pour que Kinesis Data Firehose transmette des données vers Amazon S3.
  2. Créez une destination pour Kinesis Data Firehose dans le compte de destination. Créez un rôle IAM pour CloudWatch Logs afin de transmettre des données à Kinesis Data Firehose. Créez ensuite un flux de diffusion de destination vers lequel transférer les journaux.
  3. Activez Amazon Virtual Private Cloud (Amazon VPC) Flow Logs, puis transférez les journaux vers CloudWatch pour le compte source.
  4. Créez un filtre d'abonnement dans le compte source qui pointe vers le compte de destination.
  5. Validez le flux des événements du journal dans le compartiment S3 du compte de destination.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Cette résolution utilise les exemples de valeurs suivants que vous devez remplacer par vos propres valeurs :

  • Compte de destination : 111111111111
  • Région de Kinesis Data Firehose : us-east-1
  • Région du compartiment S3 : us-west-2
  • Région de destination (réception des journaux du compte source) : us-east-2
  • Compte source (où se trouvent les journaux de flux du VPC) : 222222222222
  • Région du groupe de journaux Amazon CloudWatch : us-east2
  • Région des journaux de flux VPC : us-east-2

Configurer le compte de destination

1.    Créez un compartiment S3.

aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2

La contrainte de localisation indique que le compartiment sera créé dans la région us-west-2.

2.    Créez le rôle IAM et la politique de confiance qui accordent à Kinesis Data Firehose les autorisations requises :

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "firehose.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "111111111111"
      }
    }
  }
}

Les paramètres d'autorisation doivent permettre à Kinesis Data Firehose de placer des données dans le compartiment S3 que vous avez créé.

3.    Créez le rôle IAM et spécifiez le fichier de stratégie d’approbation :

aws iam create-role \
    --role-name FirehosetoS3Role \
    --assume-role-policy-document file://~/TrustPolicyForFirehose.json

Notez la valeur Role_Arn à utiliser ultérieurement.

4.    Créez une stratégie d'autorisations dans un fichier JSON pour définir les actions que Kinesis Data Firehose peut effectuer sur le compte de destination :

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "s3:AbortMultipartUpload",
          "s3:GetBucketLocation",
          "s3:GetObject",
          "s3:ListBucket",
          "s3:ListBucketMultipartUploads",
          "s3:PutObject"
        ],
        "Resource": [
          "arn:aws:s3:::my-bucket",
          "arn:aws:s3:::my-bucket/*"
        ]
      }
    ]
  }

5.    Associez la stratégie d'autorisations au rôle IAM :

aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json

6.    Créez un flux de diffusion de destination pour Kinesis Data Firehose :

aws firehose create-delivery-stream --delivery-stream-name 'my-delivery-stream' --s3-destination-configuration RoleARN='arn:aws:iam::111111111111:role/FirehosetoS3Role',BucketARN='arn:aws:s3:::my-bucket' --region us-east-1

Remplacez RoleARN et BucketARN par les ARN de rôle et de bucket que vous avez créés.

**Remarque :**lorsque vous envoyez correctement un objet S3 à Kinesis Data Firehose, un préfixe personnalisé est utilisé dans l'expression de l'espace de noms timestamp. Vous pouvez ajouter et spécifier un préfixe supplémentaire au début du préfixe du format horaire (aaaa/MM/jj/HH/). Si le préfixe se termine par une barre oblique (/), il apparaît sous la forme d'un dossier dans le compartiment S3.

7.     Utilisez la commande describe-delivery-stream pour vérifier la propriété DeliveryStreamDescription.DeliveryStreamStatus :

aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1

Pour vérifier que le flux est actif, vérifiez la sortie de la commande describe-delivery-stream :

{
  "DeliveryStreamDescription": {
    "DeliveryStreamType": "DirectPut",
    "HasMoreDestinations": false,
    "DeliveryStreamEncryptionConfiguration": {
      "Status": "DISABLED"
    },
    "VersionId": "1",
    "CreateTimestamp": 1604484348.804,
    "DeliveryStreamARN": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream",
    "DeliveryStreamStatus": "ACTIVE",
    "DeliveryStreamName": "my-delivery-stream",
    "Destinations": [
      {
        "DestinationId": "destinationId-000000000001",
        "ExtendedS3DestinationDescription": {
          "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 5
          },
          "EncryptionConfiguration": {
            "NoEncryptionConfig": "NoEncryption"
          },
          "CompressionFormat": "UNCOMPRESSED",
          "S3BackupMode": "Disabled",
          "CloudWatchLoggingOptions": {
            "Enabled": false
          },
          "BucketARN": "arn:aws:s3:::my-bucket"
        },
        "S3DestinationDescription": {
          "RoleARN": "arn:aws:iam::111111111111:role/FirehosetoS3Role2test",
          "BufferingHints": {
            "IntervalInSeconds": 300,
            "SizeInMBs": 5
          },
          "EncryptionConfiguration": {
            "NoEncryptionConfig": "NoEncryption"
          },
          "CompressionFormat": "UNCOMPRESSED",
          "CloudWatchLoggingOptions": {
            "Enabled": false
          },
          "BucketARN": "arn:aws:s3:::my-bucket"
        }
      }
    ]
  }
}

Vous devrez utiliser la valeur DeliveryStreamDescription.DeliveryStreamARN lors d’une prochaine étape.

8.    Créez le rôle IAM et la stratégie d’approbation qui accordent à CloudWatch Logs l'autorisation de placer des données dans le flux Kinesis Data Firehose. Assurez-vous d'ajouter les régions dans lesquelles les journaux sont envoyés :

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "logs.us-east-1.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringLike": {
        "aws:SourceArn": [
          "arn:aws:logs:region:sourceAccountId:*",
          "arn:aws:logs:region:recipientAccountId:*"
        ]
      }
    }
  }
}

9.    Pour créer le rôle IAM et spécifier le fichier de stratégie d’approbation, utilisez la commande ](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html)create-role[ :

aws iam create-role \
    --role-name CWLtoKinesisFirehoseRole \
    --assume-role-policy-document file://~/TrustPolicyForCWL.json

Notez la valeur Role_Arn renvoyée à utiliser lors d'une étape ultérieure.

10.    Créez une stratégie d'autorisations pour définir les actions que CloudWatch Logs peut effectuer sur le compte de destination. Utilisez les valeurs DeliveryStreamDescription.DeliveryStreamStatus et Role_Arn que vous avez notées lors des étapes précédentes.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream"
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
        }
    ]
}

11.    Associez la stratégie d'autorisations au rôle à l'aide de la commande put-role-policy :

aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json

12.    Utilisez l’appel d’API put-destination pour créer une destination dans le compte de destination. Il s'agit de la destination vers laquelle le compte source envoie tous les journaux :

aws logs put-destination --destination-name "myDestination" --target-arn "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
--role-arn "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole" --region us-east-2

**Remarque :**vous pouvez créer une destination pour le flux de diffusion dans n'importe quelle région où Kinesis Data Firehose est pris en charge. La région dans laquelle vous créez la destination doit être identique à la région source du journal.

13.    Créez une stratégie d'accès pour la destination Amazon CloudWatch :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "222222222222"
      },
      "Action": "logs:PutSubscriptionFilter",
      "Resource": "arn:aws:logs:us-east-2:111111111111:destination:myDestination"
    }
  ]
}

14.    Associez la stratégie d'accès à la destination Amazon CloudWatch :

aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2

15.    Pour vérifier la destination, exécutez la commande suivante :

aws logs describe-destinations --region us-east-2

Configurer le compte source

**Remarque :**vous devez être l'administrateur IAM ou l'utilisateur root du compte source.

1.    Créez un rôle IAM et une stratégie d’approbation pour accorder à VPC Flow Logs les autorisations nécessaires pour envoyer des données au groupe de journaux CloudWatch :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2.    Pour créer le rôle IAM et spécifier le fichier de stratégie d’approbation que vous avez créé, utilisez la commande suivante :

aws iam create-role --role-name PublishFlowLogs --assume-role-policy-document file://~/TrustPolicyForVPCFlowLogs.json

Notez la valeur ARN renvoyée à transmettre aux journaux de flux VPC lors d'une étape ultérieure.

3.    Créez une stratégie d'autorisations pour définir les actions que VPC Flow Logs peut effectuer sur le compte source :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

4.    Pour associer la stratégie d'autorisations au rôle IAM, exécutez la commande suivante :

aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json

5.    Créez un groupe de journaux CloudWatch Logs pour configurer la destination des journaux de flux VPC :

aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2

6.    Pour activer les journaux de flux VPC, exécutez la commande suivante :

aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-12345678 --traffic-type ALL --log-group-name vpc-flow-logs --deliver-logs-permission-arn arn:aws:iam::222222222222:role/PublishFlowLogs --region us-east-2

**Remarque :**remplacez les valeurs d'espace réservé --resource-ids et --deliver-logs-permission-arn par votre ID VPC et votre rôle VPC Flow Logs.

7.    Inscrivez le groupe de journaux CloudWatch à Kinesis Data Firehose dans le compte de destination :

aws logs put-subscription-filter --log-group-name "vpc-flow-logs" --filter-name "AllTraffic" --filter-pattern "" --destination-arn
"arn:aws:logs:us-east-2:111111111111:destination:myDestination" --region us-east-2

Mettez à jour la valeur ARN de --destination et remplacez 111111111111 par le numéro de compte de destination.

8.    Vérifiez le compartiment S3 pour confirmer que les journaux sont publiés.

Informations connexes

DeliveryStreamDescription

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an