问题描述
在Azure中希望创建一个策略,以防止特定用户排除某组资源,但是他已经尝试了一些方法,似乎没有起作用,他想知道问题出在哪里。以下代码是他在命令行中执行的操作。
创建资源组
az group create --name demoResourceGroup --location eastus
创建策略
az policy definition create --name escrever --subscription "Azure subscription 1" --rules "{ \"if\": \ { \"field\": \"type\", \"equals\": \"Microsoft.Resources/resourceGroups/write\" }, \ \"then\": { \"effect\": \"deny\" } }"az policy definition create --name deletar --subscription "Azure subscription 1" --rules "{ \"if\": \ { \"field\": \"type\", \"equals\": \"Microsoft.Resources/resourceGroups/delete\" }, \ \"then\": { \"effect\": \"deny\" } }"
将策略分配给资源组
az policy assignment create --name myPolicy1 --policy escrever --policy deletar -g demoResourceGroup
解决方案
请注意以下操作注意版本差异及修改前做好备份。
步骤1:创建策略定义
首先,我们需要创建两个策略定义,一个用于阻止对资源组的写入操作,另一个用于阻止资源组的删除操作。我们可以使用Azure CLI来执行此操作。
阻止资源组的写入操作
az policy definition create --name bloquear-escrever --subscription "Azure subscription 1" --rules "{ \"if\": { \"field\": \"type\", \"equals\": \"Microsoft.Resources/resourceGroups/write\" }, \"then\": { \"effect\": \"deny\" } }"
阻止资源组的删除操作
az policy definition create --name bloquear-deletar --subscription "Azure subscription 1" --rules "{ \"if\": { \"field\": \"type\", \"equals\": \"Microsoft.Resources/resourceGroups/delete\" }, \"then\": { \"effect\": \"deny\" } }"
步骤2:将策略分配给资源组
现在,我们已经创建了策略定义,接下来将这些策略分配给目标资源组。
az policy assignment create --name myPolicy1 --policy bloquear-escrever --policy bloquear-deletar -g demoResourceGroup
现在,策略已经分配给了资源组,并且应该会阻止指定用户对该资源组的写入和删除操作。请注意,这些策略需要一定时间才能生效,因此可能需要等待一段时间才能验证其效果。
步骤3:验证策略
等待一段时间后,验证策略是否生效。尝试执行以下操作:
1. 尝试对资源组执行写入操作,例如创建一个新的资源或修改资源组属性。如果策略生效,这些操作应该被拒绝。
2. 尝试删除资源组。如果策略生效,应该会拒绝删除操作。
请确保使用与目标用户相同的订阅和权限进行验证。如果策略未生效或出现其他问题,请确保策略定义名称、订阅和资源组名称正确,并检查Azure CLI中是否有任何错误消息。
备注
如果你的策略未生效,可以考虑以下几点:
1. 策略定义的名称是否与分配时使用的名称一致。
2. 检查目标资源组的名称和位置是否正确。
3. 等待一段时间以确保策略在Azure中生效。有时策略需要一些时间才能在所有相关资源上生效。
以上就是在Azure中创建并应用只读策略的步骤。希望这些步骤对你有所帮助!
正文完