【问题标题】:Give Terraform Service Principal Contributor but remove from Key Vault给予 Terraform 服务主要贡献者,但从 Key Vault 中删除
【发布时间】:2018-10-11 20:16:19
【问题描述】:

我们正在 Azure Government 中构建一个解决方案,我们将使用 Terraform 来部署该解决方案。似乎首选方法是为 Terraform 创建一个服务主体,该服务主体具有订阅范围内的贡献者角色。

我们希望解决的一个问题是,这使服务主体管理平面可以访问 Key Vault...因为它在订阅中。使用 Contributor 角色,服务主体无法创建新的访问策略(将自己或其他人的权限分配给数据平面),但我们正在寻找一种方法可以使服务主体不再拥有任何管理平面权限。

我们已尝试在创建服务主体之前在 Key Vault 上设置只读锁,但该锁不会阻止服务主体获取对 Key Vault 的参与者权限。

除了创建一个新角色之外,除了 Key Vault 之外的所有内容都有贡献者,是否有人有任何创意可以帮助实现这一目标?

【问题讨论】:

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


    【解决方案1】:

    是的,所有安全问题的根本原因是服务主体的参与者角色分配是在订阅级别/范围内,这使得它能够在多个应用程序部署到同一个订阅时造成相当大的破坏(例如删除任何资源组)。

    一种方法是:

    1. 为特定于应用程序和区域的 Azure Key Vault 提供一个资源组(后者适用于地理分布式应用程序)。
    2. 在上一步创建的资源组上预配 Azure Key Vault。

    在我们的案例中,安全办公室负责前两个步骤,他们监控 Azure Key Vault 中的任何更改(例如添加的新密钥/秘密/证书)(例如电子邮件、短信等) /deleted/changed,权限更改等)。

    1. 提供第二个资源组,它将作为应用程序组件(例如 Azure Function、Azure SQL Server/Database、Azure Service Bus Namespace/Queue 等)的容器。李>
    2. 创建服务主体并将参与者角色分配给 仅限应用程序资源组,例如: scope = /subscriptions/{Subscription Id}/resourceGroups/{Resource Group Name}

    https://github.com/evandropaula/Azure/blob/master/ServicePrincipal/PS/Create-ServicePrincipal.ps1 找到一个示例 PS 脚本以提供具有自定义范围的服务主体。

    1. 为 Azure 中的服务主体授予适当的权限 密钥库。在我们的例子中,我们决定有单独的服务 用于部署(密钥/机密/证书的读写权限)和运行时(密钥/机密/证书的只读权限)的主要帐户;

    https://github.com/evandropaula/Azure/blob/master/KeyVault/PS/Set-ServicePrincipalPermissions.ps1 找到一个示例 PS 脚本以设置 Azure Key Vault 上的服务主体权限。


    话虽如此,这种方法有很多不便之处,例如:

    • 预配 Azure Key Vault(包括其资源组)和应用程序资源组的进程(例如,通过运行手册)将在负责应用程序组件的主要 Terraform 模板之外,这需要与不同的团队/进程/工具/等。
    • 涉及连接的实时站点通常需要多个团队之间的协调,以确保实现 RTO 和 MTTM(平均缓解时间)目标。
    • 服务主体将能够在执行 terraform destroy 时删除应用程序特定资源组,但它将无法重新创建由于在订阅级别/范围内缺乏权限,之后运行 terraform apply 时。这是错误:

    provider.azurerm: Unable to list provider registration status, it is possible that this is due to invalid credentials or the service principal does not have permission to use the Resource Manager API, Azure error: resources.ProvidersClient#List: Failure responding to request: StatusCode=403 -- Original Error: autorest/azure: Service returned an error. Status=403 Code="AuthorizationFailed" Message="The client '' with object id '' does not have authorization to perform action 'Microsoft.Resources/subscriptions/providers/read' over scope '/subscriptions/{Subscription Id}'.".


    是的,我知道,这是一个很长的答案,但该主题通常需要进行大量跨团队讨论/头脑风暴,以确保满足安全办公室建立的安全控制,开发人员的工作效率不会受到影响它将影响发布计划并实现 RTO/MTTM 目标。我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2021-04-10
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      相关资源
      最近更新 更多