【问题标题】:Secure management plane's key vault in Terraform在 Terraform 中保护管理平面的密钥库
【发布时间】:2020-10-02 04:34:50
【问题描述】:

我正在使用 Terraform 代码。要求是:

  • 将 TF 状态文件放入 Azure 存储帐户。访问密钥 存储帐户必须受到保护。
  • 我的 TF 程序使用身份验证 服务主体,client_id、client_secret、tenant_id 应该是 加密并放入 Azure 存储帐户。

我的想法是使用一个包含所有上述安全机密的 KeyVault。但是 terraform 程序如何保护访问密钥、访问 KeyVault 的连接?这是关于管理平面的。

根据:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow ,这提供了一种编码授权请求的方式,该请求之前已经在 Azure AD 服务上注册了应用程序。 如何将类似的想法应用于 Terraform 代码?或者您可以建议任何更好的方法来实现这个想法?

非常感谢。

【问题讨论】:

    标签: terraform azure-keyvault terraform-provider-azure


    【解决方案1】:

    您可以使用 Azure DevOps 管道并将服务主体机密作为安全变量组(可以从 KV 链接)或作为服务连接提供。 查看: https://blog.gft.com/pl/2020/03/04/secure-terraform-delivery-pipeline-best-practices-part-1-2/(免责声明:我是作者) 和 https://blog.gft.com/pl/2020/04/24/automating-infrastructure-deployment-on-azure-using-ci-cd-pipeline-and-terraform/

    【讨论】:

      【解决方案2】:

      我认为不可能同时加密存储访问密钥和服务主体的机密。对于后端状态,您可以使用服务主体进行身份验证,这样您就不会暴露存储访问密钥。您只需向服务主体授予正确的权限。看看this

      但是对于服务主体,如果您在存储帐户中存储了诸如 client_id、client_secret、tenant_id 之类的内容,则需要在执行 Terraform 代码之前获取它们。它还需要存储访问密钥或服务主体机密或 SAS 令牌。

      所以我认为您可以使用 Azure CLI 进行身份验证:使用服务主体登录。然后,您无需向azurerm 提供密码。但实际上,它也不是绝对安全的。您还可以在路径~/.azure/ 中找到访问令牌。为此,您可以更改此路径的权限。如果你也觉得不安全,可以看看Managed identity of the VM。但是在所有事情之前你需要有一个虚拟机。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-20
        • 2021-08-09
        • 1970-01-01
        • 2017-01-19
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 2016-10-13
        相关资源
        最近更新 更多