使用 Azure CLI 來建立 Azure 服務主體
使用 Azure 服務的自動化工具應一律具有限制的許可權,以確保 Azure 資源安全。 因此,Azure 提供服務主體,而不是讓應用程式以完全特殊許可權的使用者身分登入。 Azure 服務主體是用來搭配應用程式、託管服務和自動化工具使用的身分識別。 此身分識別可用來存取資源。
在本教學課程中,您會了解如何:
- 建立服務主體
- 使用服務主體和密碼登入
- 使用服務主體和憑證登入
- 管理服務主體角色
- 使用服務主體建立 Azure 資源
- 重設服務主體認證
必要條件
- 在訂用帳戶中,您必須擁有
User Access Administrator
或 許可權或Role Based Access Control Administrator
更高許可權,才能建立服務主體。 如需 Azure 角色型存取控制可用的角色清單(Azure RBAC),請參閱 Azure 內建角色 。
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
建立服務主體
使用 az ad sp create-for-rbac Azure CLI 參考命令來建立服務主體。 此範例不會指定 --name
參數,因此會自動建立包含時間戳記的名稱。
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 為新的服務主體設定角色指派,如管理服務主體角色 中所述 。
使用角色和範圍建立服務主體
最佳做法是一律指派特定 --role
和 --scopes
建立服務主體時。 執行下列步驟:
判斷正確的角色。
判斷角色時,請一律使用最低許可權原則。 例如,如果服務主體只需要存取資源群組內的 Azure 儲存體,請勿將服務主體
contributor
許可權授與訂用帳戶。 請考慮特定角色,例如 儲存體 Blob 資料參與者 。 如需 Azure RBAC 中可用角色的完整清單,請參閱 Azure 內建角色 。取得 scopes 參數的值。
尋找並複製 Azure 資源的資源識別碼 ,新服務主體需要存取。 此資訊通常位於每個資源的 Azure 入口網站 [屬性 ] 或 [端點 ] 頁面中。 以下是常見的
--scopes
範例,但 依賴您的 資源識別碼 來取得實際的格式和值 。範圍 範例 訂用帳戶 /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 服務主體,請繼續進行下一個步驟,瞭解如何使用服務主體搭配密碼型驗證。