Étape 2 : Créer une destination - Amazon CloudWatch Logs

Étape 2 : Créer une destination

Important

Toutes les étapes de cette procédure doivent être réalisées dans le compte du destinataire des données du journal.

Lorsque la destination est créée, CloudWatch Logs envoie un message de test à la destination au nom du compte du destinataire. Lorsque le filtre d'abonnement est actif ultérieurement, CloudWatch Logs envoie des événements du journal à la destination au nom du compte source.

Pour créer une destination

  1. Attendez que le flux Kinesis Data Firehose que vous avez créé dans Étape 1 : Créer un flux de diffusion Kinesis Data Firehose devienne actif. Vous pouvez utiliser la commande suivante pour vérifier la propriété StreamDescription.StreamStatus.

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"

    Par ailleurs, notez la valeur de DeliveryStreamDescription.DeliveryStreamARN, car vous devrez l'utiliser dans une étape ultérieure. Exemple de résultat de cette commande :

    { "DeliveryStreamDescription": { "DeliveryStreamName": "my-delivery-stream", "DeliveryStreamARN": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "DeliveryStreamStatus": "ACTIVE", "DeliveryStreamEncryptionConfiguration": { "Status": "DISABLED" }, "DeliveryStreamType": "DirectPut", "VersionId": "1", "CreateTimestamp": "2021-02-01T23:59:15.567000-08:00", "Destinations": [ { "DestinationId": "destinationId-000000000001", "S3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::firehose-test-bucket1", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false } }, "ExtendedS3DestinationDescription": { "RoleARN": "arn:aws:iam::222222222222:role/FirehosetoS3Role", "BucketARN": "arn:aws:s3:::firehose-test-bucket1", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false }, "S3BackupMode": "Disabled" } } ], "HasMoreDestinations": false } }

    Votre flux de diffusion peut prendre une ou deux minutes avant d'apparaître avec le statut actif.

  2. Lorsque le flux de diffusion est actif, créez le rôle IAM qui accorde à CloudWatch Logs l'autorisation de placer des données dans votre flux Kinesis Data Firehose. Vous devrez tout d'abord créer une politique d'approbation dans un fichier ~/TrustPolicyForCWL.json. Utilisez un éditeur de texte créer cette politique. Pour plus d'informations sur les points de terminaison CloudWatch Logs, consultez la section Points de terminaison et quotas Amazon CloudWatch Logs.

    Cette politique comprend une clé de contexte de condition globale aws:SourceArn qui spécifie sourceAccountId pour aider à prévenir le problème de sécurité de député confus. Si vous ne connaissez pas encore l'ID du compte source, nous vous recommandons de remplacer arn:aws:logs:region:sourceAccountId:* dans la politique suivante par arn:aws:logs:region:*:*. Pour plus d’informations, consultez la section Prévention du député confus.

    { "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:*" ] } } } }
  3. Utilisez la commande aws iam create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation que vous venez de créer.

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

    Voici un exemple de sortie. Prenez note de la valeur Role.Arn retournée, car vous devrez l'utiliser dans une étape ultérieure.

    { "Role": { "Path": "/", "RoleName": "CWLtoKinesisFirehoseRole", "RoleId": "AROAR3BXASEKYJYWF243H", "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "CreateDate": "2021-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "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:*" ] } } } } } }
  4. Créez une politique d'autorisations pour définir les actions permises à CloudWatch Logs sur votre compte. Tout d'abord, utilisez un éditeur de texte pour créer une politique d'autorisations dans un fichier (par exemple, ~/PermissionsForCWL.json) :

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
  5. Associez la politique d'autorisations au rôle en entrant la commande suivante :

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  6. Lorsque le flux de diffusion Kinesis Data Firehose est passé en statut actif et que vous avez créé le rôle IAM, vous pouvez créer la destination CloudWatch Logs.

    1. Cette étape n'associera pas de stratégie d'accès à votre destination. Il s'agit uniquement de la première de deux étapes pour créer une destination. Notez le destination.arn qui est renvoyé dans la charge utile :

      aws logs put-destination \ --destination-name "testFirehoseDestination" \ --target-arn "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream" \ --role-arn "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole" { "destination": { "destinationName": "testFirehoseDestination", "targetArn": "arn:aws:firehose:us-east-1:222222222222:deliverystream/my-delivery-stream", "roleArn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "arn": "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination"} }
    2. Une fois l'étape précédente terminée, dans le compte du destinataire des données du journal (222222222222), associez une stratégie d’accès à la destination. Cette politique permet au compte de l'expéditeur des données du journal (111111111111) d'accéder à la destination dans le compte du destinataire des données du journal (222222222222). Vous pouvez utiliser un éditeur de texte pour placer cette politique dans le fichier ~/AccessPolicy.json :

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
    3. Cela crée une stratégie définissant qui a accès en écriture à la destination. Cette stratégie doit spécifier l'action logs:PutSubscriptionFilter pour accéder à la destination. Les utilisateurs entre comptes emploieront l'action PutSubscriptionFilter pour envoyer des événements du journal à la destination :

      aws logs put-destination-policy \ --destination-name "testFirehoseDestination" \ --access-policy file://~/AccessPolicy.json