溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用

發(fā)布時(shí)間:2020-07-12 21:47:07 來源:網(wǎng)絡(luò) 閱讀:1799 作者:mxy00000 欄目:云計(jì)算

今天再來與各位分享一篇關(guān)于Azure Policy的應(yīng)用,Policy的作用之前已經(jīng)有過一次介紹,沒看過的朋友可以移步之前的博客

使用Azure Polcy強(qiáng)制禁止非托管磁盤VM

https://blog.51cto.com/mxyit/2347943

 

今天要分享的主題是如何用Policy限制Azure中的role assignment,可能很多人一提到Role Assignment,第一反應(yīng)就會(huì)是RBAC。這其實(shí)很正常,因?yàn)镽ole assignment確實(shí)是屬于RBAC的范疇,那么RBAC和Polcicy的區(qū)別到底是什么?主要有兩點(diǎn)


  • RBAC 關(guān)注不同范圍內(nèi)的用戶操作。 你可能會(huì)被添加到資源組的參與者角色,可對(duì)該資源組做出更改。

  • 策略關(guān)注部署期間的資源屬性,以及現(xiàn)有資源。 Policy 控制屬性,例如資源的類型或位置



很多人一提到要限制role assignment第一反應(yīng)也是用RBAC來實(shí)現(xiàn),但是其實(shí),用Policy來實(shí)現(xiàn)這個(gè)需求有可能還會(huì)更簡單

 

之前有客戶提到過這樣一種情況,企業(yè)中Azure環(huán)境權(quán)限分配很混亂,有權(quán)限的人私自為其他賬號(hào)添加owner權(quán)限,這些人又私自為其他人添加owner權(quán)限,導(dǎo)致權(quán)限已經(jīng)泛濫,客戶花了很大的精力才把權(quán)限慢慢回收回來,同時(shí)為了便于管理,客戶也希望能限制為用戶添加owner權(quán)限,為此,其中一種解決辦法就是可以通過Policy實(shí)現(xiàn)。Policy可以做到只允許用戶assign特定的一些role,比如只可以分批contributor或者reader這種角色,owner這種角色不允許assign,這樣可以從技術(shù)手段上杜絕權(quán)限泛濫的可能

 

下邊來看下具體如何實(shí)現(xiàn),Policy的核心實(shí)際上就是定義rules的JSON文件,

可以看到其實(shí)實(shí)現(xiàn)我們的需求并不復(fù)雜,下邊的policy意思就是,如果Role ID不在roleDefinitionIds這個(gè)數(shù)組中,則拒絕添加,Role ID是什么概念呢?其實(shí)Azure中每個(gè)Role都是有一個(gè)獨(dú)立的ID的,想要查詢這個(gè)ID其實(shí)很簡單,下邊提供兩種方法


1:通過PowerShell

Get-AzureRmRoleDefinition|ft name,id -AutoSize


Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用



2:直接在網(wǎng)頁中查找

https://docs.microsoft.com/zh-cn/azure/role-based-access-control/built-in-roles#reader


{

 

         "if": {

 

                "allOf": [

 

                    {

 

                        "field": "type",

 

                        "equals": "Microsoft.Authorization/roleAssignments"

 

                    },

 

                    {

 

                        "not": {

 

                            "field": "Microsoft.Authorization/roleAssignments/roleDefinitionId",

 

                            "in": "[parameters('roleDefinitionIds')]"

 

                        }

 

                    }

 

                ]

 

            },

 

       "then": {

 

              "effect": "deny"

 

       }

 

}


有了Role ID之后來看一下,首先我們需要將允許添加的role id添加到數(shù)組中,比如如果只允許添加contributor和reader權(quán)限,則可以將這兩個(gè)ID添加到一個(gè)數(shù)組

[string[]]$ids="acdd72a7-3385-48ef-bd42-f606fba81ae7"

$ids+="b24988ac-6180-42a0-ab88-20f7382dd24c"

Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用



之后開始定義Role definition,包含rules定義的JSON文件已經(jīng)放在restrict-roleassignment-owner2這個(gè)文件中,另外因?yàn)閞ole id是一個(gè)可變的參數(shù),因此在parameter參數(shù)中需要定義好參數(shù)的類型等屬性

Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用



可以看到這個(gè)parameter是一個(gè)array,也就是數(shù)組類型,也符合我們的需求

{

 

       "roleDefinitionIds": {

 

              "type": "array",

 

              "metadata": {

 

                     "description": "The list of role definition Ids",

 

                     "displayName": "Approved Role Definitions"

 

              }

 

       }

 

}


定義好之后可以開始分配這個(gè)policy了,在scope中可以靈活選擇需要assign到哪個(gè)級(jí)別,可以選擇訂閱或者單獨(dú)某個(gè)資源或者資源組都可以,這里直接選擇將policy分配到訂閱級(jí)別

Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用


定義好之后來做個(gè)最終的測(cè)試,策略已經(jīng)生效了!在assign role的時(shí)候嘗試assign owner,但是已經(jīng)提示policy禁止這么做了

Azure實(shí)踐之Policy與Role assignment結(jié)合應(yīng)用


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI