Udostępnij przez


Instalowanie Azure CLI na Azure Stack Hub

Interfejs wiersza polecenia platformy Azure można zainstalować w celu zarządzania usługą Azure Stack Hub przy użyciu maszyn z systemem Windows lub Linux. W tym artykule przedstawiono procedurę instalowania i konfigurowania interfejsu wiersza polecenia platformy Azure.

Instalowanie CLI Azure

  1. Zaloguj się do stacji roboczej do celów deweloperskich i zainstaluj interfejs wiersza polecenia (CLI). Usługa Azure Stack Hub wymaga wersji 2.0 lub nowszej interfejsu wiersza polecenia platformy Azure.

    Ważne

    Ze względu na CVE dotyczące wersji Azure CLI wcześniejszych niż 2.40.0, nie zaleca się już używania Azure CLI 2.29.2 dla usług AD FS w Azure Stack Hub. Możesz zaktualizować interfejs wiersza polecenia platformy Azure w wersji 2.40.0 lub nowszej. Jednak klienci usług AD FS mogą napotkać problemy z poleceniami interfejsu wiersza polecenia platformy Azure, które współdziałają z punktami końcowymi programu Microsoft Graph. Dzieje się tak, ponieważ program Microsoft Graph nie jest obsługiwany w usługach AD FS. Aby uzyskać obejścia problemów z programem Microsoft Graph, zobacz sekcję Ogólne znane problemy .

  2. Interfejs wiersza polecenia można zainstalować, wykonując kroki opisane w artykule Instalowanie interfejsu wiersza polecenia platformy Azure .

  3. Aby sprawdzić, czy instalacja zakończyła się pomyślnie, otwórz okno terminalu lub wiersza polecenia i uruchom następujące polecenie:

    az --version
    

    Powinna zostać wyświetlona wersja interfejsu wiersza polecenia platformy Azure i inne zależne biblioteki zainstalowane na komputerze.

    Lokalizacja Pythona dla Azure CLI w Azure Stack Hub

  4. Zanotuj lokalizację języka Python interfejsu wiersza polecenia.

Dodawanie certyfikatu

Wyeksportuj, a następnie zaimportuj certyfikat usługi Azure Stack Hub dla odłączonych systemów zintegrowanych. W przypadku połączonych systemów zintegrowanych certyfikat jest podpisany publicznie i ten krok nie jest konieczny.

Nawiązywanie połączenia za pomocą interfejsu wiersza polecenia platformy Azure

W tej sekcji przedstawiono sposób konfigurowania interfejsu wiersza polecenia, jeśli używasz identyfikatora Entra firmy Microsoft jako usługi zarządzania tożsamościami i używasz interfejsu wiersza polecenia na maszynie z systemem Windows.

Nawiązywanie połączenia z usługą Azure Stack Hub

  1. Zarejestruj środowisko usługi Azure Stack Hub, uruchamiając az cloud register polecenie .

  2. Zarejestruj swoje środowisko. Użyj następujących parametrów podczas uruchamiania az cloud register.

    Wartość Przykład Opis
    Nazwa środowiska AzureStackUser Użyj AzureStackUser dla środowiska użytkownika. Jeśli jesteś operatorem, określ wartość AzureStackAdmin.
    Punkt końcowy usługi Resource Manager https://management.contoso.onmicrosoft.com ResourceManagerUrl w zintegrowanych systemach to: https://management.<region>.<fqdn>/. Jeśli masz pytanie dotyczące zintegrowanego punktu końcowego systemu, skontaktuj się z operatorem chmury.
    Punkt końcowy magazynu local.contoso.onmicrosoft.com W przypadku zintegrowanego systemu użyj punktu końcowego dla systemu.
    Sufiks usługi Keyvault .vault.contoso.onmicrosoft.com W przypadku zintegrowanego systemu użyj punktu końcowego dla systemu.
    Identyfikator zasobu grafu usługi Active Directory punktu końcowego https://graph.microsoft.com/ Identyfikator zasobu usługi Active Directory.
    az cloud register `
        -n <environmentname> `
        --endpoint-resource-manager "https://management.<region>.<fqdn>" `
        --suffix-storage-endpoint "<fqdn>" `
        --suffix-keyvault-dns ".vault.<fqdn>" 
    

    Aby uzyskać więcej informacji, zobacz polecenie register w dokumentacji referencyjnej interfejsu wiersza polecenia platformy Azure.

  3. Ustaw aktywne środowisko przy użyciu następujących poleceń.

    az cloud set -n <environmentname>
    
  4. Zaktualizuj konfigurację środowiska, aby używać profilu wersji interfejsu API specyficznego dla usługi Azure Stack Hub. Aby zaktualizować konfigurację, uruchom następujące polecenie:

    az cloud update --profile 2020-09-01-hybrid
    
  5. Zaloguj się do środowiska usługi Azure Stack Hub przy użyciu az login polecenia .

    Możesz zalogować się do środowiska Azure Stack Hub przy użyciu poświadczeń użytkownika lub głównej usługi (SPN) zapewnionej przez operatora chmury.

    • Zaloguj się jako użytkownik:

    Możesz określić nazwę użytkownika i hasło bezpośrednio w poleceniu az login lub uwierzytelnić się przy użyciu przeglądarki. Musisz uwierzytelnić się przy użyciu przeglądarki, jeśli twoje konto ma włączone uwierzytelnianie wieloskładnikowe:

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

    Uwaga / Notatka

    Jeśli konto użytkownika ma włączone uwierzytelnianie wieloskładnikowe, użyj az login polecenia bez podawania parametru -u . Uruchomienie tego polecenia zapewnia adres URL i kod, którego należy użyć do uwierzytelniania.

    • Zaloguj się jako podmiot usługi:

      Najpierw utwórz jednostkę usługi za pośrednictwem Azure Portal lub CLI i przypisz jej rolę, zanim się zalogujesz. Teraz zaloguj się przy użyciu następującego polecenia:

      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>
      
  6. Sprawdź, czy środowisko jest poprawnie ustawione i czy środowisko jest aktywną chmurą:

    az cloud list --output table
    

    Powinieneś zobaczyć, że twoje środowisko jest wymienione, a IsActive to true. Przykład:

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

Testowanie łączności

Po skonfigurowaniu wszystkich elementów użyj interfejsu wiersza polecenia, aby utworzyć zasoby w usłudze Azure Stack Hub. Możesz na przykład utworzyć grupę zasobów dla aplikacji i dodać maszynę wirtualną. Użyj następującego polecenia, aby utworzyć grupę zasobów o nazwie "MyResourceGroup":

az group create -n MyResourceGroup -l local

Jeśli grupa zasobów zostanie utworzona pomyślnie, poprzednie polecenie wyświetli następujące właściwości nowo utworzonego zasobu:

{
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/RGCL11",
  "location": "local",
  "name": "RGCLI1",
  " properties ": {
    "provisioningState": "Succeeded"
  },
  "tags ": null
}

Ogólne znane problemy

Ogólną poprawką dla większości problemów jest użycie az rest polecenia korzystającego z bieżącego kontekstu usługi Azure Stack w celu wywołania interfejsu API REST dla skojarzonego polecenia z tym problemem. Obejścia na poniższej liście problemów można ogólnie dostosować do innych problemów z interfejsem wiersza polecenia platformy Azure, o ile te problemy są spowodowane przez interfejs wiersza polecenia platformy Azure, a nie dostawców zasobów usługi Azure Stack Hub lub innych usług Azure Stack Hub.

Problemy z programem Microsoft Graph

Są to znane problemy z programem Microsoft Graph dla interfejsu wiersza polecenia platformy Azure w wersji 2.40.0 lub nowszej dla usługi Azure Stack Hub. Dotyczy to głównie środowisk usług AD FS, ponieważ nie obsługują programu Microsoft Graph.

  • az keyvault create współdziała z programem Microsoft Graph. Przykład obejścia dla Active Directory Federation Services (AD FS) jest przedstawiony poniżej. Przede wszystkim obejście używa programu Azure AD Graph do pobierania informacji o użytkowniku, takich jak objectId zamiast programu 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
    

    Aby uzyskać więcej informacji na temat interfejsu API REST usługi Key Vault, zobacz dokumentację interfejsu API REST usługi Key Vault.

Inne problemy

Poniżej przedstawiono problemy nie ograniczone do określonych wersji lub zakresów wersji interfejsu wiersza polecenia platformy Azure.

  • az role assignment create nie jest obecnie obsługiwany przez Azure CLI dla usługi Azure Stack Hub z powodu problemu ze starym interfejsem API. Następujące obejście jest wymagane zarówno dla Microsoft Entra ID, albo AD FS.

    # 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"
    

    Aby uzyskać więcej informacji na temat interfejsu API REST przypisywania ról, zobacz artykuł dotyczący przypisań ról.

Dalsze kroki