从heroku或AWS EC2中的ENV变量访问S3凭证

时间:2017-07-13 13:03:33

标签: node.js heroku amazon-s3 multer-s3

我在Heroku和AWS EC2中部署了一个应用程序。我还为我的存储创建了一个AWS S3,用于上传图像和视频。突然,Heroku通过电子邮件告诉我,我的应用程序受到最新漏洞的影响,我的AWS S3的Access密钥被盗(可能是因为我的访问密钥的机器人,我的存储库是私有的,所以我不知道这是怎么回事),我很高兴我提前看到它,我能够删除我的密钥并生成一个新的密钥。基本上我上传图片的代码就是这个。

在我的代码中从.json文件访问密钥。

{
  "accessKeyId": "xxxxxxxxxxxxx",
  "secretAccessKey": "xxxxxxxxxxxxxxxxxxxx",
  "region": "us-east-2"
}

我的中间件

const multer    = require('multer');
const AWS       = require('aws-sdk');
const multerS3  = require('multer-s3');

AWS.config.loadFromPath('./resources/AwsS3Key.json');
var s3 = new AWS.S3();

const s3Storage = multerS3({
    s3     : s3,
    bucket : 'entrenami-app-bucket',
    acl    : 'public-read',
    key    : function (req, file, callback) {
        callback(null, file.originalname);
    }
});
module.exports.s3Upload  = multer({ storage: s3Storage });

然后我将我的中间件连接到我的快速路由器上传图像或视频。

在AWS文档中写道,我不应该使用我的源代码添加访问密钥。所以我把它添加到gitignore。现在,当我在AWS EC2或Heroku中部署我的应用程序时,如何访问我的访问密钥?我不知道如何使用ENV变量访问我的密钥,请帮助我,我一直在阅读文档,但我无法理解它。提前谢谢。

1 个答案:

答案 0 :(得分:2)

据我所知,您将密钥作为静态资源放置,因此任何人都可以下载它。据我所知,heroku可以为你的app创建env变量。所以你应该创建AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY和可能的AWS_DEFAULT_REGION(在那里没有描述,但用于python boto),如aws sdk docs中所示。 heroku docs详细解释了创作过程。 AWS开发工具包将在应用程序启动时检查此变量如果我们谈论服务器端应用程序,这是适用的。

在其他情况下,您有3个选项:

  1. 使用Amazon Cognito Identity对用户进行身份验证和供应 凭证

  2. 使用网络联合身份

  3. 在脚本中硬编码(未推荐)

  4. 如本amazon article中所述。