共用方式為


使用服務主體在工作區中驗證

有時不適合使用互動式驗證或以用戶帳戶身分進行驗證。 當您想要從 Web 服務、另一個背景工作角色或自動化系統提交作業時,可能會發生這些情況。 其中一個選項是設定受控識別,另一個選項是使用 服務主體,本文將說明這一點。

必要條件:建立服務主體和應用程式秘密

若要以服務主體身分進行驗證,您必須先 建立服務主體

若要建立服務主體,請指派存取權併產生認證:

  1. 建立 Azure AD 應用程式

    注意

    您不需要設定重新導向 URI。

    1. 建立之後,記下 應用程式 (用戶端) 識別碼目錄 (租使用者) 識別碼
  2. 建立認證 來以應用程式身分登入:

    1. 在應用程式的設定中,選取 [ 憑證與秘密]。
    2. 在 [客戶端密碼] 底下,選取 [建立新秘密]。
    3. 提供描述和持續時間,然後選取 [ 新增]。
    4. 立即將秘密的值複製到安全的地方 - 您將無法再次看到它!
  3. 為您的服務主體授與存取工作區的許可權:

    1. 開啟 Azure 入口網站。
    2. 在搜尋列中,輸入您在 中建立工作區的資源群組名稱。 在結果中出現資源群組時,請選取資源群組。
    3. 在資源群組概觀上,選取 [訪問控制][IAM]。
    4. 選取 [新增角色指派]
    5. 搜尋並選取服務主體。
    6. 指派參與者擁有者角色。

注意

若要在資源群組或工作區上建立角色指派,您必須是 角色指派範圍的擁有者使用者存取系統管理員 。 如果您沒有在訂用帳戶中建立服務主體的許可權,您必須向 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 會嘗試數個驗證方法。