【问题标题】:How to securely store customer's API key?如何安全地存储客户的 API 密钥?
【发布时间】:2021-12-02 01:10:18
【问题描述】:

我有一个应用,用户需要在其中输入第三方服务的 API 密钥,

存储用户 API 密钥的最佳方式是什么?我知道我们可以使用私钥对其进行加密,但这会产生另一个问题,如何安全地存储加密密钥?我们不希望所有用户都拥有一个相同的加密密钥。

感谢您的帮助

【问题讨论】:

    标签: laravel encryption design-patterns architecture password-encryption


    【解决方案1】:

    正确答案是专用秘密存储。如果您使用云部署,AWS Secrets Manager、GCP Secret Manager 或 Azure Key Vault 是三大云供应商提供的产品。

    如果您在 kubernetes 集群上部署,您可以使用内置的secret storage。

    或者在任何情况下您都可以使用专用的第三方秘密存储软件,例如Hashicorp Vault、akeyless 或其他。

    如果您有非常贵重的钥匙,不应该公开(而且您有很多钱可以花),您应该查看hardware security modules,例如ulitmaco。这些可以提供密钥使用,而密钥永远不会离开受保护的设备。云供应商还使用 HSM 提供服务,例如 AWS CloudHSM、GCP Cloud HSM、Azure Dedicated HSM。

    对于您在应用程序端需要的密钥:您不应该在部署期间将机密存储在代码存储库或磁盘上。一个好的做法是使用环境变量或启动后删除的临时文件(对于容器,您可以重新启动整个容器)。

    【讨论】:

    • 非常感谢您的帮助。在我的例子中,用户需要输入他们的 API 密钥,然后我将为登录用户初始化一个第三方库。这就是为什么环境变量对我来说还不够,我会看看你提到的其他替代方案。
    • @PetyIalimijoroRakotoniaina 那么您需要安全地存储 api 密钥(加密)。然后加密密钥也需要保护,所以答案是可以的。我更关心用户必须为 3rd 方 API 提供秘密的事实。我相信有办法做到这一点(OAuth2?)
    • @gusto2 感谢您的建议,我们计划使用多个 3rd 方 API,其中一些不支持 Oauth2
    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 2019-01-31
    • 2020-01-28
    • 2014-10-18
    • 2015-07-04
    • 2015-04-20
    • 2014-01-11
    相关资源
    最近更新 更多