Как записать в очередь SQS только для записи без ключа доступа и секретного ключа - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть веб-сайт, который пишет сообщения со стороны клиента в очередь Amazon SQS. Всем разрешено писать в очередь. У нас есть процесс на стороне сервера, который читает сообщения очереди и обрабатывает их.

Очередь настроена с доступом на запись для всех, вот ее политика:

{
  "Version": "2012-10-17",
  "Id": "arn:aws:sqs:.../SQSDefaultPolicy",
  "Statement": [{
      "Sid": "Sid1537097246229",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "SQS:SendMessage",
      "Resource": "arn:aws:sqs:..."
  }]
}

Однако мы не можем писать в очередь без ключа доступа и секретного ключа. AWS SDK возвращает ошибку о том, что учетные данные не предоставлены. Мы используем код, описанный в документации AWS SQS .

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я бы не рекомендовал разрешать неаутентифицированный доступ к очереди SQS, но если вам нужно сделать это, вы сможете отправлять неаутентифицированные запросы через JavaScript SDK следующим образом:

const AWS = require('aws-sdk');

AWS.config.update({ region: 'us-east-1' });

const sqs = new AWS.SQS({ apiVersion: '2012-11-05' });

const params = {
  DelaySeconds: 10,
  MessageAttributes: {
    Title: {
      DataType: 'String',
      StringValue: 'The Whistler',
    },
    Author: {
      DataType: 'String',
      StringValue: 'John Grisham',
    },
  },
  MessageBody: 'NY Times fiction bestseller 12/11/2016.',
  QueueUrl: 'QUEUE_URL_HERE',
};

sqs.makeUnauthenticatedRequest('sendMessage', params, (err, data) => {
  if (err) {
    console.log('Error', err);
  } else {
    console.log('Success', data.MessageId);
  }
});
0 голосов
/ 16 сентября 2018

Ваша политика по умолчанию с "Principal": "*" по-прежнему требует, чтобы отправитель предоставил некоторый принципал AWS.Как указано в предварительных условиях документа, который вы предоставили:

Создайте файл общих настроек с вашими учетными данными пользователя.Дополнительные сведения о предоставлении файла общих учетных данных см. В разделе Загрузка учетных данных в Node.js из общего файла учетных данных.

Рассматривали ли вы использование API-шлюза в качестве прокси-сервера для своей очереди SQS?Один пример этого определяется на https://dzone.com/articles/creating-aws-service-proxy-for-amazon-sqs.Я бы порекомендовал настроить прокси для SQS и иметь конечную точку POST, такую ​​как

POST::/myQueueName/messages

. Это изменит то, как ваши пользователи взаимодействуют с очередью, но позволяет заблокировать очередь только для службы.пользователь для чтения и записи, который следует политике наименьших привилегий.Тогда ваша конечная точка API Gateway может быть защищена с помощью ключа API, оставлена ​​широко открытой для Интернета или даже защищена ролями IAM, в зависимости от ваших предпочтений.

...