本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 1:创建目标
重要
此过程中的所有步骤都需要在日志数据接收者账户中完成。
在本示例中,日志数据接收者账户的Amazon账户 ID 为 999999999999,而日志数据发送者Amazon账户 ID 为 111111111111。
该示例使用名为 RecipientStream 的 Kinesis Data Streams 流创建一个目标,并创建一个允许 CloudWatch Logs 将数据写入到该目标的角色。
创建目标时,CloudWatch Logs 将代表收件人账户向目标发送测试消息。当订阅筛选条件稍后处于活动状态时,CloudWatch Logs 会代表源账户向目标发送录入事件。
创建目标
-
在收件人账户中,在 Kinesis Data Streams 中创建目标流。在命令提示符下,输入:
aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
-
等到 流变为活动状态。您可使用 aws kinesis describe-stream 命令检查 StreamDescription.StreamStatus 属性。此外,请记下 StreamDescription.StreamARN 的值,因为稍后您需要将该值传递到 CloudWatch Logs:
aws kinesis describe-stream --stream-name "RecipientStream"
{ "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RecipientStream", "StreamARN": "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "34028236692093846346337460743176EXAMPLE", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE" } } ] } }
您的流可能需要一两分钟才会以活动状态显示。
-
创建 IAM 角色,该角色将授予 CloudWatch Logs 将数据放入流的权限。首先,您需要在文件 ~/TrustPolicyForCWL.json 中创建信任策略。使用文本编辑器创建此策略文件,请勿使用 IAM 控制台来创建。
此策略包括指定
sourceAccountId
的aws:SourceArn
全局条件上下文密钥,有助于避免出现混淆代理安全问题。如果您在第一次调用中还不知道源账户 ID,则建议您将目标 ARN 放在源 ARN 字段中。在随后的调用中,应将源 ARN 设置为从第一次调用中收集的实际源 ARN。有关更多信息,请参阅 混淆代理问题防范。{ "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:
region
:sourceAccountId
:*", "arn:aws:logs:region
:recipientAccountId
:*" ] } }, "Action": "sts:AssumeRole" } } -
使用 aws iam create-role 命令创建 IAM 角色,并指定信任策略文件。记下返回的 Role.Arn 值,因为该值稍后也将传递到 CloudWatch Logs:
aws iam create-role \ --role-name CWLtoKinesisRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json
{ "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Condition": { "StringLike": { "aws:SourceArn": [ "arn:aws:logs:
region
:sourceAccountId
:*", "arn:aws:logs:region
:recipientAccountId
:*" ] } }, "Principal": { "Service": "logs.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } } -
创建权限策略以定义 CloudWatch Logs 可对您的账户执行的操作。首先,使用文本编辑器在文件 ~/PermissionsForCWL.json 中创建权限策略:
{ "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:
region
:999999999999:stream/RecipientStream" } ] } -
使用 aws iam put-role-policy 命令将权限策略与角色关联:
aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
-
在流变为活动状态并且您已创建 IAM 角色后,您便可以创建 CloudWatch Logs 目标。
-
此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤。记下负载中返回的 DestinationArn:
aws logs put-destination \ --destination-name "testDestination" \ --target-arn "arn:aws:kinesis:
region
:999999999999:stream/RecipientStream" \ --role-arn "arn:aws:iam::999999999999:role/CWLtoKinesisRole"{ "DestinationName" : "testDestination", "RoleArn" : "arn:aws:iam::999999999999:role/CWLtoKinesisRole", "DestinationArn" : "arn:aws:logs:us-east-1:999999999999:destination:testDestination", "TargetArn" : "arn:aws:kinesis:us-east-1:999999999999:stream/RecipientStream" }
-
在步骤 7a 完成后,在日志数据接收者账户中将访问策略与目标关联。此策略必须指定 logs:PutSubscriptionFilter 操作并向发件人账户授予权限才能访问目标。
此策略向发送日志的 Amazon 账户授予权限。您可以在策略中仅指定这一个账户,如果发件人账户是企业的成员,则策略可以指定企业的企业 ID。这样,您只能创建策略,以允许企业中的多个账户向此目标账户发送日志。
使用文本编辑器创建名为
~/AccessPolicy.json
的文件,并包含下列策略语句之一。第一个示例策略允许企业中所有 ID 为
o-1234567890
的账户将日志发送到收件人账户。{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : "*", "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination", "Condition": { "StringEquals" : { "aws:PrincipalOrgID" : ["o-1234567890"] } } } ] }
下一个示例只允许日志数据发件人账户 (111111111111) 将日志发送到日志数据收件人账户。
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "111111111111" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:
region
:999999999999:destination:testDestination" } ] } -
将您在上一步中创建的策略附加到目标。
aws logs put-destination-policy \ --destination-name "testDestination" \ --access-policy file://~/AccessPolicy.json
此访问策略允许 ID 为 111111111111 的Amazon账户中的用户针对 ARN 为 arn:aws:logs:
region
:999999999999:destination:testDestination 的目标调用 PutSubscriptionFilter。任何其他用户针对此目标调用 PutSubscriptionFilter 的尝试都会被拒绝。要针对访问策略验证用户的权限,请参阅 IAM 用户指南中的使用策略验证程序。
-
完成后,如果您为跨账户权限使用的是 Amazon Organizations,请按照 步骤 2:(仅在使用企业时)创建 IAM 角色 中的步骤操作。如果您选择直接向另一个账户授予权限而不是使用 Organizations,则可以跳过该步骤然后继续执行 步骤 4:创建订阅筛选条件。