如何防止 terraform 开发人员使用非敏感功能查看机密

问题描述 投票:0回答:1

似乎有很多关于如何在 terraform 中检索和查看敏感数据的信息,但关于如何通过非敏感函数“防止”查看它的信息却很少。 例如,假设我在 Azure Key Vault 中存储了一个秘密,我希望我的配置能够获取它并在某个地方使用它:

data "azurerm_key_vault_secret" "my_ultra_secret" { name = "my_ultra_secret" key_vault_id = data.azurerm_key_vault.mykeyvault.id }

(我使用存储在 HCP Terraform(又名 Terraform Cloud)中的远程状态,以及 Terraform 的服务主体来与 Azure 通信并操作资源。)

如果开发人员能够获取此代码并进入 terraform 控制台,他们可以执行以下操作:

nonsensitive(data.azurerm_key_vault_secret.my_ultra_secret)

从而以明文形式暴露秘密。我不希望开发人员看到这些秘密,但显然 terraform cloud 需要这样做,因此限制我的服务主体权限的想法似乎不符合要求。

知道我该怎么做吗? (我研究过动态提供者凭证,但据我所知,这似乎并没有限制基于

user

的权限。

security terraform azure-keyvault terraform-provider-azure
1个回答
0
投票
防止 terraform 开发人员使用非敏感功能查看机密

一般来说,当最终用户获得足够的权限在多个环境/资源中使用秘密时,我们应该提供足够的权限来执行这些任务。

在访问策略方面,我们可以通过单独提供 get 权限来向最终用户提供限制,这是使用秘密所需的最低权限。不幸的是,如果用户获得了此权限,那么他也将有足够的权限来查看秘密,反之亦然。

我可以分享几个步骤,您可以通过这些步骤来克服这个问题,但在应用这些步骤之前,请确保您的最终用户没有在其状态文件中存储秘密。

即使
    nonsensitive()
  • 是一个 Terraform 函数,如果您在输出块中使用
    sensitive = true
    ,它也不会允许最终用户看到秘密。
    
    
代码配置:

data "azurerm_key_vault_secret" "example" { name = "testsample" key_vault_id = data.azurerm_key_vault.example.id } output "exposed_secret_value" { value = nonsensitive(data.azurerm_key_vault_secret.example.value) sensitive = true }

部署:

enter image description here

为开发人员创建不包含查看状态文件权限的特定角色。限制他们运行
    terraform console
  • 等敏感操作的访问权限,以避免他们使用
    nonsensitive()
    。您还可以使用 Azure DevOps、GitHub Actions 等秘密传递。
    尝试进行一些更改,以便开发人员无法通过锁定配置文件来更改配置文件,这可以在进行更改之前通过拉取请求来完成
注:

当您为最终用户或开发人员提供必要的权限时,他将能够使用它来查看秘密的价值。我们必须忍受它。

参考:

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault_access_policy

需要在terraform中显示敏感数据输出变量

,作者:Mark B

© www.soinside.com 2019 - 2024. All rights reserved.