Azure AD(三)知識補充-Azure資源的託管標識

Grant_Allen發表於2020-06-01

一,引言

  來個慣例,吹水!?????

  前一週因為考試,還有個人的私事,一下子差點頹廢了。想了想,寫部落格這種的東西還是得堅持,再忙,也要檢查。要養成一種習慣,同時這也是自我約束的一種形式。雖然說不能浪費大量時間在刷朋友圈,看自媒體的新聞,看一些營銷號的視訊等等,不喜勿噴啊,這是我個人的一些觀念,也沒有帶認識眼光啊!好了,廢話不多說,在此先立個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 協同工作

  1. Azure 資源管理器收到請求,要求在 VM 上啟用系統分配託管標識。(圖1)

  2. Azure 資源管理器在 Azure AD 中建立與 VM 標識相對應的服務主體。 服務主體在此訂閱信任的 Azure AD 租戶中建立。

  3. Azure 資源管理器通過使用服務主體客戶端 ID 和證書更新 Azure 例項後設資料服務標識終結點來配置 VM 上的標識。

  4. VM 有了標識以後,請根據服務主體資訊向 VM 授予對 Azure 資源的訪問許可權。 若要呼叫 Azure 資源管理器,請在 Azure AD 中使用基於角色的訪問控制 (RBAC) 向 VM 服務主體分配相應的角色。 若要呼叫 Key Vault,請授予程式碼對 Key Vault 中特定機密或金鑰的訪問許可權。

  5. 在 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 或更高版本。
  6. 呼叫了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。

  7. 程式碼在呼叫支援 Azure AD 身份驗證的服務時傳送訪問令牌。

4,使用者分配託管標識如何與 Azure VM 協同工作

  1. Azure 資源管理器收到請求,要求建立使用者分配託管標識。

  2. Azure 資源管理器在 Azure AD 中建立與使用者分配託管標識相對應的服務主體。 服務主體在此訂閱信任的 Azure AD 租戶中建立。

  3. Azure 資源管理器收到在 VM 上配置使用者分配的託管標識的請求,並使用使用者分配的託管標識服務主體客戶端 ID 和證書更新 Azure 例項後設資料服務標識終結點。

  4. 建立使用者分配託管標識以後,請根據服務主體資訊向標識授予對 Azure 資源的訪問許可權。 若要呼叫 Azure 資源管理器,請在 Azure AD 中使用 RBAC 向使用者分配標識的服務主體分配相應的角色。 若要呼叫 Key Vault,請授予程式碼對 Key Vault 中特定機密或金鑰的訪問許可權。

     備註

    也可在步驟 3 之前執行此步驟。

  5. 在 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 或指定更高的版本。
  6. 呼叫了 Azure AD,以便使用在步驟 3 中配置的客戶端 ID 和證書請求訪問令牌(在步驟 5 中指定)。 Azure AD 返回 JSON Web 令牌 (JWT) 訪問令牌。

  7. 程式碼在呼叫支援 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 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

相關文章