Salta al contenuto

Come posso inviare i log di CloudWatch tra account ad Amazon Data Firehose?

7 minuti di lettura
0

Voglio trasmettere i file di log di Amazon CloudWatch da Amazon Kinesis Data Firehose a un altro account in una regione AWS diversa.

Risoluzione

Per inviare i log di CloudWatch a un flusso Firehose in una regione diversa, la regione deve supportare Firehose.

Nei comandi della risoluzione, sostituisci i valori seguenti con i tuoi valori:

  • 111111111111 con l'ID del tuo account di destinazione
  • us-east-1 con la tua regione Firehose
  • us-west-2 con la regione del tuo bucket Amazon Simple Storage Service (Amazon S3)
  • us-east-2 con la regione del tuo account di destinazione
  • 222222222222 con l'ID del tuo account di origine
  • us-east2 con la regione del tuo gruppo di log di CloudWatch
  • us-east-2 con la regione dei tuoi log di flusso di Amazon Virtual Private Cloud (Amazon VPC)
  • \ -arn con gli ARN delle risorse

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Troubleshooting errors for the AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Configura l'account di destinazione

Completa i passaggi seguenti:

  1. Crea un bucket Amazon S3:

    aws s3api create-bucket --bucket my-bucket --create-bucket-configuration LocationConstraint=us-west-2 --region us-west-2

    Nota: prendi nota dell'ARN del bucket dall'output per utilizzarlo in un passaggio successivo.

  2. Crea una policy di attendibilità con le autorizzazioni necessarie per consentire a Firehose di inviare dati ad Amazon S3:

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. Esegui il comando create-role per creare il ruolo IAM e specificare la policy di attendibilità:

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

    Nota: prendi nota dell'ARN del ruolo dall'output per utilizzarlo in un passaggio successivo.

  4. Per definire le azioni che Firehose può eseguire nell'account di destinazione, usa l'editor JSON per creare una policy di autorizzazione:

    {
        "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. Esegui il comandoput-role-policy per associare la policy di autorizzazione al ruolo IAM:

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. Crea un flusso di distribuzione di destinazione per 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

    Nota: sostituisci RoleARN e BucketARN con gli ARN del tuo ruolo e del tuo bucket.
    Quando consegni un oggetto S3 a Firehose, viene utilizzato un prefisso personalizzato nell'espressione dello spazio dei nomi timestamp. Puoi specificare un prefisso aggiuntivo all'inizio del formato di data/ora (yyyy/MM/dd/HH/). Se il prefisso termina con una barra (/), verrà visualizzato come cartella nel bucket S3.

  7. Per controllare la proprietà DeliveryStreamDescription.DeliveryStreamStatus utilizza il comando describe-delivery-stream:

    aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream" --region us-east-1

    Per verificare che il flusso sia attivo, controlla l'output del comando:

    {
      "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"
            }
          }
        ]
      }
    }

    Nota: prendi nota dell'ARN del flusso per utilizzarlo in un passaggio successivo.

  8. Crea una policy di attendibilità aggiuntiva per concedere a CloudWatch Logs l'autorizzazione a inserire dati nel flusso Firehose. Aggiungi le regioni a cui vengono inviati i log:

    {
      "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. Per creare un ruolo IAM aggiuntivo per inserire i dati nel flusso Firehose e specificare il file della policy di attendibilità, esegui il comando create-role:

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

    Nota: prendi nota dell'ARN del ruolo per utilizzarlo in un passaggio successivo.

  10. Crea una policy di autorizzazione per definire le azioni che CloudWatch Logs può eseguire nell'account di destinazione. Includi l'ARN del flusso e l'ARN del ruolo:

{
    "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. Per associare la policy di autorizzazione al ruolo, usa il comandoput-role-policy:
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. Per creare nell'account di destinazione una destinazione a cui l'account di origine invierà i log, esegui il comando 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

Nota: puoi creare una destinazione per il flusso di distribuzione in qualsiasi regione in cui è supportato Firehose. La regione in cui crei la destinazione deve corrispondere alla regione di origine del log. Crea una policy di accesso per la destinazione 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. Associa la policy di accesso alla destinazione CloudWatch:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Per verificare la destinazione, esegui il comando describe-destinations:
aws logs describe-destinations --region us-east-2

Configura l'account di origine

Nota: per configurare l'account di origine, devi essere l'utente root o l'utente amministratore IAM dell'account.

Completa i passaggi seguenti:

  1. Crea una policy di attendibilità per concedere ai log di flusso di Amazon VPC l'autorizzazione a inviare dati al gruppo di log di CloudWatch:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. Esegui il comando create-role e specifica la policy di attendibilità:

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

    Nota: prendi nota dell'ARN del ruolo dall'output per utilizzarlo in un passaggio successivo.

  3. Per definire le azioni che i log di flusso del VPC possono eseguire nell'account di origine, crea una policy di autorizzazione:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "logs:CreateLogGroup",
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogGroups",
            "logs:DescribeLogStreams"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
  4. Per associare la policy di autorizzazione al ruolo IAM, usa il comandoput-role-policy:

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. Per configurare la destinazione dei log di flusso, esegui il comando create-log-group per creare un gruppo di log di CloudWatch:

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. Per attivare i log di flusso del VPC, esegui il comando 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. Per effettuare la sottoscrizione del gruppo di log di CloudWatch a Firehose nell'account di destinazione, esegui il comando 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

    Per verificare che i log siano stati pubblicati, controlla che nel bucket S3 siano presenti nuovi log.

Informazioni correlate

DeliveryStreamDescription

AWS UFFICIALEAggiornata un anno fa