如何排除 CloudWatch 中的跨账户日志记录问题?

上次更新日期:2022 年 5 月 12 日

我想排查使用我的 Amazon CloudWatch 账户进行跨账户日志记录的问题。我该如何操作?

简短描述

您可以近乎实时地在您的账户中或向其他 AWS 账户发送 CloudWatch 日志。与其他 AWS 账户共享您的日志或接收其日志称为跨账户日志记录。您可以使用 Amazon Kinesis 或 Amazon Kinesis Data Firehose 流设置跨账户日志记录。或者,您可以使用订阅筛选条件将数据流式传输到 Amazon OpenSearch。CloudWatch 控制台支持所有选项。有关使用跨账户日志记录的更多信息,请参阅以下文章:

解决方法

将 Kinesis Data Stream/Kinesis Data Firehose 传输流作为目标进行问题排查

1.    确保您的 Kinesis 流或 Kinesis Data Firehose 处于活动状态。您可以在 Kinesis 控制台上查看状态,也可以使用 DescribeStreamDescribeDeliveryStream API 调用。

2.    检查 CloudWatch 日志组区域和 Kinesis 数据流区域是否匹配。

3.    检查您是否创建了具有正确信任权限的 AWS Identity and Access Management(IAM)角色。IAM 角色必须允许您的 CloudWatch 日志将日志事件发送到 Kinesis 数据流或 Kinesis Data Firehose。

在此示例中,日志数据接收者账户的 AWS 账户 ID 为 999999999999。日志数据发送者的 AWS 账户 ID 为 111111111111。确保在 Kinesis Data Streams 或 Kinesis Data Firehose 流的接收者账户信任策略中允许账户 111111111111。以下是针对 Kinesis Data Streams 或 Kinesis Data Firehose 传输流的 IAM 信任策略示例:

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

此示例显示了 Kinesis Data Streams 的 IAM 角色策略:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kinesis:PutRecord",
      "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
    }
  ]
}
 
IAM role policy for kinesis Firehose stream.
 
{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "firehose:*"
      ],
      "Resource": [
        "arn:aws:firehose:region:999999999999:*"
      ]
    }
  ]
}

4.    验证 IAM 策略中的区域和资源 ARN 是否正确。

5.    确保在为 Kinesis Data Streams 配置订阅筛选条件时未选择 Kinesis Firehose。

6.    开始流式传输后,请检查订阅筛选条件的指标。确认筛选条件模式有效且与传入的日志事件相匹配。有关更多信息,请参阅使用 CloudWatch 指标进行监控。使用以下指标:

  • ForwardedBytes - 转发到订阅目标的日志事件量(以压缩字节为单位)。
  • ForwardedLogEvents - 转发到订阅目标的日志事件数。

7.    要确认在将日志事件流式传输到目标时没有错误,请检查这些指标是否存在目标错误。您可能会发现一个数据点,用于确认日志事件在将日志事件流式传输到目标时收到错误。

  • DeliveryErrors - 在将数据转发到订阅目标时,CloudWatch 日志收到错误的日志事件数。
  • DeliveryThrottling - 在将数据转发到订阅目标时,CloudWatch 日志受到限制的日志事件数。

8.    如果您有专门的流为您的 Kinesis Data Streams 功能提供洞察,请查看 Kinesis Data Stream 或 Kinesis Firehose 的指标。有关更多信息,请参阅使用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务使用 CloudWatch 指标监控 Kinesis Data Firehose

将 OpenSearch 作为目标排查问题

1.    检查 OpenSearch 域是否允许公有访问或 VPC 访问。有关创建域的更多信息,请参阅创建和管理 Amazon OpenSearch Service 域

2.    请确保 AWS Lambda 函数具有一个 IAM 执行角色,该角色具有以下角色策略的 lambda.amazonaws.com 信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "es:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:es:region:account-id:domain/target-domain-name/*"
    }
  ]
}

3.    如果目标 OpenSearch 域使用 VPC 访问权限,请检查该角色是否附加了 AWSLambdaVPCAccessExecutionRole 策略。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?