我正在尝试在Azure中创建一个自定义角色,该角色将允许订阅“所有者”执行除取消/重新命名自己的订阅或移至另一个管理组之外的所有工作。
我还希望他们能够向他们想要的人授予权限(特别是内置的“贡献者”角色),但又不允许他们授予“所有者”权限,否则我的自定义角色很容易被欺骗。 / p>
最后我得到了以下自定义角色定义,到目前为止,该定义很好并且可以正常工作,当然还有角色分配:
{
"Name": "MyCustomRole",
"IsCustom": true,
"Description": "Role designed for Azure subscriptions ownership limitations",
"Actions": [
"*"
],
"NotActions": [
"Microsoft.Management/managementGroups/subscriptions/write",
"Microsoft.Subscription/cancel/action",
"Microsoft.Subscription/rename/action"
],
"DataActions": [],
"NotDataActions": [],
"AssignableScopes": [
"/providers/Microsoft.Management/managementGroups/root.mg"
]
}
在Azure文档中,我发现的唯一用于角色分配的操作是Microsoft.Authorization/roleAssignments/write
。
是否有任何方法可以直接在自定义角色中将其限制为-例如贡献者角色分配?
从本质上讲,Azure策略可能会解决问题(甚至不确定),但是由于某些运营商/专家/其他人最终可能会成为所有者,因此我不希望策略引擎显示“不符合规定”的资源。这会导致客户产生我想避免的误会。
答案 0 :(得分:4)
您可能想尝试Azure策略,可以将其应用于IAM模型。您可以根据治理结构在“订阅”或“管理组”级别上分配策略。
下面的策略定义将阻止所有尝试分配“所有者”角色的请求,没有例外。内置所有者角色由“ 8e3af657-a8ff-443c-a75c-2fe8c4bcb635”表示,在所有Azure租户中均使用相同的GUID。
但是仍然可以进行其他RBAC角色的角色分配。这应该可以满足您的用例。
https://docs.microsoft.com/en-us/azure/role-based-access-control/built-in-roles
{
"policyType": "Custom",
"mode": "All",
"displayName": "DenyOwnerAssisgnment",
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Authorization/roleAssignments/roleDefinitionId",
"contains": "8e3af657-a8ff-443c-a75c-2fe8c4bcb635"
},
{
"field": "type",
"equals": "Microsoft.Authorization/roleAssignments"
}
]
},
"then": {
"effect": "deny"
}
},
"type": "Microsoft.Authorization/policyDefinitions"
}
答案 1 :(得分:1)
据我所知-不,您不能做得很细。您只能限制特定操作。
答案 2 :(得分:0)
是的,在分配策略时应该可以,因此它不是定义的一部分,而是分配的一部分。您可以在订阅级别范围内分配策略,并排除资源组。您可以通过“ notScopes”来做到这一点。
有关操作步骤,请参阅Azure策略文档(排除范围)
分配的范围包括所有子资源容器和 子资源。如果是子资源容器或子资源 不应该应用定义,可以将每个定义排除在外 通过设置notScope进行评估。此属性是要启用的数组 从中排除一个或多个资源容器或资源 评价。 notScope可以在创建后添加或更新 初始作业。
https://docs.microsoft.com/en-us/azure/governance/policy/concepts/assignment-structure
您可以在分配策略时或通过使用valid_keys = [key for key, val in x_wins.items() if val is True]
参数通过PowerShell来在门户中包括排除的范围。