Come posso trasferire i file di log Amazon CloudWatch a Kinesis 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.

Breve descrizione

Per inviare i log di Amazon CloudWatch a uno stream Kinesis Data Firehose in una regione diversa, la regione deve supportare Kinesis Data Firehose. Pertanto, assicurati che la tua regione supporti Kinesis Data Firehose.

Per stabilire lo streaming tra account e regioni utilizzando Kinesis Data Firehose in una regione supportata, procedi come segue:

1.    Crea un bucket Amazon Simple Storage Service (Amazon S3) nell'account di destinazione. Crea un ruolo AWS Identity and Access Management (IAM). Quindi, allega l'autorizzazione richiesta a Kinesis Data Firehose per inviare i dati ad Amazon S3.

2.    Crea una destinazione per Kinesis Data Firehose nell'account di destinazione. Crea un ruolo IAM per il servizio Amazon CloudWatch Logs per inviare i dati al servizio Kinesis Data Firehose. Quindi, crea un flusso di consegna di destinazione a cui verranno inviati i log.

3.    Attiva i registri di flusso VPC e invia i log ad Amazon CloudWatch per l'account di origine.

4.    Crea un filtro di abbonamento nell'account di origine che rimandi all'account di destinazione.

5.    Convalida il flusso degli eventi di log nel bucket S3 nell'account di destinazione.

Risoluzione

**Nota:**Questa risoluzione utilizza i seguenti valori di esempio che è necessario sostituire con valori personalizzati:

  • Account di destinazione: 111111111111
  • Regione Kinesis Data Firehose:** us-east-1**
  • Bucket S3 Regione:** us-west-2**
  • Regione di destinazione (ricezione dei log dall'account di origine):** us-east-2**
  • Account di origine: 222222222222
  • Regione del gruppo di log Amazon CloudWatch:** us-east2**
  • Regione dei registri di flusso VPC:** us-east-2**

Configura l'account di destinazione

1.    Crea un bucket S3:

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

Il vincolo di posizione indica che il bucket verrà creato nella regione us-west-2.

2.    Crea il ruolo IAM e la policy di attendibilità che concede a Kinesis Data Firehose le autorizzazioni necessarie:

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": "firehose.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "StringEquals": {
        "sts:ExternalId": "111111111111"
      }
    }
  }
}

Le impostazioni delle autorizzazioni devono consentire a Kinesis Data Firehose di inserire i dati nel bucket S3 che hai creato. Sostituisci** 111111111111** con l'ID del tuo account AWS.

3.    Crea il ruolo IAM e specifica il file della policy di attendibilità :

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

Nota:È necessario utilizzare il valore Role\ _Arn in un passaggio successivo.

4.    Crea una politica di autorizzazioni in un file JSON per definire le azioni che Kinesis Data Firehose può eseguire nell'account di destinazione:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:GetBucketLocation",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads",
        "s3:PutObjectAcl",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::my-bucket",
        "arn:aws:s3:::my-bucket/*"
      ]
    }
  ]
}

5.    Associa la politica delle autorizzazioni 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 consegna di destinazione per Kinesis Data 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

Sostituisci** RoleArn** e** BucketArn** con il ruolo e il bucket Amazon Resource Names (ARN) che hai creato.

Nota: Quando si consegna correttamente un oggetto S3 a Kinesis Data Firehose, viene utilizzato un prefisso personalizzato nell’ espressione dello spazio dei nomi timestamp. È possibile aggiungere e specificare un prefisso aggiuntivo all'inizio del prefisso del formato dell'ora (aaaa/mm/gg/hh/). Se il prefisso termina con una barra (/), viene visualizzato come cartella nel bucket S3.

7.Utilizza il](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/firehose/describe-delivery-stream.html) comando[ describe-delivery-stream per controllare la** proprietà** DeliveryStreamDescription.deliveryStreamStatus:

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

Per confermare che lo stream è attivo, controlla l'output del** comando** describe-delivery-stream:

{
  "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: Utilizza il valore DeliveryStreamDescription.DeliveryStreamARN in un passaggio successivo.

8.Crea il ruolo IAM e la policy di attendibilità che concede a CloudWatch Logs l'autorizzazione a inserire i dati nello stream Kinesis Data Firehose. Assicurati di aggiungere le regioni a cui vengono inviati i log:

{
  "Statement": {
    "Effect": "Allow",
    "Principal": {
      "Service": [
        "logs.us-east-1.amazonaws.com",
        "logs.us-east-2.amazonaws.com"
      ]
    },
    "Action": "sts:AssumeRole"
  }
}

9.    Per creare il ruolo IAM e specificare il file della policy di attendibilità, usa il comando create-role:

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

Nota:Utilizza il valore Role\ _Arn restituito in un passaggio successivo.

10.    Crea una politica di autorizzazioni per definire le azioni che CloudWatch Logs può eseguire nell'account di destinazione:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "firehose:*"
      ],
      "Resource": [
        "arn:aws:firehose:us-east-1:111111111111:*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": [
        "arn:aws:iam::111111111111:role/CWLtoKinesisFirehoseRole"
      ]
    }
  ]
}

Utilizza il valore** DeliveryStreamDescription.DeliveryStreamArn** del passaggio 7 e il valore** Role\ _Arn** del passaggio 9.

11.Associa la politica delle autorizzazioni al ruolo usando il comando put-role-policy:

aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json

12.Crea una destinazione nell'account di destinazione utilizzando la chiamata API put-destination. Questa è la destinazione a cui l'account di origine invia tutti i registri:

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:**È possibile creare una destinazione per il flusso di distribuzione in qualsiasi regione in cui è supportato Kinesis Data Firehose. La regione in cui si crea la destinazione deve essere la stessa della regione di origine del registro.

13.Crea una policy di accesso per la destinazione 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"
    }
  ]
}

Sostituisci** 222222222222** con l'account di origine AWS in cui si trovano i log di Amazon Virtual Private Cloud (Amazon VPC) che hai creato.

14.Associa la politica di accesso alla destinazione Amazon CloudWatch:

aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2

15.Per verificare la destinazione, esegui il seguente comando:

aws logs describe-destinations --region us-east-2

Configurazione dell'account di origine

**Nota:**Devi essere l'utente amministratore IAM o l'utente root dell'account di origine.

1.    Crea un ruolo IAM e una policy di attendibilità per concedere a VPC Flow Logs le autorizzazioni necessarie ad inviare i dati al gruppo di log CloudWatch Logs:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "vpc-flow-logs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

2.Per creare il ruolo IAM e specificare il file della policy di attendibilità che hai creato, usa il seguente comando:

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

**Nota:**Utilizzerai il valore ARN restituito da trasmettere a VPC Flow Logs in un passaggio successivo.

3.Crea una politica di autorizzazioni per definire le azioni che VPC Flow Logs può eseguire nell'account di origine:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogGroups",
        "logs:DescribeLogStreams"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

4.Per associare la politica delle autorizzazioni al ruolo IAM, esegui il seguente comando:

aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json

5.Crea un gruppo di log CloudWatch Logs per configurare la destinazione per i log di flusso VPC:

aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2

6.Per attivare i registri di flusso VPC, esegui il seguente comando:

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

Nota:Sostituisci i valori segnaposto\ --resource-ids e** --deliver-logs-permission-arn** con il tuo ID VPC e il ruolo VPC Flow Logs.

7.Sottoscrivi il gruppo di log CloudWatch Logs a Kinesis Data Firehose nell'account di destinazione:

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

Aggiorna il valore ARN**\ --destination** e sostituisci "111111111111" con il numero dell’account di destinazione.

8.Controlla il bucket S3 per confermare che i registri siano stati pubblicati.

Informazioni correlate

Descrizione del flusso di consegna

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa