Etapa 2: Criar um destino - CloudWatch Registros da Amazon

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Etapa 2: Criar um destino

Importante

As etapas deste procedimento devem ser processadas na conta destinatária dos dados do log.

Quando o destino é criado, o CloudWatch Logs envia uma mensagem de teste para o destino em nome da conta do destinatário. Quando o filtro de assinatura estiver ativo posteriormente, o CloudWatch Logs envia eventos de log para o destino em nome da conta de origem.

Para criar um destino
  1. Aguarde até o fluxo do Firehose que você criou em Etapa 1: criar um fluxo de entrega do Firehose ficar ativo. Você pode usar o comando a seguir para verificar a propriedade StreamDescription.StreamStatus.

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

    Além disso, anote o valor de DeliveryStreamDescription.DeliveryStreamARN, pois será necessário utilizá-lo em uma etapa posterior. Exemplo de saída desse comando:

    { "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:::amzn-s3-demo-bucket", "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:::amzn-s3-demo-bucket", "BufferingHints": { "SizeInMBs": 5, "IntervalInSeconds": 300 }, "CompressionFormat": "UNCOMPRESSED", "EncryptionConfiguration": { "NoEncryptionConfig": "NoEncryption" }, "CloudWatchLoggingOptions": { "Enabled": false }, "S3BackupMode": "Disabled" } } ], "HasMoreDestinations": false } }

    Pode levar um ou dois minutos para seu fluxo de entrega ser exibido com estado ativo.

  2. Quando o fluxo de entrega estiver ativo, crie o perfil do IAM que concederá ao CloudWatch Logs permissão para colocar os dados em seu fluxo do Firehose. Primeiro, você precisará criar uma política de confiança em um arquivo ~/TrustPolicyForCWL.json. Use um editor de texto para criar esta política. Para obter mais informações sobre os endpoints do CloudWatch Logs, consulte Endpoints e cotas do Amazon CloudWatch Logs.

    Esta política inclui uma chave de contexto de condição global aws:SourceArn que especifica o sourceAccountId para evitar o problema de segurança confused deputy. Se você ainda não souber o ID da conta de origem na primeira chamada, recomendamos que você coloque o ARN de destino no campo ARN de origem. Nas chamadas subsequentes, você deve definir o ARN de origem como o ARN de origem real que você coletou da primeira chamada. Para ter mais informações, consulte Prevenção de ‘confused deputy’.

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } }
  3. Use o comando aws iam create-role para criar a função do IAM, especificando o arquivo de política de confiança que você acabou de criar.

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

    Este é um exemplo de saída. Anote o valor Role.Arn retornado, pois será necessário utilizá-lo em uma etapa posterior.

    { "Role": { "Path": "/", "RoleName": "CWLtoKinesisFirehoseRole", "RoleId": "AROAR3BXASEKYJYWF243H", "Arn": "arn:aws:iam::222222222222:role/CWLtoKinesisFirehoseRole", "CreateDate": "2023-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region:sourceAccountId:*", "arn:aws:logs:region:recipientAccountId:*" ] } } } } } }
  4. Crie uma política de permissões para definir quais ações o CloudWatch Logs poderá executar em sua conta. Primeiro, use um editor de texto para criar uma política de permissões em um arquivo ~/PermissionsForCWL.json:

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
  5. Associe a política de permissões com a função inserindo o seguinte comando:

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  6. Quando o fluxo de entrega do Firehose estiver no estado ativo e você tiver criado o perfil do IAM, será possível criar o destino do CloudWatch Logs.

    1. Esta etapa não associará uma política de acesso ao seu destino e só é a primeira etapa das duas concluirá uma criação de destino. Anote o ARN do novo destino que for retornado na carga útil, pois você usará isso como destination.arn em uma etapa posterior.

      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. Depois que a etapa anterior for concluída, na conta destinatária dos dados de log (222222222222), associe uma política de acesso ao destino. Essa política permite que a conta remetente dos dados de log (111111111111 conta) acesse o destino apenas na conta destinatária dos dados de log (222222222222). Você pode usar um editor de texto para colocar essa política no arquivo ~/AccessPolicy.json:

      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : ["logs:PutSubscriptionFilter","logs:PutAccountPolicy"], "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
    3. Isso cria uma política que define quem tem acesso de gravação ao destino. Essa política deve especificar as ações logs:PutSubscriptionFilter e logs:PutAccountPolicy para acessar o destino. Os usuários em contas diferentes usarão as ações PutSubscriptionFilter e PutAccountPolicy para enviar eventos de log ao destino.

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