使用 Azure 服務的自動化工具應一律具有限制的許可權,以確保 Azure 資源安全。 因此,Azure 提供服務主體這項功能,而不是讓應用程式以具備完整權限的使用者身分登入。 Azure 服務主體是用來搭配應用程式、託管服務和自動化工具使用的身分識別。 此身分識別可用來存取資源。
在本教學課程中,您將瞭解如何:
- 建立服務主體
- 使用服務主體帳號與密碼登入到系統
- 使用服務主體和憑證登入
- 管理服務主體角色
- 使用服務主體建立 Azure 資源
- 重設服務主體認證
先決條件
- 在訂用帳戶中,您必須擁有
User Access Administrator或Role Based Access Control Administrator許可權,或更高的許可權,才能建立服務主體。 如需 Azure 角色型存取控制可用的角色清單(Azure RBAC),請參閱 Azure 內建角色。
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 如果您正在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 若要完成驗證程式,請遵循終端機中顯示的步驟。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
建立服務主體
使用 az ad sp create-for-rbac Azure CLI 參考命令來建立服務主體。
此範例不會指定 --name 參數,因此會自動建立包含時間戳的名稱。
警告
az ad sp create-for-rbac如果另一個物件共用相同的顯示名稱,命令可以修改現有的應用程式或服務主體。 顯示名稱不是唯一的,而且可能會變更,這可能會導致認證遺失或不正確的 RBAC 指派。 請改用 唯一的物件 ID 或應用程式 ID 。
az ad sp create-for-rbac
輸出主控台:
{
"appId": "myAppId",
"displayName": "myServicePrincipalName",
"password": "myServicePrincipalPassword",
"tenant": "myTentantId"
}
如果您未遵守資源命名慣例,並計劃稍後為新的服務主體建立角色和範圍,則不含參數的 az ad sp create-for-rbac 命令是可接受的解決方案。 不過,如果沒有角色和範圍,新的服務主體就無法存取資源。 它只是存在。
當您建立不含參數的服務主體時,也請完成下列步驟:
- 記錄系統指派的密碼,因為您無法再次擷取密碼。 如果您遺失密碼,請使用 az ad sp credential reset 來重設密碼,如重設服務主體認證中所述。
- 使用 az role assignment create 為新的服務主體設定角色指派,如管理服務主體角色中所述。
備註
如果您的帳戶沒有建立服務主體的權限,az ad sp create-for-rbac 會傳回「權限不足,無法完成作業」的錯誤訊息。 請連絡您的Microsoft Entra 系統管理員以建立服務主體。
在使用者設定 [使用者可以註冊應用程式] 已設定為 [無] 的 Microsoft Entra ID 目錄中,您必須是下列其中一個 Microsoft Entra ID 內建角色的成員 (這些內建角色具有動作 microsoft.directory/applications/createAsOwner 或 microsoft.directory/applications/create):
如需 Microsoft Entra ID 中使用者設定的詳細資訊,請參閱限制誰可以建立應用程式。
使用角色和範圍建立服務主體
建立服務主體時,最佳做法是一律指派特定的 --role 和 --scopes。 請遵循下列步驟:
確定正確的角色。
判斷角色時,請一律使用最低許可權原則。 例如,如果您的服務主體只需要存取資源群組內的 Azure 儲存體,請勿將
contributor授予訂用帳戶的許可權。 可以考慮使用像是 儲存體 Blob 資料貢獻者 這樣的專門角色。 如需 Azure RBAC 中可用角色的完整清單,請參閱 Azure 內建角色。取得 scopes 參數的值。
尋找並複製 Azure 資源的資源識別碼 ,新服務主體需要存取。 此資訊通常位於每個資源的 Azure 入口網站 [屬性] 或 [端點] 頁面中。 以下是常見的
--scopes範例,但 依賴您的 資源標識符 來取得實際的格式和值。Scope 範例 訂閱 /subscriptions/mySubscriptionID資源群組 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName虛擬機 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname儲存帳戶檔案服務 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default資料處理站 /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName如需更多範圍範例,請參閱 瞭解 Azure RBAC 的範圍。
建立服務主體。
在此範例中,會建立名為 myServicePrincipalName1 的新服務主體,並具有資源群組 RG1 中所有資源的讀取者許可權。
# Bash script az ad sp create-for-rbac --name myServicePrincipalName1 \ --role reader \ --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1參數
--scopes接受以空格分隔的範圍清單。 在此範例中,會建立名為 myServicePrincipalName2 的新服務主體,並具有資源群組 myRG1 中所有資源的讀取者許可權。 此服務主體也會被授予對位於myRG2中myVM的讀取者許可權。# Bash script az ad sp create-for-rbac --name myServicePrincipalName2 \ --role reader \ --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG2/providers/Microsoft.Compute/virtualMachines/myVM
如果您決定授與給新的服務主體的許可權太少或太多,可以藉由管理服務主體角色來改變許可權。
使用變數建立服務主體
您也可以使用變數建立服務主體:
# Bash script
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id --output tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"
echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName \
--role $roleName \
--scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup
如需服務主體屬性的完整清單,請使用 az ad sp list ,並參閱 取得現有的服務主體。
警告
當您使用 az ad sp create-for-rbac 命令建立 Azure 服務主體時,輸出會包含您必須保護的認證。 請務必不要在程式碼中包含這些認證,或是將認證簽入原始檔控制中。 或者,如果有的話,請考慮使用 受控識別 ,以避免需要使用認證。
後續步驟
既然您已瞭解如何建立 Azure 服務主體,請繼續進行下一個步驟,瞭解如何使用服務主體搭配密碼型驗證。