【Explanation】Azure Infrastructure — TenantId, AppId, ObjectId 與 Managed Identity 及 App Registration 說明

Kellen
10 min readApr 28, 2024

--

所有開發人員都面臨過安全儲存憑證、安全存取憑證、在達到目的時刪除憑證以及在某個時間點輪換服務帳戶密碼的問題,得花一些時間了解 Azure 資源的託管身分的定義。希望在此篇釐清一下 Azure 的 TenantId、ClientId(App ID)和 ObjectId 在Azure Active Directory 中的差別,以及 Managed Identity 與 App Registration 何時會進行使用。

TenantId(租戶識別碼)

TenantId 是 Azure Active Directory 的全域唯一識別碼(GUID),用於識別 Azure 租戶或組織。每個 Azure 租戶都有自己的 TenantId。這個識別碼在許多情況下都會被使用,例如身份驗證、授權和訪問管理等。

ClientId(App ID)

ClientId 是 Azure Active Directory 中應用程式的唯一識別碼。當你在 Azure AD 中註冊一個應用程式時,系統會為該應用程式分配一個唯一的 ClientId。應用程式使用這個識別碼來進行與 Azure AD 的驗證和授權通信。

ObjectId

ObjectId 是 Azure Active Directory 中各類對象(例如使用者、群組、應用程式等)的唯一識別碼。每個物件都會有自己的 ObjectId,它是由 Azure AD 系統自動分配的。ObjectId 主要用於在 Azure AD 中唯一識別特定的物件。

Locate the Basic info section on the user’s Profile page. The Object ID that is displayed is the user’s unique object ID
在 Web App/Function 中啟用了System Managed Identity後,系統會分配一個 Managed Identity。Managed Identity會有一個唯一的objectId,用於識別該身份。這個objectId可以用來在Azure Active Directory (AAD) 中唯一地識別和引用該Managed Identity

這些識別碼在 Azure 雲平台上的身份驗證、授權和訪問控制方面都起著重要的作用。

Managed Identity(託管識別)

受控識別的Azure服務分為系統指派的身分識別(System Assigned Managed Identity)和使用者指派的身分識別(User Assigned Managed Identity)這兩種,後者為開放給開發者自行設計指派之用

Managed Identity(託管識別)是 Azure 中 Azure Active Directory 的一項出色功能,「零密鑰管理」和「簡化身份驗證」兩大特色功能。它允許您的 Azure 應用程式和服務安全地進行通信,而無需處理或維護任何憑證,算是一項使用起來非常簡單的服務。

一般常用於在 Azure 資源上提供自動化的驗證。以安全的方式與其他 Azure服務和資源進行身份驗證和通訊。例如 Managed Identity 可以附加到 Azure 資源,並使用其身份訪問其他 Azure 資源。您可以將其分配給受管理的虛擬機、Azure 函數、Azure App Service 等,以在這些資源之間進行身份驗證和授權。

因此會建議使用 Managed Identity(託管識別)作為在 Azure 中可以安全地獲取資源身份的機制,取代硬編碼或人工管理的連接字串(Connection String)中包含敏感(資訊用戶 ID、密碼或 API 金鑰)的授權方式,這樣就可以避免被盜用的風險。

Azure 提供兩種類型的 Managed Identity(託管識別)

在使用 Managed Identity 時,首先需要在 Azure 中建立 Managed Identity 的資源,將該受控識別綁定至一個或多個 Azure 服務。用受控識別關聯的權限來進行存取。

1. 系統指派的身份識別(System Assigned Managed Identity)

系統指派的受控識別是由 Azure 系統自動分配給定特定資源的身份,這些資源與受控識別關聯,因此需要手動建立

2. 使用者指派的身份識別(UserAssigned Managed Identity)

使用者指派的受控識別是使用者手動建立並指派給特定資源的身份,使用者可以根據需要將其指派給多個資源

What are managed identities for Azure resources?

可參考這篇整個設定流程,將 Web App 套用 UserAssigned Managed Identity 後以身份進行存取 StorageAccount 資源的設計!📙 Migrate an application to use passwordless connections with Azure Blob Storage

  1. Create the managed identity
  2. Associate the managed identity with your web app
  3. Assign roles to the managed identity

使用使用者指派的身分識別來減少系統管理

使用使用者指派的身分識別來減少系統管理,這意思是說:使用「使用者指派的身分識別」只需要兩個角色,而「系統指派的身分識別」要處理八個角色,微軟建議可以思考使用「使用者指派的身分識別」降低在管理的複雜度與成本

App Registration(應用程式註冊)

是個將您的應用程式註冊到 Azure Active Directory(Azure AD)中的過程。這個註冊過程提供了您的應用程式所需的憑證,以安全地訪問 Azure 服務和 API,從而使您的應用程式和服務更加安全和可訪問。作用就像是給您的應用程式一把特殊的鑰匙,讓它可以安全地進入 Azure 服務的世界,並訪問各種資源和用戶資訊。

👣 關鍵步驟

  • 在創建 Azure App Registration 時,需要定義幾個重要的組件,包括應用程式 ID (Client ID)、重定向 URI、客戶端密鑰和 API 權限。這些組件有助於識別您的應用程式並設置其訪問 Azure 資源的權限和方法。
  • ⚠️ Azure 支持單租戶(single-tenant)和多租戶(multi-tenant)兩種類型的應用程式註冊,多租戶應用程式滿適合獨立軟體供應商(ISV)和軟體即服務(SaaS)供應商所使用,例如公司 B 開發了一個 CRM SaaS 應用程序,允許任何使用 Azure AD 的公司註冊並使用該應用程式。而單租戶適用於特定群體或公司,其中用意是應用程式的使用範圍受到較嚴格的限制。
  • 而多租戶還有另一個是,多租戶與 Microsoft 帳戶(Multi-Tenant & Microsoft Account),此模式下的應用程式可以與 Azure AD Tenant 中的使用者以及個人Microsoft 帳戶(如Hotmail、Skype 帳戶等)進行互動。的類型的使用者身份驗證,並且可以透過 Microsoft 帳戶提供服務。
https://merill.net/2023/04/azure-ad-multi-tenant-app-vs-single-tenant-app/

App Registration 和 Managed Identity 不同的場景的選擇

  • Managed Identity 適用於需要簡化身份管理並在 Azure 資源之間進行安全身份驗證的情況。 如果您的應用程式只需要訪問 Azure 資源,而不需要特定的身份驗證協議或角色許可權,那麼 Managed Identity 是一個更簡單和安全的選擇。
  • App Registration 適用於需要使用特定身份驗證協議和應用程式許可權的情況。 例如,如果您的應用程式需要使用 OAuth 2.0 或 OpenID Connect 進行身份驗證,或者需要特定的 Azure AD 許可證和角色許可權,那麼應用程式註冊就是一個合適的選擇。
  • 例如像 Teams Power Virtual Agents(Copilot Studio)或 MS Bot SDK Framework 是 Microsoft 中的一項服務,用於建立和部署自訂的虛擬助手和聊天機器人。在使用 Teams PVA 時,需要進行應用程式註冊的包括需要「身份驗證和授權」,如:Microsoft Graph 等服務進行整合,以便獲取用戶和群組的資訊,也通常使用 OAuth 2.0 進行身份驗證和授權,並與其他 Microsoft 365 服務進行交互,會需要在 Azure Active Directory 中註冊 Teams PVA 應用程式,並配置相應的 OAuth 2.0 設定,不過這些 Power Virtual Agents 都已協助處理掉,使用者不用擔心後面複雜的設定,只需面向機器人制作的流程即可。

--

--

Kellen

Backend(Python)/K8s and Container eco-system/Technical&Product Manager/host Developer Experience/早期投入資料創新與 ETL 工作,近期研究 GCP/Azure/AWS 相關的解決方案的 implementation