步骤 1:创建目标 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

步骤 1:创建目标

重要

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

在本示例中,日志数据接收者帐户的 Amazon 帐户 ID 为 999999999999,而日志数据发送者 Amazon 帐户 ID 为 111111111111。

此示例使用 RecipientStream名为的 Kinesis Data Streams 流创建一个目标,以及一个 CloudWatch 允许日志向其写入数据的角色。

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

创建目标
  1. 在收件人账户中,在 Kinesis Data Streams 中创建目标流。在命令提示符下,输入:

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. 等到 流变为活动状态。你可以使用 a ws kinesis describe-stream 命令来检查。StreamDescription StreamStatus财产。此外,请记下 StreamDescription.streamArn 的值,因为您稍后会将其传递给 Logs: CloudWatch

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

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

  3. 创建 IAM 角色以授予 CloudWatch Logs 将数据放入您的直播的权限。首先,你需要在文件 ~/ TrustPolicyFor cwl .json 中创建信任策略。使用文本编辑器创建此策略文件,请勿使用 IAM 控制台来创建。

    此策略包括指定 sourceAccountIdaws: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" } }
  4. 使用 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" } }
  5. 创建权限策略以定义 CloudWatch 日志可以对您的账户执行哪些操作。首先,使用文本编辑器在文件 ~/ PermissionsFor cwl .json 中创建权限策略:

    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream" } ] }
  6. 使用 a w s iam put-role-policy 命令将权限策略与角色关联:

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. 在直播处于活动状态并且您已创建 IAM 角色之后,您可以创建 CloudWatch 日志目标。

    1. 此步骤不会将访问策略与您的目标关联,它只是完成目标创建的两个步骤中的第一个步骤。记下有效载荷中返回的: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" }
    2. 在步骤 7a 完成后,在日志数据接收者账户中将访问策略与目标关联。此策略必须指定 logs: PutSubscriptionFilter action,并向发件人账户授予访问目标的权限。

      该策略向发送日志的 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" } ] }
    3. 将您在上一步中创建的策略附加到目标。

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

      此访问策略允许 Amazon 账户中编号为 111111111111 的用户使用 ARN arn: aws: logs: region: 999999999999: Destinationation: testDestination: te PutSubscriptionFilterstDestination 呼叫目的地。任何其他用户试图拨 PutSubscriptionFilter 打该目的地的电话都将被拒绝。

      要针对访问策略验证用户的权限,请参阅 IAM 用户指南中的使用策略验证程序

完成后,如果您使用 Amazon Organizations 的是跨账户权限,请按照中的步骤 2:(仅在使用企业时)创建 IAM 角色步骤操作。如果您选择直接向另一个账户授予权限而不是使用 Organizations,则可以跳过该步骤然后继续执行 步骤 4:创建订阅筛选条件