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

Lecture de 8 minute(s)
0

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

L'envoi d'Amazon CloudWatch Logs vers un flux Kinesis Data Firehose situé dans une autre région AWS échoue si la région AWS ne prend pas en charge Kinesis Data Firehose.

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). Ensuite, attachez l'autorisation requise pour que Kinesis Data Firehose envoie des 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.

Solution

Remarque : cet article utilise les exemples de valeurs suivants :

  • 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 politique 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 que vous avez 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 politique 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 politique 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/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 politique 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 du Amazon Virtual Private Cloud (Amazon VPC) que vous avez créés.

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.


Informations connexes

DeliveryStreamDescription

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