You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CloudFormation将CloudWatch Logs日志转存S3遇ARN解析错误求助

问题排查:CloudWatch Logs Destination 解析ARN错误

我希望通过CloudFormation将EC2日志从CloudWatch Logs发送至S3,但遇到如下错误:
Error parsing ARN from given role or target (Service: AWSLogs; Status Code: 400; Error Code: InvalidParameterException; Request ID: 357e76a9-5ade-48a6-8206-84092390602f; Proxy: null)
不清楚下方代码哪部分有问题,恳请协助排查:

现有配置

S3桶配置

Type: 'AWS::S3::Bucket'
Properties:
  BucketName: vocsample01
  AccessControl: Private

CloudWatch Logs Destination配置

Type: 'AWS::Logs::Destination'
Properties:
  DestinationName: vocsample01
  DestinationPolicy: >
    {"Version": "2012-10-17","Statement": [
      {"Effect": "Allow","Action": "logs:*","Resource": "*"}]}
  RoleArn: arn:aws:iam::009150350157:role/vocsample
  TargetArn: arn:aws:s3:::vocsample0

错误原因分析

  1. TargetArn拼写错误
    你的S3桶名称是vocsample01,但CloudWatch Logs Destination中的TargetArn写的是arn:aws:s3:::vocsample0(末尾少了数字1),ARN与实际桶不匹配,导致解析失败。

  2. 目标类型不支持
    AWS::Logs::Destination仅支持将日志发送到Kinesis数据流、Kinesis Data Firehose或Lambda函数,不支持直接发送到S3桶。即使修正ARN拼写,也无法实现日志转存S3的需求。

修复方案

方案:通过Kinesis Data Firehose中转实现日志转存S3

正确的流程是:CloudWatch Logs → Kinesis Data Firehose → S3,以下是对应的CloudFormation配置示例:

1. 保留S3桶配置

S3Bucket:
  Type: 'AWS::S3::Bucket'
  Properties:
    BucketName: vocsample01
    AccessControl: Private

2. 创建Kinesis Data Firehose流

FirehoseDeliveryStream:
  Type: 'AWS::KinesisFirehose::DeliveryStream'
  Properties:
    DeliveryStreamName: vocsample-firehose
    S3DestinationConfiguration:
      BucketARN: !GetAtt S3Bucket.Arn
      RoleARN: arn:aws:iam::009150350157:role/firehose-s3-role # 需配置Firehose写入S3的权限
      BufferingHints:
        IntervalInSeconds: 300
        SizeInMBs: 5

3. 创建CloudWatch Logs订阅过滤器

用AWS::Logs::SubscriptionFilter替代Destination,实现日志实时转发到Firehose:

CWLogsSubscriptionFilter:
  Type: 'AWS::Logs::SubscriptionFilter'
  Properties:
    LogGroupName: '/aws/ec2/your-ec2-log-group' # 替换为你的EC2日志组名称
    FilterPattern: '' # 按需设置日志过滤规则,留空表示转发所有日志
    DestinationArn: !GetAtt FirehoseDeliveryStream.Arn
    RoleArn: arn:aws:iam::009150350157:role/cwlogs-firehose-role # 需配置CloudWatch Logs发送到Firehose的权限

关键权限配置说明

  • Firehose角色需包含s3:PutObject权限,允许向目标S3桶写入数据。
  • CloudWatch Logs角色需包含firehose:PutRecordBatch权限,允许向目标Firehose流发送日志数据。

内容的提问来源于stack exchange,提问作者kotonoha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 05:54:24