【问题标题】:Access S3 credentials from ENV variable in heroku or AWS EC2从 heroku 或 AWS EC2 中的 ENV 变量访问 S3 凭证
【发布时间】:2017-12-18 06:51:09
【问题描述】:

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

我的代码中来自 .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 变量访问我的密钥,请帮帮我,我一直在阅读文档,但我无法全神贯注。提前谢谢你。

【问题讨论】:

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


    【解决方案1】:

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

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

    1. 使用 Amazon Cognito 身份验证用户并提供 凭据

    2. 使用网络联合身份

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

    正如amazon article 中所述。

    【讨论】:

    • 谢谢你的伙伴清理它。我不能早点把它包在我的头上。所以我一步一步地在 EC2 中设置环境变量,让我的节点应用程序访问我的 AWS S3 密钥。我明天试试heroku。是的,我把密钥和源代码放在一起真是愚蠢,我没有意识到它可以在 heroku 中被盗,无论如何,再次感谢您。
    猜你喜欢
    • 2019-12-21
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2019-04-22
    • 2015-07-09
    相关资源
    最近更新 更多