Azure實踐之Policy與Role assignment結合應用

今天再來與各位分享一篇關於Azure Policy的應用,Policy的作用之前已經有過一次介紹,沒看過的朋友可以移步之前的博客

使用Azure Polcy強制禁止非託管磁盤VM

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

 

今天要分享的主題是如何用Policy限制Azure中的role assignment,可能很多人一提到Role Assignment,第一反應就會是RBAC。這其實很正常,因爲Role assignment確實是屬於RBAC的範疇,那麼RBAC和Polcicy的區別到底是什麼?主要有兩點


  • RBAC 關注不同範圍內的用戶操作。 你可能會被添加到資源組的參與者角色,可對該資源組做出更改。

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



很多人一提到要限制role assignment第一反應也是用RBAC來實現,但是其實,用Policy來實現這個需求有可能還會更簡單

 

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

 

下邊來看下具體如何實現,Policy的核心實際上就是定義rules的JSON文件,

可以看到其實實現我們的需求並不複雜,下邊的policy意思就是,如果Role ID不在roleDefinitionIds這個數組中,則拒絕添加,Role ID是什麼概念呢?其實Azure中每個Role都是有一個獨立的ID的,想要查詢這個ID其實很簡單,下邊提供兩種方法


1:通過PowerShell

Get-AzureRmRoleDefinition|ft name,id -AutoSize


image001.png



2:直接在網頁中查找

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添加到數組中,比如如果只允許添加contributor和reader權限,則可以將這兩個ID添加到一個數組

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

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

image003.png



之後開始定義Role definition,包含rules定義的JSON文件已經放在restrict-roleassignment-owner2這個文件中,另外因爲role id是一個可變的參數,因此在parameter參數中需要定義好參數的類型等屬性

image005.png



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

{

 

       "roleDefinitionIds": {

 

              "type": "array",

 

              "metadata": {

 

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

 

                     "displayName": "Approved Role Definitions"

 

              }

 

       }

 

}


定義好之後可以開始分配這個policy了,在scope中可以靈活選擇需要assign到哪個級別,可以選擇訂閱或者單獨某個資源或者資源組都可以,這裏直接選擇將policy分配到訂閱級別

image007.png


定義好之後來做個最終的測試,策略已經生效了!在assign role的時候嘗試assign owner,但是已經提示policy禁止這麼做了

image009.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章