从 heroku 或 AWS EC2 中的 ENV 变量访问 S3 凭证
Access S3 credentials from ENV variable in heroku or AWS EC2
我在 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 });
然后我将我的中间件附加到我的 express 路由器以上传图像或视频。
AWS 文档中写道,我不应该将我的访问密钥与我的源代码放在一起。所以我把它添加到 gitignore。现在,当我在 AWS EC2 或 Heroku 中部署我的应用程序时,我将如何访问我的访问密钥?我不知道如何使用 ENV 变量访问我的密钥,请帮助我,我一直在阅读文档,但我无法全神贯注。提前谢谢你。
据我了解,您将密钥作为静态资源放置,因此任何人都可以下载它。据我所知,heroku 使您能够为您的应用程序创建环境变量。所以你应该创建 AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY,可能还有 AWS_DEFAULT_REGION(此处没有描述,但用于 python boto),如 aws sdk docs. The process of creation is well explained in heroku docs 所示。 AWS SDK 将在应用程序启动时检查此变量。如果我们谈论服务器端应用程序,这是适用的。
在其他情况下,您有 3 个选择:
使用 Amazon Cognito Identity 对用户进行身份验证并提供
凭据
使用网络联合身份
在脚本中硬编码(不推荐)
如本文所述amazon article。
我在 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 });
然后我将我的中间件附加到我的 express 路由器以上传图像或视频。
AWS 文档中写道,我不应该将我的访问密钥与我的源代码放在一起。所以我把它添加到 gitignore。现在,当我在 AWS EC2 或 Heroku 中部署我的应用程序时,我将如何访问我的访问密钥?我不知道如何使用 ENV 变量访问我的密钥,请帮助我,我一直在阅读文档,但我无法全神贯注。提前谢谢你。
据我了解,您将密钥作为静态资源放置,因此任何人都可以下载它。据我所知,heroku 使您能够为您的应用程序创建环境变量。所以你应该创建 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,可能还有 AWS_DEFAULT_REGION(此处没有描述,但用于 python boto),如 aws sdk docs. The process of creation is well explained in heroku docs 所示。 AWS SDK 将在应用程序启动时检查此变量。如果我们谈论服务器端应用程序,这是适用的。
在其他情况下,您有 3 个选择:
使用 Amazon Cognito Identity 对用户进行身份验证并提供 凭据
使用网络联合身份
在脚本中硬编码(不推荐)
如本文所述amazon article。