使用服務主體在工作區中驗證
有時不適合使用互動式驗證或以用戶帳戶身分進行驗證。 當您想要從 Web 服務、另一個背景工作角色或自動化系統提交作業時,可能會發生這些情況。 其中一個選項是設定受控識別,另一個選項是使用 服務主體,本文將說明這一點。
必要條件:建立服務主體和應用程式秘密
若要以服務主體身分進行驗證,您必須先 建立服務主體。
若要建立服務主體,請指派存取權併產生認證:
-
注意
您不需要設定重新導向 URI。
- 建立之後,記下 應用程式 (用戶端) 識別碼 和 目錄 (租使用者) 識別碼。
建立認證 來以應用程式身分登入:
- 在應用程式的設定中,選取 [ 憑證與秘密]。
- 在 [客戶端密碼] 底下,選取 [建立新秘密]。
- 提供描述和持續時間,然後選取 [ 新增]。
- 立即將秘密的值複製到安全的地方 - 您將無法再次看到它!
為您的服務主體授與存取工作區的許可權:
- 開啟 Azure 入口網站。
- 在搜尋列中,輸入您在 中建立工作區的資源群組名稱。 在結果中出現資源群組時,請選取資源群組。
- 在資源群組概觀上,選取 [訪問控制][IAM]。
- 選取 [新增角色指派]。
- 搜尋並選取服務主體。
- 指派參與者或擁有者角色。
注意
若要在資源群組或工作區上建立角色指派,您必須是 角色指派範圍的擁有者 或 使用者存取系統管理員 。 如果您沒有在訂用帳戶中建立服務主體的許可權,您必須向 Azure 訂用帳戶的擁有者 或 系統管理員 要求許可權。
如果您只有資源群組或工作區層級的許可權,您可以使用下列專案,在參與者角色下建立服務主體:
az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<SUBSCRIPTION-ID>
以服務主體身分進行驗證
選項 1:使用環境變數:物件建立中使用的 Workspace
預設認證是 DefaultAzureCredential,這會嘗試數種類型的驗證。
第一個是 EnvironmentCredential,且透過下列環境變數傳遞服務主體認證:
- AZURE_TENANT_ID:服務主體租用戶的標識符。 也稱為其 『directory』 識別碼。
- AZURE_CLIENT_ID:服務主體的用戶端標識符。
- AZURE_CLIENT_SECRET:其中一個服務主體的客戶端密碼。
選項 2:使用 ClientSecretCredential:在物件具現化期間傳遞 ClientSecretCredential 或設定 credentials
Workspace
屬性。
from azure.identity import ClientSecretCredential
tenant_id = os.environ["AZURE_TENANT_ID"]
client_id = os.environ["AZURE_CLIENT_ID"]
client_secret = os.environ["AZURE_CLIENT_SECRET"]
credential = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
workspace.credentials = credential
注意
方法 workspace.login()
已被取代,而且已不再需要。 第一次呼叫服務時,將會使用傳入建構函式或其 credentials
屬性的Workspace
認證來嘗試驗證。 如果未通過認證,則 DefaultAzureCredential 會嘗試數個驗證方法。