步骤 2:创建目标 - Amazon CloudWatch 日志

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

步骤 2:创建目标

重要

此过程中的所有步骤都需要在日志数据接收者账户中完成。

创建目标后, CloudWatch Logs 会代表收件人账户向目标发送一条测试消息。当订阅筛选器稍后处于活动状态时,Logs 会代表源账户将 CloudWatch 日志事件发送到目标。

创建目标
  1. 等到你在中创建的 Firehose 直播第 1 步:创建 Firehose 传送流变为激活状态。您可以使用以下命令来检查StreamDescription。 StreamStatus财产。

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

    此外,还要注意DeliveryStreamDescription。 DeliveryStreamARNvalue,因为你需要在以后的步骤中使用它。此命令的示例输出:

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

    您的传输流可能需要一两分钟才会显示为活动状态。

  2. 当传送流处于活动状态时,创建IAM角色以授予 CloudWatch Logs 将数据放入您的 Firehose 流的权限。首先,你需要在文件 ~/ TrustPolicyFor CWL .js on 中创建信任策略。使用文本编辑器创建此策略。有关 CloudWatch 日志终端节点的更多信息,请参阅 Amazon CloudWatch Logs 终端节点和配额

    此策略包括指定 sourceAccountIdaws:SourceArn 全局条件上下文密钥,有助于避免出现混淆代理安全问题。如果您在第一次通话时还不知道来源账户 ID,我们建议您在来源ARN字段ARN中输入目的地。在随后的调用中,应将来源设置ARN为从第一次呼叫中收集到的实际来源ARN。有关更多信息,请参阅 混淆代理问题防范

    { "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. 使用 aw s iam create- role 命令创建IAM角色,指定您刚刚创建的信任策略文件。

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

    以下内容为示例输出。记下返回的 Role.Arn 值,因为您需要在后面的步骤中用到它。

    { "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. 创建权限策略以定义 CloudWatch 日志可以对您的账户执行哪些操作。首先,使用文本编辑器在文件 ~/ PermissionsFor CWL .js on 中创建权限策略:

    { "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
  5. 通过输入以下命令,将权限策略与角色关联:

    aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
  6. 在 Firehose 传输流处于活动状态并且您创建了IAM角色之后,您可以创建 CloudWatch 日志目标。

    1. 此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤。记下ARN有效载荷中返回的新目的地,因为您将在后面的步骤destination.arn中将其用作。

      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. 上一步骤完成后,在日志数据接收者账户 (222222222222) 中将访问策略与目标关联。此策略使得日志数据发送者账户(111111111111)可以仅访问日志数据接收者账户(222222222222)中的目标。您可以使用文本编辑器将此策略放入~/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. 这将创建一个策略,该策略定义了对目标具有写入权限的人。此策略必须指定logs:PutSubscriptionFilterlogs:PutAccountPolicy操作才能访问目标。跨账户用户将使用PutSubscriptionFilterPutAccountPolicy操作将日志事件发送到目标。

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