使用 ElastiCache redis 服务器和密码解析服务器

Parse server with ElastiCache redis server and password

我已经在 Elastic Beanstalk 上设置了一个可用的 Parse 服务器。我已经添加了一个 AWS ElasticCache Redis 服务器用于缓存,但是在使用密码时我无法使连接正常工作,只是没有密码。在我创建新 Parse 服务器的 Parse 服务器 index.js 文件中,我像这样连接 Redis:

// Redis cache server
var RedisCacheAdapter = require('parse-server').RedisCacheAdapter;
var redisurl='rediss://:'+process.env.REDIS_PASS+'@'+process.env.REDIS_URL
var redisOptions = {url: redisurl};
var redisCache = new RedisCacheAdapter(redisOptions);   

我的 URL 看起来像 REDIS_URL=clustercfg.xxxx.xxxx.use1.cache.amazonaws.com

redis://rediss://我都试过了。我知道 RedisCacheAdapter 只有一个选项 - URL。我以为我可以直接在 link 中添加密码,但适配器似乎没有解析成密码和 URL,而是只需要 URL。

我的问题是我在这里做错了什么还是有其他使用密码的方法?如果无法使用密码,我想知道原因是什么(是因为 ElastiCache 对 Internet 隐藏并且只能被 EC2 上的服务器看到)?

更新: 根据@MarkB 的评论,我测试了 ElastiCache 的一些不同设置,并将我上面的代码修改为也使用密码。

var redisOptions = {url: redisurl, password: process.env.REDIS_PASS}; 
  1. 运行 具有集群模式、静态加密、传输中加密和 Redis 密码的 ElastiCache 失败。
  2. 运行 使用静态加密、传输中加密和 Redis 密码的 ElastiCache 失败。
  3. 运行 ElastiCache 静态加密,传输加密,无密码失败。
  4. 运行 ElastiCache 没有 静态加密,传输中加密且无密码成功。

在我看来,从 Parse 服务器连接时在静态和传输中使用加密会导致一个问题,我不确定如何解决。正如@MarkB 所提到的,Parse server (EC2) and ElastiCache 之间的连接仅限于 VPC,所以我可以接受没有安全选项,但仍然会很好。

根据支持 password 字段的 Parse Server 文档 here, the redisOptions will be passed directly to the redis client documented here。我相信这就是您需要指定密码而不是在 URL.

中指定密码的方式

另请注意,如果您使用的 Redis 客户端版本 <2.5,则需要指定 auth_pass 而不是 password

正如您提到的,由于 ElastiCache 仅限于您的 VPC,许多人认为无需添加密码身份验证就足够安全,除非出于 PCI 或 HIPAA 合规性原因需要这样做。