我们有一个与 Express 路由耦合的 VNET,通过它我们将允许用户访问特定的子网。
这些子网是为每个资源组创建的,目的是让这些用户只能在其子网中添加机器。
为了允许用户将机器添加到子网,我给了他们以下权限:
- 在虚拟网络上阅读
- 子网上的贡献者
但是这允许用户选择虚拟网络上的所有子网。
当您尝试在缺少贡献者的子网上部署机器时,它只会抛出一个错误。
我尝试创建自定义角色,但如果我要创建一个仅不允许读取的角色,则如下:
{
"Name": "Not Reader",
"Description": "Denies Reader priviliges on the assigned resource.",
"Actions": [
],
"NotActions": [
"Microsoft.Network/*/read"
],
"AssignableScopes": [
"/subscriptions/theguidwashere"
]
}
我收到错误:
New-AzureRmRoleDefinition : Invalid value for Actions
At line:1 char:1
+ New-AzureRmRoleDefinition -InputFile C:\temp\customroles\NotReader.json
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [New-AzureRmRoleDefinition], ArgumentException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Resources.NewAzureRoleDefinitionCommand
我认为这是因为操作值不能为空。
我不确定我应该/可以安全地在操作中添加什么,此时我开始觉得我正在将本来应该很简单的东西组合成复杂的东西。
那么我应该如何设置/创建角色以允许用户仅查看和使用更大的 VNET 中的单个子网?
答案1
我们不能对特定子网进行限制。我遇到了同样的问题。
自定义规则只能应用于 1) 资源组 2) 资源(vnet 是资源而不是子网,子网是资源的结果)3) 订阅
如上所述,子网不是资源,您将无法通过 RBAC/自定义角色功能来限制哪些子网可以使用和不能使用。
您可能需要研究 Azure 蓝图或 Azure 策略。