Amazon web services S3表示安全,但我可以在没有任何密钥的情况下读取内容

Amazon web services S3表示安全,但我可以在没有任何密钥的情况下读取内容,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,因此,我尝试将生产密钥安全地存储在S3存储桶中,并让EC2加载它们。 这是它的样子。它说的是Bucket和对象不是公共的 所以我继续输入这个代码来检索bucket信息 const aws = require('aws-sdk'); const s3 = new aws.S3(); // Pass in opts to S3 if necessary var getParams = { Bucket: 'secret-bucket-name', // your bucket name,

因此,我尝试将生产密钥安全地存储在S3存储桶中,并让EC2加载它们。 这是它的样子。它说的是
Bucket和对象不是公共的

所以我继续输入这个代码来检索bucket信息

const aws = require('aws-sdk');
const s3 = new aws.S3(); // Pass in opts to S3 if necessary

var getParams = {
  Bucket: 'secret-bucket-name', // your bucket name,
  Key: 'keys-temp.js' // path to the object you're looking for
}

s3.getObject(getParams, function(err, data) {
  // Handle any error and exit
  if (err){
    console.log("err",err);
    return err;
  }

  // No error happened
  // Convert Body from a Buffer to a String

  let objectData = data.Body.toString('utf-8'); // Use the encoding necessary
  console.log("objectData",objectData);
});
一切都很顺利。它抓住钥匙没问题。只是,这是在我的本地服务器上,而不是在我的AWS服务器上。这难道不是公开我的钥匙吗

这是保存生产密钥的正确方法吗?还是我遗漏了什么

这是保存生产密钥的正确方法吗?还是我遗漏了什么

在S3中保留任何密钥/机密是一种相当糟糕的做法。更好的方法是为此使用AWS专用服务。这些服务包括:

  • 使用
    SecureString
    参数类型


您可以使用IAM策略以及高级参数存储的参数的基于资源的策略对机密进行细粒度控制。例如,要在您的EC2实例上使用机密,它将具有IAM实例角色,并附带细粒度权限,以访问机密。

出于好奇,这是一种不好的做法吗?@TrevorWood Hi。这一次,公开这些bucket对象很容易——只需单击鼠标,您的秘密就会向公众公开。第二,很难访问它们-总是必须先下载对象,然后才能阅读其内容,这意味着使用后可能会忘记删除它。一旦下载了机密文件,就无法控制谁/什么人可以访问它。第三,不支持旋转键。AWS决定创建专门用于保密的服务有更多的原因,而不是S3。谢谢你提供的信息。我查过AWS机密管理器,但每个机密0.40美分似乎很贵。我正在使用Elastic Beanstalk运行我的应用程序。我想知道仅仅在环境变量中存储键是否可以?常规参数存储是免费的。我不能很伤心地回答这个问题。这取决于这些秘密的“秘密”程度如何?他们的安全是否最重要?只有你知道,按照你的要求。@TrevorWood是的,它们不会公开。仅可供您的应用程序和任何有权访问EB控制台或CLI/SDK的人访问。通常,为了获得更好的安全性,您会在EB env变量中放置机密名称(例如,对iPareter存储中参数的引用),然后在实例上检索机密。通过这种方式,您还可以保护机密,不让任何有权访问EB控制台的人知道。Amazon S3中没有根本的不安全因素。您需要在本地环境中查找SDK正在获取和使用的凭据。