我想排查使用我的 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 控制台上查看状态,也可以使用 DescribeStream 或 DescribeDeliveryStream 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 策略。
相关信息
创建跨账户和跨区域 CloudWatch 控制面板