【问题标题】:Better way of using AWS parameter store? 1. Keeping all variables in a single parameter as JSON 2. Keeping every variable as a separate parameter使用 AWS 参数存储的更好方法? 1. 将所有变量保存为 JSON 格式的单个参数 2. 将每个变量保存为单独的参数
【发布时间】:2020-04-25 05:18:48
【问题描述】:

我有一个要托管在 AWS 云上的 Web 应用程序。我们正在从 AWS 参数存储中读取所有应用程序配置。但是,我不确定是否应该将所有变量作为 json 格式的单个参数,或者在参数存储中为每个变量设置一个参数。

将单个参数作为 json 字符串存在的问题是,AWS 参数存储不返回 JSON 对象,而是返回字符串。所以我们必须将字符串绑定到一个涉及反射的模型(这是一个非常繁重的操作)。每个变量都有单独的参数意味着程序中有额外的代码行(这并不昂贵)。

另外,我的应用是一个多租户应用,在中间件中有一个租户解析器。因此,每个租户都将存在配置变量。

【问题讨论】:

    标签: amazon-web-services configuration appsettings ssm aws-parameter-store


    【解决方案1】:

    这里没有正确的答案 - 这取决于。我能分享的是我团队的逻辑。

    1) 应用程序始终构建为读取 env 变量以覆盖默认值
    在我们的应用程序中,所有配置/秘密都是以这种方式设计的。主要原因是我们不喜欢未加密存储在磁盘上的秘密。是的,即使这样也可以读取环境变量,但风险比可能备份的磁盘要小

    2) SSM Parameter Store 可以将值输入到环境变量中
    这包括 Lambda、ECS 容器等。 这使我们能够存储加密(SSM 安全)、传输加密并注入应用程序。它为您处理 KMS 解密(假设您设置了权限)。

    3) Jenkins(我们的 CI)也可以从 Jenkins Credentials 注入环境变量

    4) 没有什么能阻止您构建支持这两种技术的库
    我们的代码读取一个名为 secrets_json 的环境变量,如果它存在并通过验证,它将其中的键/值设置为环境变量。
    注意:这也处理了你提到的关于 JSON 是一个字符串的方面。

    结论
    这里的关键是我相信您希望拥有灵活并能处理多种不同情况的代码。在所有应用程序设计中将其用作默认设置。我们过去一直使用 1:1 映射,因为最初 SSM 长度是有限的。我们可能仍然会使用它,因为它很灵活并且支持我们的一些 Secrets Manager 尚不支持的特殊轮换策略。

    希望我们的经验能让您选择最适合您和您的团队的方式。

    【讨论】:

    • 这个推理看起来很合理。我现在根据您的经验有了更好的判断:-) 非常感谢您分享您的观点,@sfblackl
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2019-04-05
    相关资源
    最近更新 更多