首页 > 解决方案 > 如何在没有访问密钥和密钥的情况下写入只写 SQS 队列

问题描述

我有一个将消息从客户端写入 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 开发工具包返回一个错误,指出尚未提供凭证。我们正在使用AWS SQS 文档中描述的代码。

标签: javascriptamazon-web-servicesamazon-sqs

解决方案


我不建议允许未经身份验证的访问 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);
  }
});

推荐阅读