我们正在Azure政府中构建解决方案,我们将使用Terraform部署解决方案。似乎首选的方法是为Terraform创建一个Service Principal,其中Service Principal的Contributor角色定为订阅。
我们希望解决的一个问题是,这使服务主管理平面能够访问密钥保管库...因为它在订阅中。使用Contributor角色时,服务主体无法创建新的访问策略(为数据平面分配自身或其他权限),但我们正在寻找一种可以删除服务主体以获得任何管理平面权限的方法。
我们尝试在创建服务主体之前在密钥保管库上放置一个ReadOnly锁定,但锁定并不会阻止服务主体获取密钥保管库上的贡献者权限。
除了创建一个新的角色,除了Key Vault之外,还有一个包含所有内容的贡献者,有没有人有任何可能有助于实现这一目标的创意?
答案 0 :(得分:2)
是的,所有安全问题的根本原因是服务主体的贡献者角色分配处于订阅级别/范围,这使得它可以在多个应用程序部署到同一订阅时特别损坏(例如,删除任何资源组。)
一种方法是:
在我们的案例中,安全办公室负责前两个步骤,他们对Azure Key Vault中的任何更改进行监控(例如电子邮件,文本消息等)(例如添加了新密钥/机密/证书) /删除/更改,权限更改等。)。
scope =
/subscriptions/{Subscription Id}/resourceGroups/{Resource Group
Name}
查找示例PS脚本,以便在https://github.com/evandropaula/Azure/blob/master/ServicePrincipal/PS/Create-ServicePrincipal.ps1配置具有自定义范围的服务主体。
查找示例PS脚本,以便在https://github.com/evandropaula/Azure/blob/master/KeyVault/PS/Set-ServicePrincipalPermissions.ps1的Azure Key Vault上设置Service Principal权限。
话虽如此,这种方法有很多不便之处,例如:
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目标。我希望这有点帮助!