Comment puis-je transférer les journaux CloudWatch d'un compte à un autre vers Amazon Data Firehose ?

Lecture de 7 minute(s)
0

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

Résolution

Pour envoyer les journaux CloudWatch à un flux Firehose situé dans une autre région, la région doit prendre en charge Firehose.

Dans les commandes de la résolution, remplacez les valeurs suivantes par les vôtres :

  • 111111111111 par l'ID de votre compte de destination
  • us-east-1 par votre région Firehose
  • us-west-2 par votre région de compartiment Amazon Simple Storage Service (Amazon S3)
  • us-east-2 par la région de votre compte de destination
  • 222222222222 par l’ID de votre compte source
  • us-east2 par la région de votre groupe de journaux CloudWatch
  • us-east-2 par votre région Amazon Virtual Private Cloud (Amazon VPC) Flow Logs
  • -arn par les ARN des ressources

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Configurer le compte de destination

Procédez comme suit :

  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

    Remarque : Notez l’ARN du compartiment à partir de la sortie pour l’utiliser ultérieurement.

  2. Créez une stratégie d’approbation dotée des autorisations requises afin que Firehose puisse transmettre des données vers Amazon S3 :

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. Exécutez la commande ](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-role.html)create-role[ pour créer le rôle IAM, puis spécifiez la stratégie d’approbation :

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

    Remarque : Notez l’ARN du rôle à partir de la sortie à utiliser ultérieurement.

  4. Pour définir les actions que Firehose peut effectuer dans le compte de destination, utilisez l'éditeur JSON pour créer une stratégie d’autorisations :

    {
        "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. Exécutez la commande put-role-policy pour associer 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 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

    Remarque : Remplacez RoleARN et BucketARN par les ARN de votre rôle et de votre compartiment.
    Lorsque vous envoyez correctement un objet S3 à Firehose, un préfixe personnalisé est utilisé dans l'expression de l'espace de noms d’horodatage. Vous pouvez spécifier un préfixe supplémentaire au début du format d'heure (yyyy/MM/dd/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. Exécutez 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 confirmer que le flux est actif, vérifiez la sortie de la commande :

    {
      "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 : Notez l'ARN du flux à utiliser ultérieurement.

  8. Créez une stratégie d’approbation supplémentaire pour autoriser CloudWatch Logs à insérer des données dans le flux Firehose. Ajoutez les régions dans lesquelles les journaux sont transmis :

    {
      "Version": "2012-10-17",
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "logs.us-east-2.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringLike": {
            "aws:SourceArn": [
              "arn:aws:logs:us-east-2:sourceAccountId:*",
              "arn:aws:logs:us-east-2:recipientAccountId:*"
            ]
          }
        }
      }
    }
  9. Pour créer un rôle IAM supplémentaire afin de placer des données dans le flux Firehose et de spécifier le fichier de stratégie d’approbation, exécutez la commande create-role :

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

    Remarque : Notez l'ARN du rôle à utiliser ultérieurement.

  10. Créez une stratégie d'autorisations pour définir les actions que CloudWatch Logs peut effectuer sur le compte de destination. Incluez l'ARN du flux et l'ARN du rôle :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "firehose:ListDeliveryStreams",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "firehose:DescribeDeliveryStream",
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:111111111111:deliverystream/my-delivery-stream"
        }
    ]
}
  1. Pour associer la stratégie d'autorisations au rôle, exécutez la commande put-role-policy :
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. Pour créer une destination dans le compte de destination pour le compte source auquel envoyer les journaux, exécutez la commande put-destination :
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ù Firehose est pris en charge. La région dans laquelle vous créez la destination doit être identique à la région source du journal. 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"
    }
  ]
}
  1. Associez la stratégie d'accès à la destination CloudWatch :
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Pour vérifier la destination, exécutez la commande describe-destinations :
aws logs describe-destinations --region us-east-2

Configurer le compte source

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

Procédez comme suit :

  1. Créez une stratégie d’approbation pour accorder à Amazon VPC Flow Logs l'autorisation d'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. Exécutez la commande create-role et spécifiez la stratégie d’approbation :

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

    Remarque : Notez l’ARN du rôle à partir de la sortie à utiliser ultérieurement.

  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, exécutez la commande put-role-policy :

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. Pour configurer la destination des journaux de flux, exécutez la commande create-log-group pour créer un groupe de journaux CloudWatch :

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. Pour activer VPC Flow Logs, exécutez la commande create-flow-logs :

    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
  7. Pour abonner le groupe de journaux CloudWatch à Firehose dans le compte de destination, exécutez la commande put-subscription-filter :

    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

    Pour vérifier que les journaux sont publiés, examinez le compartiment S3 pour y trouver de nouveaux journaux.

Informations connexes

DeliveryStreamDescription

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois