Créer une destination - Amazon CloudWatch Logs

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.

Dans cet exemple, le compte du destinataire des données du journal porte l'ID de compte AWS  999999999999, tandis que l'expéditeur du compte AWS des données du journal porte l'ID 111111111111.

Cet exemple crée une destination au moyen d'un flux Kinesis appelé RecipientStream, ainsi qu'un rôle qui permet à CloudWatch Logs d'y écrire des données.

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. Dans le compte du destinataire, créez un flux de diffusion de destination dans Kinesis. À l'invite de commande, saisissez :

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. Patientez jusqu'à ce que le flux Kinesis devienne actif. Vous pouvez utiliser la commande aws kinesis describe-stream pour vérifier la propriété StreamDescription.StreamStatus. De plus, notez la valeur de StreamDescription.StreamARN, car vous la transmettrez ultérieurement à CloudWatch Logs :

    aws kinesis describe-stream --stream-name "RecipientStream" { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RecipientStream", "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "34028236692093846346337460743176EXAMPLE", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE" } } ] } }

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

  3. Créez le rôle IAM qui accorde à CloudWatch Logs l'autorisation de placer des données dans votre flux Kinesis. Vous devrez tout d'abord créer une stratégie d'approbation dans un fichier ~/TrustPolicyForCWL.json. Utilisez un éditeur de texte pour créer ce fichier de politique, n'utilisez pas la console IAM.

    Cette politique comprend une clé de contexte de condition globale aws:SourceArn qui spécifie le sourceAccountId pour aider à prévenir le problème de sécurité du député confus. Si vous ne connaissez pas encore l'ID du compte source lors du premier appel, nous vous recommandons de placer l'ARN de destination dans le champ ARN source. Dans les appels suivants, vous devez définir l'ARN source comme ARN source réel que vous avez recueilli lors du premier appel. Pour plus d'informations, consultez Prévention du député confus.

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.region.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Action": "sts:AssumeRole" } }
  4. Utilisez la commande aws iam create-role pour créer le rôle IAM, en spécifiant le fichier de politique d'approbation. Notez la valeur Role.Arn renvoyée, car elle sera également transmise ultérieurement à CloudWatch Logs :

    aws iam create-role \ --role-name CWLtoKinesisRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } }, "Principal": { "Service": "logs.region.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } }
  5. 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": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] }
  6. Associez la politique d'autorisations au rôle à l'aide de la commande aws iam put-role-policy :

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. Lorsque le flux Kinesis 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'associe aucune 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 nom DestinationArn qui est renvoyé dans la charge utile :

      aws logs put-destination \ --destination-name "testDestination" \ --target-arn "arn:aws:kinesis:region:999999999999:stream/RecipientStream" \ --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole" { "DestinationName" : "testDestination", "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole", "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination", "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream" }
    2. Une fois l'étape 7a terminée, dans le compte des données du journal du destinataire, associez une stratégie d'accès à la destination. Cette politique doit spécifier l'action logs:PutSubscriptionFilter et accorde l'autorisation au compte de l'expéditeur pour accéder à la destination.

      La politique accorde l'autorisation au compte AWS qui envoie des journaux. Vous pouvez spécifier uniquement ce compte dans la politique. Si le compte de l'expéditeur est membre d'une organisation, la politique peut également spécifier l'ID de l'organisation. De cette façon, vous pouvez créer une seule politique pour autoriser plusieurs comptes d'une organisation à envoyer des journaux à ce compte de destination.

      Utilisez un éditeur de texte pour créer un fichier nommé ~/AccessPolicy.json avec l'une des déclarations de politique suivantes.

      Ce premier exemple de politique autorise tous les comptes de l'organisation possédant un ID o-1234567890 à envoyer les journaux au compte du destinataire.

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination", "Condition": { "StringEquals" : { "aws:PrincipalOrgID" : ["o-1234567890"] } } } ] }

      Cet exemple suivant permet uniquement au compte des données du journal de l'expéditeur (111111111111) d'envoyer des journaux au compte du destinataire des données du journal.

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination" } ] }
    3. Associez la politique que vous avez créée à l'étape précédente à la destination.

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

      Cette stratégie d'accès permet aux utilisateurs du compte AWS avec l'ID 111111111111 d'appeler PutSubscriptionFilter sur la destination avec l'ARN arn:aws:logs:region:999999999999:destination:testDestination. Toute tentative effectuée par un autre utilisateur d'appeler PutSubscriptionFilter par rapport à cette destination sera rejetée.

      Pour valider les privilèges d'un utilisateur par rapport à une stratégie d'accès, consultez Utilisation du programme de validation de politiques dans le Guide de l'utilisateur IAM.

Lorsque vous avez terminé, si vous utilisez AWS Organizations pour vos autorisations entre comptes, suivez les étapes dans Étape 2 : (uniquement si vous utilisez une organisation) créer un rôle IAM. Si vous accordez des autorisations directement à l'autre compte au lieu d'utiliser des organisations, vous pouvez ignorer cette étape et passer à Créer un filtre d'abonnement.