【问题标题】:AWS Parameter Store vs .env on nginxnginx 上的 AWS 参数存储与 .env
【发布时间】:2021-04-16 00:17:39
【问题描述】:

我试图了解为什么使用 KMS 加密存储在 AWS Parameter Store (SSM) 中的参数比将参数保存在 nginx 服务器上的 .env 文件中更好的解决方案。 就 nginx 服务器设置而言,.env 文件不会公开,因此除非有人闯入服务器,否则无法查看它。

nginx 配置将public 文件夹设置为根目录

root /home/user/app/public;

看起来共识是,如果有人设法闯入服务器,他们将能够以纯文本形式查看存储在 .env 文件内容中的所有参数,因此安全性低于 Parameter Store。

但是,AWS Parameter Store 不也是这样吗? (主要问题)

在php文件中,我从Parameter Store加载参数的方式是使用SSM Client。

例如

$client = new SsmClient([
       'version' => 'latest',
       'region' => 'us-west-2',
]);

$credentials = $client->getParameters([
       'Names' => ['MY_KEY', 'MY_SECRET'],
       'WithDecryption' => true
]);

$key = $credentials['Parameters'][0]['Value'];
$secret = $credentials['Parameters'][1]['Value'];

如果有人闯入服务器,他们将能够执行这些操作并检索任何参数。 那么是什么让 SSM 比 .env 更安全?

【问题讨论】:

    标签: amazon-web-services nginx


    【解决方案1】:

    SSM 使跨多台机器协调值变得容易。 .env 文件是如何进入您的服务器的?如果您必须更改其中的值会发生什么? SSM 有助于简化该过程。如果可以轻松替换机密,则更有可能定期轮换它们。 AWS Secrets Manager 通过自动轮换使该过程更加简单。它运行一个 Lambda 函数,该函数同时修改密钥值和使用它的内容(例如,它可以为您更改数据库密码)。因此,即使您的秘密确实以某种方式泄露,也只能在有限的时间内使用。

    在单独的服务器上保存机密会更安全的另一个原因是,闯入服务器并不总是意味着完全控制。有时,黑客可以使用配置错误的服务访问文件。如果没有包含秘密信息的文件,他们就什么也看不到。其他时候,黑客可以使用配置错误的代理访问您网络中的其他服务器。如果您所有的内部服务器都需要某种身份验证,那么黑客也无法破解它们。

    这就是深度防御概念的用武之地。您需要多层安全性。如果你只是假设“一旦他们进来,他们就进来了”,你实际上是在让黑客更容易。他们可以利用任何小的漏洞并完全控制您的系统。当您考虑到安全中最薄弱的环节——人时,这一点变得更加重要。您、您的开发人员、您的操作员以及公司中的每个人最终都会犯错误。如果每一个小错误都可以完全访问系统,那你的情况就很糟糕了。

    【讨论】:

      【解决方案2】:

      添加到上面的答案

      • 使用 KMS,机密存储在 AWS 托管 HSM 设备中,这肯定比存储在我们以纯文本形式管理的常规服务器中更安全。
      • 使用 KMS 加密存储在 SSM 参数中,我们可以获得细粒度的访问控制以及 CloudTrail 审计。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-08
        • 2021-10-04
        • 2018-04-27
        • 2019-06-18
        • 1970-01-01
        • 2020-04-26
        相关资源
        最近更新 更多