Comment puis-je transférer des journaux inter-comptes Amazon CloudWatch Logs vers Kinesis Data Firehose ?

Dernière mise à jour : 16/03/2021

Je souhaite diffuser des journaux Amazon CloudWatch Logs à partir d'Amazon Kinesis Data Firehose vers un autre compte dans une autre région. Comment configurer un flux inter-comptes depuis Kinesis Data Firehose vers un compartiment Amazon Simple Storage Service (Amazon S3) dans une autre région ?

Brève description

Si vous essayez d'envoyer des journaux Amazon CloudWatch Logs à un flux Kinesis Data Firehose dans une autre Région AWS, cela peut échouer.

Important : assurez-vous que votre Région prend en charge Kinesis Data Firehose.

Pour établir un flux inter-comptes et inter-régions à l'aide de Kinesis Data Firehose, effectuez les opérations suivantes :

1.    Créez un compartiment Amazon S3 dans le compte de destination. Créez un rôle AWS Identity and Access Management (IAM), puis attachez l'autorisation requise pour Kinesis Data Firehose pour transmettre les données vers S3.

2.    Créez une destination pour Kinesis Data Firehose dans le compte de destination. Créez un rôle IAM pour que le service Amazon CloudWatch Logs transmette des données au service Kinesis Data Firehose. Ensuite, créez un flux de livraison de destination vers lequel les journaux seront transférés.

3.    Activez les journaux de flux VPC et envoyez les journaux vers Amazon 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 d'événements de journalisation dans le compartiment Amazon S3 du compte de destination.

Résolution

Remarque : Dans cet article, nous utiliserons les exemples de valeurs suivantes :

  • 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 : 222222222222
  • Région du groupe de journaux Amazon CloudWatch : us-east2
  • Région des journaux de flux VPC : us-east-2

Configuration du compte de destination

1.    Créez un compartiment Amazon S3 :

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

La contrainte d'emplacement indique que le compartiment sera créé dans la Région us-west 2.

2.    Créez le rôle IAM et la stratégie d'approbation 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 Amazon S3 qui vient d'être créé. Remplacez « 111111111111 » par votre ID de compte AWS.

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

Remarque : Vous utiliserez la valeur Role_Arn dans une étape ultérieure.

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

{
  "Statement": [
    {
      "Effect":
    "Allow",
      "Action": [ 
          "s3:AbortMultipartUpload", 
          "s3:GetBucketLocation", 
          "s3:GetObject", 
          "s3:ListBucket", 
          "s3:ListBucketMultipartUploads", 
          "s3:PutObjectAcl",
          "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 le rôle et le compartiment Amazon Resource Names (ARN) que vous avez créés.

Remarque : Lorsqu'un objet Amazon S3 est livré avec succès à Kinesis Data Firehose, un préfixe personnalisé est utilisé dans l'expression d'espace de noms d' horodatage. Vous pouvez ajouter et spécifier un préfixe supplémentaire devant le préfixe de format temporel (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

Vérifiez la sortie de la commande describe-delivery-stream pour confirmer que le flux est actif :

{
    "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"
                }
            }
        ]
    }
}

Remarque : vous utiliserez la valeur DeliveryStreamDescription.DeliveryStreamARN dans une étape ultérieure.

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 où les journaux sont poussés :

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
  "Service": [
    "logs.us-east-1.amazonaws.com",
    "logs.us-east-2.amazonaws.com"
    
  ]
},
    "Action": "sts:AssumeRole"
  }
}

9.    Utilisez la commande create-role pour créer le rôle IAM et spécifier le fichier de stratégie d'approbation :

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

Remarque : vous utiliserez la valeur Role_Arn renvoyée dans une étape ultérieure.

10.    Créez une stratégie d'autorisations pour définir les actions que CloudWatch Logs peut effectuer dans le compte de destination :

{
    "Statement":[
      {
        "Effect":"Allow",
        "Action":["firehose:*"],
       
    "Resource":["arn:aws:firehose:us-east-1:111111111111:*"]
      },
      {
        "Effect":"Allow",
        "Action":["iam:PassRole"],
       
    "Resource":["arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole"]
      }
    ]
}

Utilisez la valeur DeliveryStreamDescription.DeliveryStreamARN de l'étape 7 et la valeur Role_Arn de l'étape 9.

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.    Créez une destination dans le compte de destination à l'aide de l'appel API put-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/CWLtoKinesisRole" --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"
    }
  ]
}

Remplacez « 222222222222 » par le compte source AWS où se trouvent les journaux de votre Amazon Virtual Private Cloud (Amazon VPC).

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.    Vérifiez votre destination en exécutant la commande suivante :

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

Configuration du compte source

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

1.     Créez un rôle IAM et une stratégie d'approbation pour accorder aux journaux de flux VPC les autorisations d'envoyer des données au groupe de journaux CloudWatch Logs :
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal":
          {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
        "Action": "sts:AssumeRole"
       }
    ]
}

2.    Utilisez la commande suivante pour créer le rôle IAM et spécifier le fichier de stratégie d'approbation que vous avez créé :

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

Remarque : vous utiliserez la valeur ARN retournée à transmettre aux journaux de flux VPC dans une étape ultérieure.

3.    Créez une stratégie d'autorisations pour définir les actions que les journaux de flux VPC peuvent effectuer dans le compte source :

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

4.    Associez la stratégie d'autorisations au rôle IAM en exécutant 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 du flux VPC :

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

6.     Activez les journaux de flux VPC en exécutant 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

Remplacez les valeurs d'espace réservé --resource-ids et --deliver-logs-permission-arn par votre rôle VPC ID et journaux de flux VPC.

7.     Abonnez le groupe de journaux CloudWatch Logs à 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-1:111111111111:destination:myDestination" --region us-east-2

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

8.     Vérifiez le compartiment Amazon S3 pour confirmer que les journaux ont été publiés.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?