Amazon web services 如何以安全的方式管理aws elastic beanstalk db密码

Amazon web services 如何以安全的方式管理aws elastic beanstalk db密码,amazon-web-services,amazon-elastic-beanstalk,Amazon Web Services,Amazon Elastic Beanstalk,我们在eb env之外有一个db实例,密码存储在一个属性文件中,该文件将与jar一起压缩并上传和部署。这不是很安全,因为密码实际上是随身携带的。(与旧的部署方式相比,密码存储在服务器上,通过JNDI与其他连接信息一起被取出)。是否有更好的方法以更安全的方式管理数据库密码?考虑使用来管理数据库密码等应用程序机密 AWS Systems Manager参数存储提供了安全、分层的 用于配置数据管理和机密管理的存储。你 可以存储密码、数据库字符串和许可证代码等数据 作为参数值。可以将值存储为纯文本或加密

我们在eb env之外有一个db实例,密码存储在一个属性文件中,该文件将与jar一起压缩并上传和部署。这不是很安全,因为密码实际上是随身携带的。(与旧的部署方式相比,密码存储在服务器上,通过JNDI与其他连接信息一起被取出)。是否有更好的方法以更安全的方式管理数据库密码?

考虑使用来管理数据库密码等应用程序机密

AWS Systems Manager参数存储提供了安全、分层的 用于配置数据管理和机密管理的存储。你 可以存储密码、数据库字符串和许可证代码等数据 作为参数值。可以将值存储为纯文本或加密 数据。然后,您可以使用指定的唯一名称引用值 在创建参数时指定。高度可扩展,可用, 持久的参数存储由AWS云支持参数 商店免费提供


我同意Rodrigo M的观点,AWS参数存储是个好主意。以下是一个小操作:

Elastic Beanstalk在EC2上运行。在EC2上运行AWS CLI时,它自动具有分配给EC2的任何IAM角色的权限。因此,这意味着您可以创建一个IAM角色,该角色授予EC2实例获取机密的权限,然后在启动时在应用程序代码中获取机密

IAM:例如,将AmazonSMSReadOnlyAccess策略附加到aws-elasticbeanstalk-ec2-role。这会让你走的。可能有更严格、更安全的方法来实现这一点,例如,这里有一个策略示例,它只允许访问命名参数,而不允许访问所有参数

有一个SDK允许您从应用程序中使用AWS CLI。看

然后在代码中:

const AWS = require('aws-sdk');
const ssm = new AWS.SSM({'region': 'us-east-1'});

var params = {
  Name: 'db-pw',
  WithDecryption: true
};
ssm.getParameter(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else {
    const dbPw = data.Parameter.Value;
  }
});

这在今天的一个小测试中对我起了作用。对我来说似乎没问题,但我不是安全专家,因此在产品中使用它之前,我将与同事一起检查安全方面。

如何将参数存储中的值输入到EB配置中?默认情况下,Elastic Beanstalk没有可用的
aws ssm get parameter
选项。如果您在EB中启动自己的docker容器,这似乎是可能的,但正如您的回答所暗示的,这绝对不是一个直接的“开箱即用”解决方案。
const AWS = require('aws-sdk');
const ssm = new AWS.SSM({'region': 'us-east-1'});

var params = {
  Name: 'db-pw',
  WithDecryption: true
};
ssm.getParameter(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else {
    const dbPw = data.Parameter.Value;
  }
});