Агент AWS Kinesis не авторизован для выполнения: firehose:PutRecordBatch
Я установил AMI Amazon linux с установленным агентом Kinesis и настроен для отправки журналов в Firehose. Экземпляру EC2 была назначена роль IAM сKinesisFirehoseFullAccess
разрешение. Однако при отправке данных я получаю сообщение об ошибке недостаточных разрешений.
Я знаю, что предоставил наивысший уровень разрешений IAM Kinesis, но сейчас у меня пустая стена. Я, конечно же, урежу разрешения позже, но сначала мне нужно, чтобы это доказательство работало.
Из AWS Firehose сделал тестовую отправку в ведро S3. Это сработало нормально. Создавал журналы с помощью генератора поддельных журналов. Затем я запустил службу. Сервис запущен и работает.
Пользователь: arn:aws:sts::1245678012:allowed-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 записей успешно отправлены адресатам. Время работы: 840058 мс
2 ответа
У меня это работает, чтобы агент aws kinesis отправлял данные в поток данных kinesis на случай, если у кого-то еще есть проблемы. У меня были те же проблемы после присоединения правильной роли iam и разрешений политики к экземпляру ec2, который должен был отправлять записи в поток данных kinesis. Я просто удалил ссылки на aws firehose в файле конфигурации. Вам не нужно использовать ключи, встроенные в сам экземпляр ec2, достаточно роли iam.
Убедитесь, что вы создаете 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