Azure CLI installeren in Azure Stack Hub

U kunt de Azure CLI installeren om Azure Stack Hub te beheren met een Windows- of Linux-computer. Dit artikel begeleidt u bij de stappen voor het installeren en instellen van Azure CLI.

Azure CLI installeren

  1. Meld u aan bij uw ontwikkelwerkstation en installeer CLI. Voor Azure Stack Hub is versie 2.0 of hoger van Azure CLI vereist.

    Belangrijk

    Omdat een CVE van invloed is op Azure CLI-versies voor 2.40.0, wordt het niet langer aanbevolen om Azure CLI 2.29.2 voor AD FS in Azure Stack Hub te gebruiken. U kunt bijwerken naar Azure CLI 2.40.0 of hoger. AD FS-klanten kunnen echter problemen ondervinden met Azure CLI-opdrachten die communiceren met Microsoft Graph-eindpunten. Dit komt omdat Microsoft Graph niet wordt ondersteund voor AD FS. Zie de sectie Algemene bekende problemen voor tijdelijke oplossingen voor problemen met Microsoft Graph.

  2. U kunt de CLI installeren met behulp van de stappen die worden beschreven in het artikel De Azure CLI installeren .

  3. Als u wilt controleren of de installatie is geslaagd, opent u een terminal- of opdrachtpromptvenster en voert u de volgende opdracht uit:

    az --version
    

    U ziet nu de versie van Azure CLI en andere afhankelijke bibliotheken die op uw computer zijn geïnstalleerd.

    Azure CLI op Azure Stack Hub Python-locatie

  4. Noteer de locatie van Python voor de CLI.

Certificaat toevoegen

Exporteer en importeer vervolgens het Azure Stack Hub-certificaat voor niet-verbonden geïntegreerde systemen en voor de ASDK. Voor verbonden geïntegreerde systemen is het certificaat openbaar ondertekend en is deze stap niet nodig. Zie Certificaten instellen voor Azure CLI in Azure Stack Development Kit voor instructies.

Verbinding maken met Azure CLI

In deze sectie wordt u begeleid bij het instellen van CLI als u Microsoft Entra ID gebruikt als identiteitsbeheerservice en CLI op een Windows-computer gebruikt.

Verbinding maken met Azure Stack Hub

  1. Als u de ASDK gebruikt, vertrouwt u het Azure Stack Hub CA-basiscertificaat. Zie Het certificaat vertrouwen voor instructies.

  2. Registreer uw Azure Stack Hub-omgeving door de opdracht uit te az cloud register voeren.

  3. Registreer uw omgeving. Gebruik de volgende parameters bij het uitvoeren az cloud registervan :

    Waarde Voorbeeld Beschrijving
    Omgevingsnaam AzureStackUser Gebruiken AzureStackUser voor de gebruikersomgeving. Als u operator bent, geeft u op AzureStackAdmin.
    Resource Manager-eindpunt https://management.contoso.onmicrosoft.com De ResourceManagerUrl in de ASDK is: https://management.local.azurestack.external/ De ResourceManagerUrl in geïntegreerde systemen is: https://management.<region>.<fqdn>/ Als u een vraag hebt over het geïntegreerde systeemeindpunt, neemt u contact op met uw cloudoperator.
    Opslageindpunt local.contoso.onmicrosoft.com local.azurestack.external is voor de ASDK. Gebruik voor een geïntegreerd systeem een eindpunt voor uw systeem.
    Sleutelkluisachtervoegsel .vault.contoso.onmicrosoft.com .vault.local.azurestack.external is voor de ASDK. Gebruik voor een geïntegreerd systeem een eindpunt voor uw systeem.
    Resource-id van active directory-grafiek van eindpunt https://graph.windows.net/ De resource-id voor Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    U vindt een referentie voor de opdracht registreren in de referentiedocumentatie voor Azure CLI.

  4. Stel de actieve omgeving in met behulp van de volgende opdrachten.

    az cloud set -n <environmentname>
    
  5. Werk uw omgevingsconfiguratie bij om het api-versieprofiel van Azure Stack Hub te gebruiken. Voer de volgende opdracht uit om de configuratie bij te werken:

    az cloud update --profile 2020-09-01-hybrid
    
  6. Meld u aan bij uw Azure Stack Hub-omgeving met behulp van de az login opdracht .

    U kunt zich aanmelden bij de Azure Stack Hub-omgeving met uw gebruikersreferenties of met een service-principal (SPN) die aan u is verstrekt door uw cloudoperator.

    • Aanmelden als gebruiker:

      U kunt de gebruikersnaam en het wachtwoord rechtstreeks opgeven met de opdracht az login of verifiëren met behulp van een browser. U moet het laatste doen als voor uw account meervoudige verificatie is ingeschakeld:

      az login -u "user@contoso.onmicrosoft.com" -p 'Password123!' --tenant contoso.onmicrosoft.com
      

      Notitie

      Als voor uw gebruikersaccount meervoudige verificatie is ingeschakeld, gebruikt u de az login opdracht zonder de -u parameter op te geven. Als u deze opdracht uitvoert, krijgt u een URL en een code die u moet gebruiken om te verifiëren.

    • Aanmelden als een service-principal:

      Voordat u zich aanmeldt, maakt u een service-principal via de Azure Portal of CLI en wijst u deze een rol toe. Meld u nu aan met de volgende opdracht:

      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>
      
  7. Controleer of uw omgeving juist is ingesteld en of uw omgeving de actieve cloud is.

        az cloud list --output table
    

    Als het goed is, ziet u dat uw omgeving wordt vermeld en IsActive is true. Bijvoorbeeld:

    IsActive    Name               Profile
    ----------  -----------------  -----------------
    False       AzureCloud         2020-09-01-hybrid
    False       AzureChinaCloud    latest
    False       AzureUSGovernment  latest
    False       AzureGermanCloud   latest
    True        AzureStackUser     2020-09-01-hybrid
    

De connectiviteit testen

Als alles is ingesteld, gebruikt u CLI om resources te maken in Azure Stack Hub. U kunt bijvoorbeeld een resourcegroep voor een app maken en een VM toevoegen. Gebruik de volgende opdracht om een resourcegroep met de naam MyResourceGroup te maken:

az group create -n MyResourceGroup -l local

Als de resourcegroep is gemaakt, worden met de vorige opdracht de volgende eigenschappen van de zojuist gemaakte resource uitgevoerd:

{
  "id": "/subscriptions/84edee99-XXXX-4f5c-b646-5cdab9759a03/resourceGroups/RGCL11",
  "location": "local",
  "name": "RGCLI1",
  " properties ": {
    "provisioningState": "Succeeded"
  },
  "tags ": null
}

Algemene bekende problemen

De algemene oplossing voor de meeste problemen is het gebruik van de az rest opdracht die gebruikmaakt van de huidige Azure Stack-context, om een REST API-aanroep te maken voor de opdracht die aan het probleem is gekoppeld. De tijdelijke oplossingen in de volgende lijst met problemen kunnen over het algemeen worden aangepast voor andere Azure CLI-problemen, zolang deze problemen worden veroorzaakt door Azure CLI en niet door Azure Stack Hub-resourceproviders of andere Azure Stack Hub-services.

Problemen met Microsoft Graph

Dit zijn de bekende Microsoft Graph-problemen voor Azure CLI 2.40.0 of hoger voor Azure Stack Hub. Dit is voornamelijk van invloed op ADFS-omgevingen, omdat Microsoft Graph niet wordt ondersteund.

  • az keyvault create communiceert met Microsoft Graph. Hier volgt een voorbeeld van een tijdelijke oplossing voor ADFS. De tijdelijke oplossing maakt voornamelijk gebruik van de Azure AD Graph om gebruikersgegevens op te halen, zoals de objectId in plaats van de 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
    

    Zie de naslaginformatie over Key Vault REST API voor meer informatie over Key Vault REST API.

Overige problemen

De volgende problemen zijn niet beperkt tot specifieke versies of bereiken van versies van Azure CLI.

  • az role assignment create wordt momenteel niet ondersteund door Azure CLI voor Azure Stack Hub vanwege een oud API-probleem. De volgende tijdelijke oplossing is vereist voor zowel Microsoft Entra-id als ADFS.
    # 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"
    
    Zie het artikel roltoewijzingen voor meer informatie over de REST API voor roltoewijzingen.

Volgende stappen