Wie kann ich Amazon CloudWatch Logs kontoübergreifend an Kinesis Data Firehose übertragen?

Lesedauer: 7 Minute
0

Ich möchte Amazon CloudWatch Logs von Amazon Kinesis Data Firehose auf ein anderes Konto in einer anderen AWS-Region streamen.

Kurzbeschreibung

Um Amazon CloudWatch Logs an einen Kinesis Data Firehose-Stream in einer anderen Region zu senden, muss die Region Kinesis Data Firehose unterstützen. Stellen Sie daher sicher, dass Ihre Region Kinesis Data Firehose unterstützt.

Gehen Sie wie folgt vor, um konto- und regionsübergreifendes Streaming mit Kinesis Data Firehose in einer unterstützten Region einzurichten:

1.Erstellen Sie im Zielkonto einen Amazon Simple Storage Service (Amazon S3) -Bucket. Erstellen Sie eine AWS-Rolle für Identity and Access Management (IAM). Fügen Sie dann die erforderliche Genehmigung hinzu, damit Kinesis Data Firehose Daten an Amazon S3 übertragen kann.

2.Erstellen Sie im Zielkonto ein Ziel für Kinesis Data Firehose. Erstellen Sie eine IAM-Rolle für den Amazon CloudWatch Logs-Dienst, um Daten an den Kinesis Data Firehose-Dienst zu übertragen. Erstellen Sie dann einen Zielübermittlungsstream, in den die Protokolle übertragen werden.

3.Aktivieren Sie VPC Flow Logs und übertragen Sie die Protokolle an Amazon CloudWatch für das Quellkonto.

4.Erstellen Sie im Quellkonto einen Abonnementfilter, der auf das Zielkonto verweist.

5.Überprüfen Sie den Ablauf der Protokollereignisse im S3-Bucket im Zielkonto.

Behebung

**Hinweis:**In dieser Auflösung werden die folgenden Beispielwerte verwendet, die Sie durch Ihre eigenen Werte ersetzen müssen:

  • Zielkonto: 111111111111
  • Kinesis Data Firehose Region: us-east-1
  • S3-Bucket-Region: us-west-2
  • Zielregion (Empfangen von Protokollen vom Quellkonto): us-east-2
  • Quellkonto: 222222222222
  • Amazon CloudWatch-Protokollgruppe Region: us-east2
  • Region der VPC-Flussprotokolle: us-east-2

Richten Sie das Zielkonto ein

1.Erstellen Sie einen S3-Bucket:

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

Die Standortbeschränkung gibt an, dass der Bucket in der Region us-west-2 erstellt wird.

2.Erstellen Sie die IAM-Rolle und die Vertrauensrichtlinie, die Kinesis Data Firehose die erforderlichen Berechtigungen gewähren:

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

Die Berechtigungseinstellungen müssen es Kinesis Data Firehose ermöglichen, Daten in den von Ihnen erstellten S3-Bucket zu legen. Ersetzen Sie 111111111111 durch Ihre AWS-Konto-ID.

3.Erstellen Sie die IAM-Rolle und geben Sie die Trust-Policy-Datei an:

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

Hinweis: Sie müssen den Wert Role_Arn in einem späteren Schritt verwenden.

4.Erstellen Sie eine Berechtigungsrichtlinie in einer JSON-Datei, um die Aktionen zu definieren, die Kinesis Data Firehose im Zielkonto ausführen kann:

{
  "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.Ordnen Sie die Berechtigungsrichtlinie der IAM-Rolle zu:

aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json

6.Erstellen Sie einen Ziel-Lieferstream für 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

Ersetzen Sie RoleARN und BucketARN durch die Rolle und den Bucket Amazon Resource Names (ARNs), die Sie erstellt haben.

Hinweis: Wenn Sie erfolgreich ein S3-Objekt an Kinesis Data Firehose liefern, wird ein benutzerdefiniertes Präfix im Timestamp-Namespace-Ausdruck verwendet. Sie können vor dem Zeitformatpräfix ein zusätzliches Präfix hinzufügen und angeben (yyyy/MM/dd/HH/). Wenn das Präfix mit einem Schrägstrich (/) endet, wird es als Ordner im S3-Bucket angezeigt.

7.Verwenden Sie den Befehl describe-delivery-stream, um die DeliveryStreamDescription.DeliveryStreamStatus-Eigenschaft zu überprüfen:

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

Um zu überprüfen, ob der Stream aktiv ist, überprüfen Sie die Befehlsausgabe 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"
        }
      }
    ]
  }
}

Hinweis: Sie müssen den Wert DeliveryStreamDescription.DeliveryStreamARN in einem späteren Schritt verwenden.

8.Erstellen Sie die IAM-Rolle und die Vertrauensrichtlinie, die CloudWatch Logs die Berechtigung erteilen, Daten in den Kinesis Data Firehose-Stream zu übertragen. Stellen Sie sicher, dass Sie die Regionen hinzufügen, in die die Logs übertragen werden:

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

9.Verwenden Sie den Befehl create-role, um die IAM-Rolle zu erstellen und die Trust-Policy-Datei anzugeben:

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

Hinweis: Sie müssen den zurückgegebenen Wert Role_Arn in einem späteren Schritt verwenden.

10.Erstellen Sie eine Berechtigungsrichtlinie, um die Aktionen zu definieren, die CloudWatch Logs im Zielkonto ausführen kann:

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

Verwenden Sie den Wert** DeliveryStreamDescription.DeliveryStreamArn** aus Schritt 7 und den Wert Role_Arnaus Schritt 9.

11.Ordnen Sie der Rolle die Berechtigungsrichtlinie mithilfe des Befehls put-role-policy zu:

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

12.Erstellen Sie ein Ziel im Zielkonto mithilfe des API-Aufrufs put-destination. Dies ist das Ziel, an das das Quellkonto alle Protokolle sendet:

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

Hinweis: Sie können ein Ziel für den Delivery Stream in jeder Region erstellen, in der Kinesis Data Firehose unterstützt wird. Die Region, in der Sie das Ziel erstellen, muss mit der Protokollquellregion identisch sein.

13.Erstellen Sie eine Zugriffsrichtlinie für das Amazon CloudWatch-Ziel:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "222222222222"
      },
      "Action": "logs:PutSubscriptionFilter",
      "Resource": "arn:aws:logs:us-east-2:111111111111:destination:myDestination"
    }
  ]
}

Ersetzen Sie 222222222222 durch das AWS-Quellkonto, in dem sich die von Ihnen erstellten Amazon Virtual Private Cloud (Amazon VPC) -Protokolle befinden.

14.Ordnen Sie die Zugriffsrichtlinie dem Amazon CloudWatch-Ziel zu:

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

15.Führen Sie den folgenden Befehl aus, um das Ziel zu überprüfen:

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

Das Quellkonto einrichten

**Hinweis:**Sie müssen der IAM-Admin-Benutzer oder Root-Benutzer des Quellkontos sein.

1.Erstellen Sie eine IAM-Rolle und eine Vertrauensrichtlinie, um VPC Flow Logs die Berechtigungen zum Senden von Daten an die CloudWatch Logs-Protokollgruppe zu gewähren:

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

2.Verwenden Sie den folgenden Befehl, um die IAM-Rolle zu erstellen und die von Ihnen erstellte Trust-Policy-Datei anzugeben:

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

**Hinweis:**Sie verwenden den zurückgegebenen ARN-Wert, der in einem späteren Schritt an VPC Flow Logs weitergegeben wird.

3.Erstellen Sie eine Berechtigungsrichtlinie, um die Aktionen zu definieren, die VPC Flow Logs im Quellkonto ausführen kann:

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

4.Führen Sie den folgenden Befehl aus, um die Berechtigungsrichtlinie mit der IAM-Rolle zu verknüpfen:

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

5.Erstellen Sie eine CloudWatch Logs-Protokollgruppe, um das Ziel für die VPC Flow Logs zu konfigurieren:

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

6.Führen Sie den folgenden Befehl aus, um VPC Flow Logs zu aktivieren:

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

Hinweis: Ersetzen Sie die --resource-ids und --deliver-logs-permission-arn Platzhalterwerte mit Ihrer VPC-ID und VPC-Flow-Logs-Rolle.

7.Abonnieren Sie die CloudWatch Logs-Protokollgruppe für Kinesis Data Firehose im Zielkonto:

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

Aktualisieren Sie den --destination ARN-Wert und ersetzen Sie „111111111111“ durch die Zielkontonummer.

8.Überprüfen Sie den S3-Bucket, um zu bestätigen, dass die Protokolle veröffentlicht wurden.

Weitere Informationen

DeliveryStreamDescription

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr