如何以安全的方式管理aws弹性beanstalk db密码

时间:2017-12-18 20:52:25

标签: amazon-web-services elastic-beanstalk

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

2 个答案:

答案 0 :(得分:2)

考虑使用AWS Parameter Store来管理DB密码等应用程序机密。

  

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

答案 1 :(得分:0)

我同意Rodrigo M的观点,即AWS Parameter Store是一个好主意。这是一个小方法:

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

IAM:例如,将AmazonSSMReadOnlyAccess策略附加到aws-elasticbeanstalk-ec2-role。这会带你去。可能会有更多限制性和安全性的方法来执行此操作,例如,https://aws.amazon.com/blogs/compute/managing-secrets-for-amazon-ecs-applications-using-parameter-store-and-iam-roles-for-tasks/中有一个示例示例,该策略仅允许访问命名参数,而不是所有参数。

有一个SDK,可让您从应用程序中使用AWS CLI。参见https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SSM.html

npm install aws-sdk

然后在您的代码中

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;
  }
});

今天对我进行了一些测试。在我看来似乎还可以,但我不是安全专家,因此在产品中使用该产品之前,我将与同事检查安全方面。