一,引言
來個慣例,吹水!?????
前一週因為考試,還有個人的私事,一下子差點頹廢了。想了想,寫部落格這種的東西還是得堅持,再忙,也要檢查。要養成一種習慣,同時這也是自我約束的一種形式。雖然說不能浪費大量時間在刷朋友圈,看自媒體的新聞,看一些營銷號的視訊等等,不喜勿噴啊,這是我個人的一些觀念,也沒有帶認識眼光啊!好了,廢話不多說,在此先立個Flag,
1,保證每週輸出一片文章。
2,開始堅持每週4次的5公里跑步。
好了,開始今天的分析?????
------------------------------------我是分割線------------------------------------
之前有個章節講到Azure AD的一些基礎概念,以及Azure AD究竟可以用來做什麼?,還講了講如何在我們的專案中整合Azure AD 保護我們的API資源!講了這些,其實遠遠不夠,AD裡裡面還有好多概念性的知識,同時也是在其他模組中有使用到的,就比如什麼叫“託管標識”,託管標識又分為“系統託管標識”和“使用者託管標識”;什麼叫“服務主體”,它又能幹什麼,和Azure又有什麼關係?好的,那麼今天就帶著這些問題,我們來剖析,探個究竟!。
二,正文
1,“什麼是託管標識”
- 客戶端ID:Azure AD 生成的唯一識別符號,在其初始預配期間與應用程式和服務主體繫結。
- 主體 ID - 託管標識的服務主體物件的物件 ID,用於授予對 Azure 資源的基於角色的訪問許可權。
- Azure 例項後設資料服務 (IMDS) - 一個 REST 終結點(url連結),可供通過 Azure 資源管理器建立的所有 IaaS VM 使用。
2,託管標識分為兩種型別:
- 系統分配託管標識:直接在 Azure 服務例項上啟用。 啟用標識後,Azure 將在例項的訂閱信任的 Azure AD 租戶中建立例項的標識。 建立標識後,系統會將憑據預配到例項。 系統分配標識的生命週期直接繫結到啟用它的 Azure 服務例項。 如果例項遭刪除,Azure 會自動清理 Azure AD 中的憑據和標識。
- 使用者分配託管標識:是作為獨立的 Azure 資源建立的。 在建立過程中,Azure 會在由所用訂閱信任的 Azure AD 租戶中建立一個標識。 在建立標識後,可以將標識分配到一個或多個 Azure 服務例項。 使用者分配標識的生命週期與它所分配到的 Azure 服務例項的生命週期是分開管理的。
下圖演示了託管服務標識如何與 Azure 虛擬機器 (VM) 協同工作:
3,系統分配託管標識如何與 Azure VM 協同工作
-
Azure 資源管理器收到請求,要求在 VM 上啟用系統分配託管標識。(圖1)
-
Azure 資源管理器在 Azure AD 中建立與 VM 標識相對應的服務主體。 服務主體在此訂閱信任的 Azure AD 租戶中建立。
-
Azure 資源管理器通過使用服務主體客戶端 ID 和證書更新 Azure 例項後設資料服務標識終結點來配置 VM 上的標識。
-
VM 有了標識以後,請根據服務主體資訊向 VM 授予對 Azure 資源的訪問許可權。 若要呼叫 Azure 資源管理器,請在 Azure AD 中使用基於角色的訪問控制 (RBAC) 向 VM 服務主體分配相應的角色。 若要呼叫 Key Vault,請授予程式碼對 Key Vault 中特定機密或金鑰的訪問許可權。
-
在 VM 上執行的程式碼可以從只能從 VM 中訪問的 Azure 例項後設資料服務終結點請求令牌:
http://169.254.169.254/metadata/identity/oauth2/token
- resource 引數指定了要向其傳送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用
resource=https://management.azure.com/
。 - API 版本引數指定 IMDS 版本,請使用 api-version=2018-02-01 或更高版本。
- resource 引數指定了要向其傳送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用
-
呼叫了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。
-
程式碼在呼叫支援 Azure AD 身份驗證的服務時傳送訪問令牌。
4,使用者分配託管標識如何與 Azure VM 協同工作
-
Azure 資源管理器收到請求,要求建立使用者分配託管標識。
-
Azure 資源管理器在 Azure AD 中建立與使用者分配託管標識相對應的服務主體。 服務主體在此訂閱信任的 Azure AD 租戶中建立。
-
Azure 資源管理器收到在 VM 上配置使用者分配的託管標識的請求,並使用使用者分配的託管標識服務主體客戶端 ID 和證書更新 Azure 例項後設資料服務標識終結點。
-
建立使用者分配託管標識以後,請根據服務主體資訊向標識授予對 Azure 資源的訪問許可權。 若要呼叫 Azure 資源管理器,請在 Azure AD 中使用 RBAC 向使用者分配標識的服務主體分配相應的角色。 若要呼叫 Key Vault,請授予程式碼對 Key Vault 中特定機密或金鑰的訪問許可權。
備註
也可在步驟 3 之前執行此步驟。
-
在 VM 上執行的程式碼可以從只能從 VM 中訪問的 Azure 例項後設資料服務標識終結點請求令牌:
http://169.254.169.254/metadata/identity/oauth2/token
- resource 引數指定了要向其傳送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用
resource=https://management.azure.com/
。 - 客戶端 ID 引數指定為其請求令牌的標識。 當單臺 VM 上有多個使用者分配的標識時,此值是消除歧義所必需的。
- API 版本引數指定 Azure 例項後設資料服務版本。 請使用
api-version=2018-02-01
或指定更高的版本。
- resource 引數指定了要向其傳送令牌的服務。 若要向 Azure 資源管理器進行身份驗證,請使用
-
呼叫了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。
-
程式碼在呼叫支援 Azure AD 身份驗證的服務時傳送訪問令牌。
稍後會提示
注意,此時在AD的應用註冊頁面是找不到剛剛註冊的應用的,只有在給Azure 資源分配託管標識去訪問Azure資源管理器時,可以搜尋到。我這裡是提前建立了是一個vm資源,也就是使用vm系統分配的託管標識訪問Azure Key Vault。簡而言之,Azure Key Vault作為金鑰保管庫,Key Vault 隨後可讓客戶端應用程式使用機密訪問未受 Azure Active Directory (AD) 保護的資源。 託管服務標識由 Azure 自動管理,可用於向支援 Azure AD 身份驗證的服務進行身份驗證,這樣就無需在程式碼中插入憑據了。
但是Azure中資源和資源之間是相互隔離的,不能夠相互訪問。
所以,我們需要開啟vm的系統分配的託管標識,然後再key vault 中開啟 vm的訪問策略。如下所示
新增 “vm001” 對 “key vault” 的訪問策略
建立 “機密” 資訊
名稱輸入:conn;值輸入 123 ,點選“建立”,
然後使用ssh 登陸剛剛建立好的vm001上,獲取訪問 “key vault” 的 “access_token”
在終端視窗中,使用 CURL 向 Azure 資源終結點的本地託管標識發出請求,以獲取 Azure Key Vault 的訪問令牌
世紀互聯版
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.cn' -H Metadata:true
全球版
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
可以使用此訪問令牌對 Azure Key Vault 進行身份驗證。 下一個 CURL 請求顯示如何使用 CURL 和 Key Vault REST API 從 Key Vault 讀取金鑰。 將需要 Key Vault 的 URL,該 URL 位於 Key Vault 的“概述” 頁的“軟體包” 部分。 另外,還需要在前面的呼叫中獲取的訪問令牌
curl https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01 -H "Authorization: Bearer <ACCESS TOKEN>"
通過在請求頭新增Bearer認證,獲取key vault 中剛剛建立的機密資訊 名稱 “conn”,值 “123”
bingo,成功的拿到金鑰。開啟系統分配的託管標識,其實就是授予例如 Azure VM資源的託管標識對另外一個Azure 資源的訪問許可權。
三,結尾
今天的文章大概介紹了 Azure系統的託管標識到底是個什麼東西,可以用來幹什麼,這裡不僅僅可以去 VM 訪問 "key Vault",還可以訪問 “Azure 儲存”,“Azure Cosmos DB”等,都是同樣的道理。
下一偏開始講解一下關於使用者自己分配的託管標識,已經作一下演示,同時演示使用使用者分配的託管身份執行應用程式。
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。
作者:Allen
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。