如何在没有访问密钥和秘密密钥的情况下写入只写SQS队列

zmb*_*mbq 2 javascript amazon-sqs amazon-web-services

我有一个网站,该网站将客户端的消息写入Amazon SQS队列。每个人都可以写到队列中。我们有一个服务器端进程,该进程读取队列消息并进行处理。

队列配置了对所有人的写访问权限,这是其策略:

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

但是,如果没有访问密钥和秘密密钥,我们似乎无法写入队列。AWS开发工具包返回错误,指出未提供凭证。我们正在使用AWS SQS文档中描述的代码。

jar*_*mod 5

我不建议允许未经身份验证的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);
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,客户端的硬编码凭据同样存在问题。理想情况下,所有客户端都会进行身份验证(例如通过 Cognito),但我知道在某些情况下这可能看起来很繁重。无论如何,我只是想强调潜在的风险,以便读者充分了解情况。 (3认同)