Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Wie kann ich CloudWatch Logs kontoübergreifend an Amazon Data Firehose mithilfe von Push übertragen?

Lesedauer: 6 Minute
0

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

Lösung

Um CloudWatch Logs an einen Firehose-Stream in einer anderen Region zu senden, muss die Region Firehose unterstützen

Ersetzen Sie in den Befehlen der Lösung die folgenden Werte durch Ihre Werte:

  • 111111111111 durch die ID Ihres Zielkontos
  • us-east-1 durch Ihre Firehose Region
  • us-west-2 durch Ihre Amazon Simple Storage Service (Amazon S3)-Bucket-Region
  • us-east-2 durch die Region Ihres Zielkontos
  • 222222222222 durch die ID Ihres Quellkontos
  • us-east2 durch die Region Ihrer CloudWatch-Protokollgruppe
  • us-east-2 durch Ihre Verlaufsprotokoll-Region der Amazon Virtual Private Cloud (Amazon VPC)
  • -arn durch die ARNs der Ressourcen

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, finden Sie weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stellen Sie außerdem sicher, dass Sie die neueste Version von AWS CLI verwenden.

Einrichten des Zielkontos

Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie einen Amazon-S3-Bucket:

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

    Hinweis: Notieren Sie sich den ARN des Buckets aus der Ausgabe, um ihn in einem späteren Schritt zu verwenden.

  2. Erstellen Sie eine Vertrauensrichtlinie, die über die erforderlichen Berechtigungen verfügt, damit Firehose Daten an Amazon S3 mithilfe von Push übertragen kann:

    {
      "Statement": {
        "Effect": "Allow",
        "Principal": {
          "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole",
        "Condition": {
          "StringEquals": {
            "sts:ExternalId": "111111111111"
          }
        }
      }
    }
  3. Führen Sie den Befehl create-role aus, um die IAM-Rolle zu erstellen, und geben Sie die Vertrauensrichtlinie an:

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

    Hinweis: Notieren Sie sich den ARN der Rolle aus der Ausgabe, um ihn in einem späteren Schritt zu verwenden.

  4. Um die Aktionen zu definieren, die Firehose im Zielkonto ausführen kann, verwenden Sie den JSON-Editor, um so eine Berechtigungsrichtlinie zu erstellen:

    {
        "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. Führen Sie den Befehl put-role-policy aus, um die Berechtigungsrichtlinie der IAM-Rolle zuzuordnen:

    aws iam put-role-policy --role-name FirehosetoS3Role --policy-name Permissions-Policy-For-Firehose --policy-document file://~/PermissionsForFirehose.json
  6. Erstellen Sie einen Bereitstellungs-Stream für 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

    Hinweis: Ersetzen Sie RoleARN und BucketARN durch Ihre Rollen- und Bucket-ARNs.
    Wenn Sie ein S3-Objekt an Firehose bereitstellen, wird ein benutzerdefiniertes Präfix im Ausdruck timestamp namespace (Zeitstempel-Namespace) verwendet. Sie können am Anfang des Zeitformats ein zusätzliches Präfix angeben (JJJJ/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 Eigenschaft DeliveryStreamDescription.DeliveryStreamStatus zu überprüfen:

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

    Um zu bestätigen, dass der Stream aktiv ist, überprüfen Sie die Ausgabe des Befehls:

    {
      "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: Notieren Sie sich den ARN des Steams, der in einem späteren Schritt verwendet werden soll.

  8. Erstellen Sie eine zusätzliche Vertrauensrichtlinie, um CloudWatch Logs die Berechtigung zu erteilen, Daten in den Firehose-Stream zu übertragen. Fügen Sie die Regionen hinzu, in die die Protokolle übertragen werden:

    {
      "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. Um eine zusätzliche IAM-Rolle zu erstellen, um so Daten in den Firehose-Stream einzufügen und die Vertrauensrichtliniendatei anzugeben, führen Sie den Befehl create-role aus:

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

    Hinweis: Notieren Sie sich den ARN der Rolle, der in einem späteren Schritt verwendet werden soll.

  10. Erstellen Sie eine Berechtigungsrichtlinie, um die Aktionen zu definieren, die CloudWatch Logs im Zielkonto ausführen kann. Fügen Sie den ARN des Streams und den ARN der Rolle ein:

{
    "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. Führen Sie den Befehl put-role-policy aus, um die Berechtigungsrichtlinie der Rolle zuzuordnen:
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  1. Führen Sie den Befehl put-destination aus, um im Zielkonto ein Ziel für das Quellkonto zu erstellen, an das Protokolle gesendet werden sollen:
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 Bereitstellungs-Stream in jeder Region erstellen, in der Firehose unterstützt wird. Die Region, in der Sie das Ziel erstellen, muss mit der Protokollquellregion identisch sein. Erstellen Sie eine Zugriffsrichtlinie für das 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"
    }
  ]
}
  1. Ordnen Sie die Zugriffsrichtlinie dem CloudWatch-Ziel zu:
aws logs put-destination-policy --destination-name "myDestination" --access-policy file://~/AccessPolicy.json --region us-east-2
  1. Führen Sie den Befehl describe-destinations aus, um das Ziel zu überprüfen:
aws logs describe-destinations --region us-east-2

Das Quellkonto einrichten

Hinweis: Um das Quellkonto einzurichten, müssen Sie der IAM-Administrator-Benutzer oder Root-Benutzer des Kontos sein.

Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie eine Vertrauensrichtlinie, um Amazon VPC Flow Logs die Berechtigung zu gewähren, Daten an die CloudWatch-Protokollgruppe zu senden:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "",
          "Effect": "Allow",
          "Principal": {
            "Service": "vpc-flow-logs.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
  2. Führen Sie den Befehl create-role aus, und geben Sie die Vertrauensrichtlinie an:

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

    Hinweis: Notieren Sie sich den ARN der Rolle aus der Ausgabe, um ihn in einem späteren Schritt zu verwenden.

  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 Befehl put-role-policy aus, um die Berechtigungsrichtlinie der IAM-Rolle zuzuordnen:

    aws iam put-role-policy --role-name PublishFlowLogs --policy-name Permissions-Policy-For-VPCFlowLogs --policy-document file://~/PermissionsForVPCFlowLogs.json
  5. Um das Ziel für die Flow-Protokolle zu konfigurieren, führen Sie den Befehl create-log-group aus, um eine CloudWatch-Protokollgruppe zu erstellen:

    aws logs create-log-group --log-group-name vpc-flow-logs --region us-east-2
  6. Führen Sie den Befehl create-flow-logs 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
  7. Um die CloudWatch-Protokollgruppe für Firehose im Zielkonto zu abonnieren, führen Sie den Befehl put-subscription-filter aus:

    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

    Überprüfen Sie den S3-Bucket auf neue Protokolle, um sich zu vergewissern, dass die Protokolle veröffentlicht wurden.

Ähnliche Informationen

DeliveryStreamDescription

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Monaten