【问题标题】:AWS Kinesis agent not authorized to perform: firehose:PutRecordBatchAWS Kinesis 代理无权执行:firehose:PutRecordBatch
【发布时间】:2020-03-31 18:14:03
【问题描述】:

我已经设置了一个 Amazon linux AMI,它安装并配置了 Kinesis 代理,以将日志发送到 Firehose。 EC2 实例已附加具有 KinesisFirehoseFullAccess 权限的 IAM 角色。但是,我在发送数据时收到权限不足错误。

我知道我提供了最高级别的 IAM Kinesis 权限,但我现在面临着一堵空白的墙。当然,我稍后会削减权限,但我首先需要让这个概念验证工作。

从 AWS Firehose 向 S3 存储桶发送了测试。这工作正常。 通过假日志生成器创建日志。然后我运行了服务。服务已启动并正在运行。

用户:arn:aws:sts::1245678012:assumed-role/FirstTech-EC2-KinesisFireHose/i-0bdf3adc7a4d97afa 无权执行:firehose:PutRecordBatch 资源:arn:aws: firehose:ap-southeast-1:1245678012:deliverystream/firsttech-ingestion-weblogs(服务:AmazonKinesisFirehose;状态代码:400;错误代码:AccessDeniedException;

localhost (Agent.MetricsEmitter RUNNING) com.amazon.kinesis.streaming.agent。代理:进度:已解析 900 条记录(220430 字节),0 条记录成功发送到目的地。正常运行时间:840058ms

【问题讨论】:

  • 我将首先登录实例并测试分配给实例的 IAM 角色的权限。例如,使用 AWS CLI 运行 aws firehose list-delivery-streams ... 以确认它具有 Firehose 权限。尝试手动aws firehose put-record-batch ... 命令查看权限是否正确。另外,在阅读Writing to Amazon Kinesis Data Streams Using Kinesis Agent - Amazon Kinesis Data Streams 时,我建议也给予kinesis:PutRecord 权限,看看是否有帮助。
  • 不高兴。我新建了一个 Role 并添加了 PutRecord 和 PutRecordBatch 权限,还是一样...:(
  • 您是否尝试按照我上面评论中的建议通过 AWS CLI 发送数据?结果如何?
  • 有更新....
  • 经过大量修改后,我设法让数据被解析、转换并发送到 Kinesis Firehose,尽管这不是我想要的设置方式。这就是我所做的。我已经创建了一个 EC2 实例配置文件角色并将 KinesisFirehoseFullAccess 权限附加到该角色并将其附加到该实例,但它仍然发出该错误。所以:- 1.为EC2角色添加了KinesisFullAccess权限,仍然没有乐趣。 2. 删除了 Kinesis 和 Firehose 完全访问权限,并附加了具有 Kinesis PutRecord 和 PutRecordBatch 权限的自定义策略,不高兴。

标签: amazon-web-services amazon-kinesis


【解决方案1】:

我让 aws kinesis 代理将数据发送到 kinesis 数据流,以防万一这里的其他人有问题。 在将正确的 iam 角色和策略权限附加到需要将记录发送到 kinesis 数据流的 ec2 实例后,我遇到了同样的问题。 我刚刚删除了配置文件中对 aws firehose 的引用。您不需要使用嵌入在 ec2 实例本身中的密钥,iam 角色就足够了。

enter image description here

【讨论】:

  • 不推荐链接到图像中的代码(配置等..),因此这篇文章可能会被否决,为避免这种情况,请在问题中包含代码
  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
【解决方案2】:

确保您使用控制台创建 Kinesis Firehose,以确保默认情况下实例化所有必需的 IAM 访问。

接下来在您的实例中确保您的 agent.json 正确来自:

{
  "cloudwatch.emitMetrics": true,
  "flows": [
    {
      "filePattern": "/var/log/pathtolog",
      "deliveryStream": "kinesisstreamname"    }
  ]
}

确保 EC2 实例具有将数据发送到 Kinesis 的必要权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "cloudwatch:PutMetricData",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecord",
                "firehose:PutRecordBatch"
            ],
            "Resource": "arn:aws:firehose:us-east-1:accountid:deliverystream/deliverstreamname"
        }
    ]
}

还要确保您的 kinesis 代理可以从实例中的任何目录收集数据 - 最简单的方法是将代理添加到 sudoers 组。

sudo usermod -aG sudo aws-kinesis-agent-user

【讨论】:

    猜你喜欢
    • 2021-02-13
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多