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

创建目标

重要

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

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

该示例使用名为 RecipientStream 的 Kinesis 流创建一个目标,并创建一个允许 CloudWatch Logs 将数据写入到该目标的角色。

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

创建目标

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

    aws kinesis create-stream --stream-name "RecipientStream" --shard-count 1
  2. 等到 Kinesis 流变为活动状态。您可使用 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" } } ] } }

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

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

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

    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.region.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.region.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::999999999999:role/CWLtoKinesisRole" } }
  5. 创建权限策略以定义 CloudWatch Logs 可对您的账户执行的操作。首先,使用文本编辑器在文件 ~/PermissionsForCWL.json 中创建权限策略:

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

    aws iam put-role-policy \ --role-name CWLtoKinesisRole \ --policy-name Permissions-Policy-For-CWL \ --policy-document file://~/PermissionsForCWL.json
  7. 在 Kinesis 流变为活动状态并且您已创建 IAM 角色后,您便可以创建 CloudWatch Logs 目标。

    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 操作并向发件人账户授予权限才能访问目标。

      此策略向发送日志的 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

      此访问策略允许 ID 为 111111111111 的Amazon账户中的用户针对 ARN 为 arn:aws:logs:region:999999999999:destination:testDestination 的目标调用 PutSubscriptionFilter。任何其他用户针对此目标调用 PutSubscriptionFilter 的尝试都会被拒绝。

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

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