本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:创建目标
重要
此过程中的所有步骤都需要在日志数据接收者账户中完成。
创建目标时,CloudWatch Logs 将代表收件人账户向目标发送测试消息。当订阅筛选条件稍后处于活动状态时,CloudWatch Logs 会代表源账户向目标发送录入事件。
创建目标
-
请等待,直至您在 步骤 1:创建 Firehose 传输流 中创建的 Firehose 流变为活动状态。您可使用以下命令检查 StreamDescription.StreamStatus 属性。
aws firehose describe-delivery-stream --delivery-stream-name "my-delivery-stream"
此外,请记下 DeliveryStreamDescription.DeliveryStreamARN 值,因为后面的步骤中将需要用到它。此命令的示例输出:
{ "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 流的权限。首先,您需要在文件 ~/TrustPolicyForCWL.json 中创建信任策略。使用文本编辑器创建此策略。有关 CloudWatch Logs 端点的更多信息,请参阅 Amazon CloudWatch Logs 端点和配额。
此策略包括指定
sourceAccountId
的aws:SourceArn
全局条件上下文密钥,有助于避免出现混淆代理安全问题。如果您在第一次调用中还不知道源账户 ID,则建议您将目标 ARN 放在源 ARN 字段中。在随后的调用中,应将源 ARN 设置为从第一次调用中收集的实际源 ARN。有关更多信息,请参阅 混淆代理问题防范。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.
region
.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region
:sourceAccountId
:*", "arn:aws:logs:region
:recipientAccountId
:*" ] } } } } -
使用 aws 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": "2021-02-02T08:10:43+00:00", "AssumeRolePolicyDocument": { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.
region
.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:region
:sourceAccountId
:*", "arn:aws:logs:region
:recipientAccountId
:*" ] } } } } } } -
创建权限策略以定义 CloudWatch Logs 可对您的账户执行的操作。首先,使用文本编辑器在文件 ~/PermissionsForCWL.json 中创建权限策略:
{ "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 Logs 目标。
-
此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤。记下有效负载中返回的新目标的 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", "Resource" : "arn:aws:logs:us-east-1:222222222222:destination:testFirehoseDestination" } ] }
-
这将创建一个策略,该策略定义了对目标具有写入权限的人。此策略必须指定 logs:PutSubscriptionFilter 操作才能访问目标。跨账户用户将使用 PutSubscriptionFilter 操作向目标发送日志事件:
aws logs put-destination-policy \ --destination-name "testFirehoseDestination" \ --access-policy file://~/AccessPolicy.json
-