Amazon CloudWatch Logs
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

创建目标

以下示例使用名为 RootAccess 的 Kinesis 流创建目标,并创建支持 CloudWatch Logs 将数据写入目标的角色。Lambda 跨账户处理与此类似,但您需要创建 Lambda 函数,并使用该函数 (而不是 Kinesis 流 ARN) 的 Amazon 资源名称 (ARN)。

创建目标

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

    Copy
    aws kinesis create-stream --stream-name "RootAccess" --shard-count 1
  2. 等到 Kinesis 流变为活动状态。您可使用 aws kinesis describe-stream 命令检查 StreamDescription.StreamStatus 属性。此外,请记下 StreamDescription.StreamARN 值,因为该值稍后将传递到 CloudWatch Logs:

    Copy
    aws kinesis describe-stream --stream-name "RootAccess" { "StreamDescription": { "StreamStatus": "ACTIVE", "StreamName": "RootAccess", "StreamARN": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess", "Shards": [ { "ShardId": "shardId-000000000000", "HashKeyRange": { "EndingHashKey": "34028236692093846346337460743176EXAMPLE", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "4955113521868881845667950383198145878459135270218EXAMPLE" } } ] } }

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

  3. 创建 IAM 角色,该角色将向 CloudWatch Logs 授予将数据放入 Kinesis 流的权限。首先,您需要在文件 ~/TrustPolicyForCWL.json 中创建信任策略:

    Copy
    { "Statement": { "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" }, "Action": "sts:AssumeRole" } }
  4. 使用 aws iam create-role 命令创建 IAM 角色,并指定信任策略文件。记下返回的 Role.Arn 值,因为该值稍后也将传递到 CloudWatch Logs:

    Copy
    aws iam create-role \ --role-name CWLtoKinesisRole \ --assume-role-policy-document file://~/TrustPolicyForCWL.json { "Role": { "AssumeRolePolicyDocument": { "Statement": { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "logs.us-east-1.amazonaws.com" } } }, "RoleId": "AAOIIAH450GAB4HC5F431", "CreateDate": "2015-05-29T13:46:29.431Z", "RoleName": "CWLtoKinesisRole", "Path": "/", "Arn": "arn:aws:iam::123456789012:role/CWLtoKinesisRole" } }
  5. 创建权限策略以定义 CloudWatch Logs 可对您的账户执行的操作。首先,您将在文件 ~/PermissionsForCWL.json 中创建权限:

    Copy
    { "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord", "Resource": "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::123456789012:role/CWLtoKinesisRole" } ] }
  6. 使用 aws iam put-role-policy 命令将权限策略与角色关联:

    Copy
    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

      Copy
      aws logs put-destination \ --destination-name "testDestination" \ --target-arn "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess" \ --role-arn "arn:aws:iam::123456789012:role/CWLtoKinesisRole" { "DestinationName" : "testDestination", "RoleArn" : "arn:aws:iam::123456789012:role/CWLtoKinesisRole", "DestinationArn" : "arn:aws:logs:us-east-1:123456789012:destination:testDestination", "TargetArn" : "arn:aws:kinesis:us-east-1:123456789012:stream/RootAccess" }
    2. 在步骤 7a 完成后,将访问策略与目标关联。您可将此策略放入 ~/AccessPolicy.json 文件:

      Copy
      { "Version" : "2012-10-17", "Statement" : [ { "Sid" : "", "Effect" : "Allow", "Principal" : { "AWS" : "234567890123" }, "Action" : "logs:PutSubscriptionFilter", "Resource" : "arn:aws:logs:us-east-1:123456789012:destination:testDestination" } ] }
    3. 这将创建一个策略,该策略定义了对目标具有写入权限的人。此策略必须指定 logs:PutSubscriptionFilter 操作才能访问目标。跨账户用户将使用 PutSubscriptionFilter 操作向目标发送日志事件:

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

      此访问策略允许 ID 为 234567890123 的 AWS 账户的根用户针对 ARN 为 arn:aws:logs:us-east-1:123456789012:destination:testDestination 的目标调用 PutSubscriptionFilter。任何其他用户针对此目标调用 PutSubscriptionFilter 的尝试都会被拒绝。

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