本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:创建目标
重要
此过程中的所有步骤都需要在日志数据接收者账户中完成。
创建目标后, CloudWatch Logs 会代表收件人账户向目标发送一条测试消息。当订阅筛选器稍后处于活动状态时,Logs 会代表源账户将 CloudWatch 日志事件发送到目标。
创建目标
-
等到你在中创建的 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 } }
您的传输流可能需要一两分钟才会显示为活动状态。
-
当传送流处于活动状态时,创建IAM角色以授予 CloudWatch Logs 将数据放入您的 Firehose 流的权限。首先,你需要在文件 ~/ TrustPolicyFor CWL .js on 中创建信任策略。使用文本编辑器创建此策略。有关 CloudWatch 日志终端节点的更多信息,请参阅 Amazon CloudWatch Logs 终端节点和配额。
此策略包括指定
sourceAccountId
的aws: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
:*" ] } } } } -
使用 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
:*" ] } } } } } } -
创建权限策略以定义 CloudWatch 日志可以对您的账户执行哪些操作。首先,使用文本编辑器在文件 ~/ PermissionsFor CWL .js on 中创建权限策略:
{ "Statement":[ { "Effect":"Allow", "Action":["firehose:*"], "Resource":["arn:aws:firehose:region:222222222222:*"] } ] }
-
通过输入以下命令,将权限策略与角色关联:
aws iam put-role-policy --role-name CWLtoKinesisFirehoseRole --policy-name Permissions-Policy-For-CWL --policy-document file://~/PermissionsForCWL.json
-
在 Firehose 传输流处于活动状态并且您创建了IAM角色之后,您可以创建 CloudWatch 日志目标。
-
此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤。记下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"} }
-
上一步骤完成后,在日志数据接收者账户 (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" } ] }
-
这将创建一个策略,该策略定义了对目标具有写入权限的人。此策略必须指定
logs:PutSubscriptionFilter
和logs:PutAccountPolicy
操作才能访问目标。跨账户用户将使用PutSubscriptionFilter
和PutAccountPolicy
操作将日志事件发送到目标。aws logs put-destination-policy \ --destination-name "testFirehoseDestination" \ --access-policy file://~/AccessPolicy.json
-