【问题标题】:Reverse Proxy Setup for Database Access through API通过 API 进行数据库访问的反向代理设置
【发布时间】:2020-07-31 05:43:03
【问题描述】:

您好:我确实在 AWS EC2 实例中部署了基于 Django 的应用程序。该应用程序通过在 Django 应用程序中编写的一组 API 访问托管在场所内的医院数据库以进行查询和更新。但是,由于安全原因,我们的 EC2 应用程序中不能有生产 IP、数据库用户 ID、数据库密码。这个问题有哪些可用的选项。可以考虑的一种选择是在本地环境的另一台机器上设置反向代理服务器,并通过它访问 prod 数据库。我想知道,

  1. 如果有其他更好的实践解决方案可用
  2. 指向 ReverseProxy 的示例配置的指针,该配置在代理中维护数据库 UserID、databasePwd 等并通过它运行 API。 我们仍在尝试设置基于 UBUNTU 的 Ngnx 服务器。但是,仍然不确定在哪里维护 DBUserID、DBPwd 等。 任何帮助或指导指针将不胜感激。谢谢

【问题讨论】:

  • 您可以将凭据存储在 Systens 管理器参数存储机密中。 django 应用程序在您的 django index.php 文件中编写一些代码,以从参数存储中读取凭证并更新具有 db 凭证的配置文件。但是在这种方法中,任何可以访问 ec2 的人都可以在配置文件中看到明文密码。
  • 检查这个。在此示例中,当 django 收到请求时,他们正在对 aws 系统管理器进行 sdk 调用并获取机密。密码不会存储到文件中。但它会为每个 http 请求查询系统管理员。 engineering.instawork.com/…
  • 发布了一个答案,基本上您在 ec2 使用启动脚本启动时读取一次凭据,然后您可以将值存储为系统环境变量。然后 django 可以从环境变量中读取凭证。

标签: reverse-proxy


【解决方案1】:

我还没有在 django 中尝试过,这是我认为的一个简洁的解决方案:

  • 将 IAM 角色分配给 EC2 实例。为角色分配权限,以便它可以从系统管理器参数存储中读取
  • 将凭据(用户名、密码、主机等)存储在 aws 系统管理器 (SSM) 参数存储中
  • 将引导脚本添加到 ec2 并在系统管理器中查询参数。该脚本将在 ec2 实例启动时运行一次,从 SSM 读取值并将值设置为环境变量
  • 在设置 db 凭据的 django 设置文件中,我会从环境变量中读取凭据,例如 os.environ['DATABASE_PASSWORD']

参考资料:

EC2 Boot Script

Systems manager parameter store

How to set environment variables in python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多