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

Logstash通过Kinesis输入数据时遇DynamoDB权限错误求助

问题分析

从报错信息和配置来看,核心问题有三个:

  1. 凭证未生效:Logstash容器实际用的是EC2实例的SSM角色(AmazonSSMRoleForInstancesQuickSetup),而非你本地~/.aws/credentials里的用户——Docker容器默认不会挂载本地AWS凭证文件,所以本地配置没起作用。
  2. 区域不匹配:Logstash配置指定Kinesis区域为us-west-2,但报错里的DynamoDB表在us-west-1,Logstash的Kinesis输入会自动创建DynamoDB表记录消费 checkpoint,跨区域会引发权限和访问问题。
  3. 角色权限不足:当前使用的SSM角色没有被授予针对目标DynamoDB表的dynamodb:DescribeTable权限。

解决方案

1. 让容器读取本地AWS凭证(可选,若不想用实例角色)

把本地~/.aws目录挂载到Docker容器内的对应路径,确保Logstash能读取到凭证:

docker run -v ~/.aws:/root/.aws [你的其他Logstash启动参数]

如果容器内运行Logstash的不是root用户,需调整挂载路径到对应用户的home目录,并确保权限正确。

2. 统一区域配置

将Logstash输入配置的region改为DynamoDB所在的us-west-1,避免跨区域访问:

input {
  kinesis {
    kinesis_stream_name => "logstash-kinesis"
    application_name => "logstash-kinesis"
    region => "us-west-1"  # 修正为目标区域
    codec => cloudwatch_logs
  }
}

3. 给SSM角色补充DynamoDB权限

如果继续使用EC2实例的SSM角色,给AmazonSSMRoleForInstancesQuickSetup角色添加以下IAM策略(包含Logstash消费Kinesis所需的完整DynamoDB权限):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:DescribeTable",
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem"
      ],
      "Resource": "arn:aws:dynamodb:us-west-1:xxxxxxxxxx:table/logstash-kinesis"
    }
  ]
}

4. 验证权限并重启

IAM策略更新后等待几分钟让权限生效,然后重启Logstash容器,观察是否仍有报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:27:05