在 Azure Stack Hub 上安裝 Azure CLI
您可以安裝 Azure CLI,以使用 Windows 或 Linux 機器來管理 Azure Stack Hub。 本文將逐步引導您完成安裝和設定 Azure CLI 的步驟。
安裝 Azure CLI
登入您的開發工作站並安裝 CLI。 Azure Stack Hub 需要有 Azure CLI 2.0 版或更新版本。
您可以使用安裝 Azure CLI 一文中所述的步驟來安裝 CLI。
若要確認安裝是否成功,請開啟終端機或命令提示字元視窗,並執行下列命令:
az --version
您應該會看到 Azure CLI 的號碼和您電腦上安裝的其他相依程式庫。
記下 CLI 的 Python 位置。
新增憑證
匯出並匯入已中斷連線整合系統及 ASDK 的 Azure Stack Hub 憑證。 已連線的整合式系統會公開簽署憑證,因此不必進行此步驟。 如需指示,請參閱 在 Azure Stack 開發工具組上設定 Azure CLI 的憑證。
使用 Azure CLI 連線
如果您使用的是Microsoft Entra識別碼作為身分識別管理服務,並在 Windows 電腦上使用 CLI,本節將逐步引導您設定 CLI。
連線至 Azure Stack Hub
如果您使用的是 ASDK,請信任 Azure Stack Hub CA 根憑證。 如需指示,請參閱信任憑證。
執行
az cloud register
命令來註冊 Azure Stack Hub 環境。註冊您的環境。 在執行
az cloud register
時使用下列參數:值 範例 描述 環境名稱 AzureStackUser 針對使用者環境,請使用 AzureStackUser
。 如果您是操作員,請指定AzureStackAdmin
。Resource Manager 端點 https://management.contoso.onmicrosoft.com
在 ASDK 中的 ResourceManagerUrl 為: https://management.local.azurestack.external/
;在整合式系統中的 ResourceManagerUrl 為:https://management.<region>.<fqdn>/
。如果您有整合式系統端點的相關問題,請聯絡您的雲端操作員。儲存體端點 local.contoso.onmicrosoft.com local.azurestack.external
適用於 ASDK。 若為整合系統,請使用您系統的端點。Keyvault 尾碼 .vault.contoso.onmicrosoft.com .vault.local.azurestack.external
適用於 ASDK。 若為整合系統,請使用您系統的端點。端點 active directory 圖表資源識別碼 https://graph.windows.net/ Active Directory 資源識別碼。 az cloud register ` -n <environmentname> ` --endpoint-resource-manager "https://management.<region>.<fqdn>" ` --suffix-storage-endpoint "<fqdn>" ` --suffix-keyvault-dns ".vault.<fqdn>"
您可以在 Azure CLI 參考文件中找到註冊命令的參考。
使用下列命令來設定作用中環境。
az cloud set -n <environmentname>
將您的環境組態更新成使用 Azure Stack Hub 特定的 API 版本設定檔。 若要更新組態,請執行下列命令:
az cloud update --profile 2020-09-01-hybrid
使用
az login
命令來登入 Azure Stack Hub 環境。您可以使用使用者認證,或雲端操作員提供的服務主體 (SPN),登入 Azure Stack Hub 環境。
以「使用者」身分登入:
您可以直接在
az login
命令內指定使用者名稱和密碼,或使用瀏覽器進行驗證。 如果您的帳戶已啟用多重要素驗證,則必須採用後者方式:az login -u "user@contoso.onmicrosoft.com" -p 'Password123!' --tenant contoso.onmicrosoft.com
注意
如果您的使用者帳戶已啟用多重要素驗證,請使用
az login
命令,而不需提供-u
參數。 執行此命令可提供您一個 URL 以及必須用來進行驗證的代碼。使用服務主體來登入:
在登入之前,請透過 Azure 入口網站或 CLI 建立服務主體,並為它指派角色。 現在,請使用下列命令登入:
az login ` --tenant <Azure Active Directory Tenant name. ` For example: myazurestack.onmicrosoft.com> ` --service-principal ` -u <Application Id of the Service Principal> ` -p <Key generated for the Service Principal>
確認您的環境已正確設定,且為使用中的雲端。
az cloud list --output table
您應該會看到系統列出您的環境,且 IsActive 為
true
。 例如:IsActive Name Profile ---------- ----------------- ----------------- False AzureCloud 2020-09-01-hybrid False AzureChinaCloud latest False AzureUSGovernment latest False AzureGermanCloud latest True AzureStackUser 2020-09-01-hybrid
測試連線
一切都已準備就緒後,請使用 CLI 在 Azure Stack Hub 中建立資源。 例如,您可以建立應用程式的資源群組並新增 VM。 若要建立名為 "MyResourceGroup" 的資源群組,請使用下列命令:
az group create -n MyResourceGroup -l local
如果資源群組成功建立,先前的命令會輸出新建立資源的下列內容:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/RGCL11",
"location": "local",
"name": "RGCLI1",
" properties ": {
"provisioningState": "Succeeded"
},
"tags ": null
}
一般已知問題
大部分問題的一般修正是使用 az rest
使用目前 Azure Stack 內容的命令,針對與問題相關聯的命令進行 REST API 呼叫。 只要這些問題是由 Azure CLI 所造成,而不是 Azure Stack Hub 資源提供者或其他 Azure Stack Hub 服務,下列問題清單中的因應措施通常會針對其他 Azure CLI 問題進行調整。
Microsoft Graph 問題
這些是 Azure Stack Hub 的 Azure CLI 2.40.0 或更新版本已知 Microsoft Graph 問題。 這主要會影響 ADFS 環境,因為它不支援 Microsoft Graph。
az keyvault create
與 Microsoft Graph 互動。 以下是 ADFS 的範例因應措施。 主要是,因應措施會使用 Azure AD Graph 來擷取使用者資訊,例如objectId
,而不是 Microsoft Graph。# First, sign into Azure CLI account you want to create the Key Vault from. # TODO: change the principal name to name of principal you want to create the key vault with. $principalNameLike = "CloudUser*" # TODO: change location to your preference. $location = "local" $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv $tenantId = az account show --query tenantId --output tsv if ($aadGraph[-1] -ne '/') { $aadGraph += '/' } $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" ` | ConvertFrom-Json ` | Select-Object -ExpandProperty value ` | Where-Object {$_.userPrincipalName -like $principalNameLike} $body = '{ "location": "' + $location + '", "properties": { "tenantId": "' + $tenantId + '", "sku": { "family": "A", "name": "standard" }, "accessPolicies": [ { "tenantId": "' + $tenantId + '", "objectId": "' + $userObject.objectId + '", "permissions": { "keys": [ "get", "create", "delete", "list", "update", "import", "backup", "restore", "recover" ], "secrets": [ "get", "list", "set", "delete", "backup", "restore", "recover" ], "certificates": [ "get", "list", "delete", "create", "import", "update", "managecontacts", "getissuers", "listissuers", "setissuers", "deleteissuers", "manageissuers", "recover" ], "storage": [ "get", "list", "delete", "set", "update", "regeneratekey", "setsas", "listsas", "getsas", "deletesas" ] } } ], "enabledForDeployment": true, "enabledForTemplateDeployment": true } }' $body | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json") $resourceGroupName = "testrg123" az group create -n $resourceGroupName -l $location $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv if ($armEndpoint[-1] -ne '/') { $armEndpoint += '/' } $subscriptionId = az account show --query id --output tsv $keyVaultName = "testkv123" az rest --method put --url "${armEndpoint}subscriptions/${subscriptionId}/resourceGroups/${resourceGroupName}/providers/Microsoft.KeyVault/vaults/${keyVaultName}?api-version=2016-10-01" --body `@body.json # OPTIONAL: test access to the Key Vault. # az keyvault secret set --name MySecretName --vault-name $keyVaultName --value MySecret
如需金鑰保存庫 REST API 的詳細資訊,請參閱 金鑰保存庫 REST API 參考。
其他問題
以下是不限於特定版本或 Azure CLI 版本範圍的問題。
-
az role assignment create
Azure CLI for Azure Stack Hub 目前不支援,因為舊的 API 問題。 Microsoft Entra識別碼或 ADFS 都需要下列因應措施。
如需角色指派 REST API 的詳細資訊, 請參閱角色指派一文。# First, sign into account with access to the resource that is being given access or a role to another user. # TODO: change the principal name to name of principal you want to assign the role to. $principalNameLike = "CloudUser*" # TODO: change role name to your preference. $roleName = "Owner" # TODO: change location to your preference. $location = "local" $aadGraph = az cloud show --query endpoints.activeDirectoryGraphResourceId --output tsv $tenantId = az account show --query tenantId --output tsv if ($aadGraph[-1] -ne '/') { $aadGraph += '/' } $userObject = az rest --method get --url "${aadGraph}${tenantId}/users?api-version=1.6" ` | ConvertFrom-Json ` | Select-Object -ExpandProperty value ` | Where-Object {$_.userPrincipalName -like $principalNameLike} $roleDefinitionId = az role definition list --query "[?roleName=='${roleName}'].id" --output tsv $body = @{ properties = @{ roleDefinitionId = $roleDefinitionId principalId = $userObject.objectId } } $body | ConvertTo-Json | Out-File -FilePath (Join-Path -Path "." -ChildPath "body.json") $resourceGroupName = "testrg123" az group create -n $resourceGroupName -l $location $armEndpoint = az cloud show --query endpoints.resourceManager --output tsv if ($armEndpoint[-1] -ne '/') { $armEndpoint += '/' } $scope = az group show --name $resourceGroupName --query id --output tsv $guid = (New-Guid).ToString() az rest --method put --url "${armEndpoint}${scope}/providers/Microsoft.Authorization/roleAssignments/${guid}?api-version=2015-07-01" --body `@body.json # OPTIONAL: test access to the resource group, or use the portal. # az login -u <assigned user name> -p <assigned user password> --tenant $tenantId # Test a resource creation command in the resource group: # az network dns zone create -g $resourceGroupName -n "www.mysite.com"