你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

连接到 Azure Stack Edge 设备上的 Azure 资源管理器

适用范围:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

Azure 资源管理器提供一个管理层,用于在 Azure 订阅中创建、更新和删除资源。 Azure Stack Edge 设备支持用相同的 Azure 资源管理器 API 在本地订阅中创建、更新和删除虚拟机 (VM)。 通过此支持,你能够以与云一致的方式管理设备。

本文介绍如何使用 Azure PowerShell 通过 Azure 资源管理器连接到 Azure Stack Edge 设备上的本地 API。

Azure Stack Edge 设备上的终结点

下表总结了设备上公开的各种终结点、支持的协议以及用于访问这些终结点的端口。 在本文中,你会发现对这些终结点的引用。

# 端点 支持的协议 使用的端口 用途
1. Azure 资源管理器 https 443 连接到 Azure 资源管理器以实现自动化
2. 安全令牌服务 https 443 通过访问和刷新令牌进行身份验证
3. Blob* https 443 通过 REST 连接到 Blob 存储

* 无需连接到 Azure 资源管理器即可连接到 Blob 存储终结点。

连接到 Azure 资源管理器工作流

在使用 Azure 资源管理器连接到设备的本地 API 的过程中,需要执行以下步骤:

步骤编号 你将在此位置执行步骤... .. 。
1. 配置 Azure Stack Edge 设备 本地 Web UI
2. 创建和安装证书 Windows 客户端/本地 Web UI
3. 查看和配置先决条件 Windows 客户端
4. 在客户端上设置 Azure PowerShell Windows 客户端
5. 修改主机文件以进行终结点名称解析 Windows 客户端或 DNS 服务器
6. 检查是否解析了终结点名称 Windows 客户端
7. 使用 Azure PowerShell cmdlet 验证与 Azure 资源管理器的连接 Windows 客户端

以下部分详细介绍了连接到 Azure 资源管理器涉及的上述各个步骤。

先决条件

在开始之前,请确保用于通过 Azure 资源管理器连接到设备的客户端使用的是 TLS 1.2。 有关详细信息,请转到在访问 Azure Stack Edge 设备的 Windows 客户端上配置 TLS 1.2

步骤 1:配置 Azure Stack Edge 设备

在 Azure Stack Edge 设备的本地 Web UI 中执行以下步骤。

  1. 完成 Azure Stack Edge 设备的网络设置。

    Local web UI

    记下设备 IP 地址。 稍后将会使用此 IP。

  2. 在“设备”页中,配置设备名称和 DNS 域。 记下设备名称和 DNS 域,因为稍后将会使用它们。

    Local web UI

    重要

    设备名称和 DNS 域将用于构成公开的终结点。 在本地 Web UI 的“设备”页中使用 Azure 资源管理器和 Blob 终结点。

步骤 2:创建和安装证书

证书可确保通信受信任。 在 Azure Stack Edge 设备上,会自动生成自签名的设备、Blob 和 Azure 资源管理器证书。 此外,也可以选择自带签名的 blob 和 Azure 资源管理器证书。

如果自带签名证书,则还需要证书的相应签名链。 对于签名链、Azure 资源管理器和设备上的 blob 证书,你将需要在客户端计算机上使用相应的证书,以便对设备进行身份验证和与之通信。

若要连接到 Azure 资源管理器,需要创建或获取签名链和终结点证书,将这些证书导入 Windows 客户端,最后在设备上上传这些证书。

创建证书

对于仅测试和开发用途,可以使用 Windows PowerShell 在本地系统上创建证书。 为客户端创建证书时,请遵循以下准则:

  1. 首先,需要为签名链创建根证书。 有关详细信息,请参阅创建签名链证书的步骤。

  2. 接下来,可为 Azure 资源管理器和 Blob(可选)创建终结点证书。 可以从本地 Web UI 中的“设备”页获取这些终结点。 请参阅创建终结点证书的步骤。

  3. 对于所有这些证书,请确保使用者名称和使用者可选名称符合以下准则:

    类型 使用者名称 (SN) 使用者可选名称 (SAN) 使用者名称示例
    Azure 资源管理器 management.<Device name>.<Dns Domain> login.<Device name>.<Dns Domain>
    management.<Device name>.<Dns Domain>
    management.mydevice1.microsoftdatabox.com
    Blob 存储* *.blob.<Device name>.<Dns Domain> *.blob.< Device name>.<Dns Domain> *.blob.mydevice1.microsoftdatabox.com
    两个终结点的多个 SAN 单一证书 <Device name>.<dnsdomain> login.<Device name>.<Dns Domain>
    management.<Device name>.<Dns Domain>
    *.blob.<Device name>.<Dns Domain>
    mydevice1.microsoftdatabox.com

* 无需 Blob 存储即可连接到 Azure 资源管理器。 如果在设备上创建本地存储帐户,该证书将在此处列出。

有关证书的详细信息,请参阅如何在设备中上传证书,以及如何在访问设备的客户端中导入证书

在设备上上传证书

在上一步骤中创建的证书将存储在客户端的“个人”存储中。 这些证书需要在你的客户端上导出为合适的格式文件,然后才能上传到设备。

  1. 根证书必须导出为 DER 格式的文件,文件扩展名为 .cer。 有关详细步骤,请参阅将证书导出为 .cer 格式的文件

  2. 终结点证书必须导出为包含私钥的 .pfx 文件。 有关详细步骤,请参阅将证书导出为包含私钥的 .pfx 文件

  3. 然后,在本地 Web UI 中使用“证书”页上的“+ 添加证书”选项,在设备上上传根证书和终结点证书 。 若要上传证书,请按照上传证书中的步骤操作。

在运行 Azure PowerShell 的客户端上导入证书

将在其中调用 Azure 资源管理器 API 的 Windows 客户端需要与设备建立信任。 为此,必须在 Windows 客户端上将在上一步骤中创建的证书导入到相应的证书存储中。

  1. 现在,应该将导出的扩展名为 .cer 的 DER 格式根证书导入到客户端系统上的“受信任的根证书颁发机构”中。 有关详细步骤,请参阅将证书导入到“受信任的根证书颁发机构”存储

  2. 导出为 .pfx 的终结点证书必须导出为 .cer 。 然后,将该 .cer 导入到系统上的“个人”证书存储中。 有关详细步骤,请参阅证书导入到个人存储

步骤 3:在客户端安装 PowerShell

Windows 客户端必须满足以下先决条件:

  1. 运行 PowerShell 版本 5.0。 必须使用 PowerShell 版本 5.0。 若要查看系统上的 PowerShell 的版本,请运行以下 cmdlet:

    $PSVersionTable.PSVersion
    

    比较主版本,并确保其为 5.0 或更高版本。

    如果版本已过时,请参阅升级现有的 Windows PowerShell

    如果没有 PowerShell 5.0,请按照安装 Windows PowerShell 中的说明进行操作。

    输出示例如下所示。

    Windows PowerShell
    Copyright (C) Microsoft Corporation. All rights reserved. 
    Try the new cross-platform PowerShell https://aka.ms/pscore6
    PS C:\windows\system32> $PSVersionTable.PSVersion
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      19041  906
    
  2. 可以访问 PowerShell 库。

    以管理员身份运行 PowerShell。 验证 PowerShellGet 版本是否低于 2.2.3。 此外,验证 PSGallery 是否已注册为存储库。

    Install-Module PowerShellGet –MinimumVersion 2.2.3
    Import-Module -Name PackageManagement -ErrorAction Stop
    Get-PSRepository -Name "PSGallery"
    

    输出示例如下所示。

    PS C:\windows\system32> Install-Module PowerShellGet –MinimumVersion 2.2.3
    PS C:\windows\system32> Import-Module -Name PackageManagement -ErrorAction Stop
    PS C:\windows\system32> Get-PSRepository -Name "PSGallery"
    Name                      InstallationPolicy   SourceLocation
    ----                      ------------------   --------------
    PSGallery                 Trusted              https://www.powershellgallery.com/api/v2
    

如果存储库不受信任,或需要了解详细信息,请参阅验证 PowerShell 库的可访问性

步骤 4:在客户端上设置 Azure PowerShell

你将在客户端上安装 Azure PowerShell 模块(将与设备一起使用)。

  1. 以管理员身份运行 PowerShell。 需访问 PowerShell 库。

  2. 首先验证客户端上是否有现有的 AzureRMAz 模块版本。 要进行检查,请运行以下命令:

    # Check existing versions of AzureRM modules
    Get-InstalledModule -Name AzureRM -AllVersions
    
    # Check existing versions of Az modules
    Get-InstalledModule -Name Az -AllVersions
    

    如果有现有版本,请使用 Uninstall-Module cmdlet 将其卸载。 有关详细信息,请参阅

  3. 若要从 PowerShell 库安装所需的 Azure PowerShell 模块,请运行以下命令:

    • 如果客户端使用 PowerShell Core 7.0 和更高版本:

      # Install the Az.BootStrapper module. Select Yes when prompted to install NuGet.
      
      Install-Module -Name Az.BootStrapper
      
      # Install and import the API Version Profile into the current PowerShell session.
      
      Use-AzProfile -Profile 2020-09-01-hybrid -Force
      
      # Confirm the installation of PowerShell
      Get-Module -Name "Az*" -ListAvailable
      
    • 如果客户端使用 PowerShell 5.1 和更高版本:

      #Install the Az module version 1.10.0
      
      Install-Module –Name Az –RequiredVersion 1.10.0    
      
  4. 确保在安装结束时运行 Az 模块版本 1.10.0。

    如果使用了 PowerShell Core 7.0 和更高版本,则以下示例输出将指示已成功安装 Az 版本 1.10.0 模块。

    
    PS C:\windows\system32> Install-Module -Name Az.BootStrapper
    PS C:\windows\system32> Use-AzProfile -Profile 2020-09-01-hybrid -Force
    Loading Profile 2020-09-01-hybrid
    PS C:\windows\system32> Get-Module -Name "Az*" -ListAvailable
    

    如果使用了 PowerShell 5.1 和更高版本,则以下示例输出将指示已成功安装 Az 版本 1.10.0 模块。

    PS C:\WINDOWS\system32> Get-InstalledModule -Name Az -AllVersions
    Version              Name                                Repository           Description
    -------              ----                                ----------           ------
    1.10.0               Az                                  PSGallery            Mic...  
    
    PS C:\WINDOWS\system32>
    

步骤 5:修改主机文件以进行终结点名称解析

现在将设备 IP 地址添加到:

  • 客户端上的主机文件,或
  • DNS 服务器配置

重要

建议修改终结点名称解析的 DNS 服务器配置。

请在用于连接到设备的 Windows 客户端上执行以下步骤:

  1. 以管理员身份启动记事本,然后打开位于 C:\Windows\System32\Drivers\etc 的 hosts 文件 。

    Windows Explorer hosts file

  2. 将以下条目添加到 hosts 文件,替换为设备的适当值:

    <Device IP> login.<appliance name>.<DNS domain>
    <Device IP> management.<appliance name>.<DNS domain>
    <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
    

    重要

    hosts 文件中的条目应与提供用于在后面的步骤中连接到 Azure 资源管理器的条目完全匹配。 确保此处的 DNS 域条目均采用小写形式。 若要获取 <appliance name><DNS domain> 的值,请在设备的本地 UI 中转到“设备”页。

    在前面的步骤中,你已从本地 Web UI 保存了设备 IP。

    login.<appliance name>.<DNS domain> 条目是安全令牌服务 (STS) 的终结点。 STS 负责创建、验证、续订和取消安全令牌。 安全令牌服务用于创建访问令牌和刷新令牌,这些令牌用于在设备和客户端之间进行连续通信。

    连接到 Azure 资源管理器时,Blob 存储的终结点是可选的。 通过存储帐户将数据传输到 Azure 时需要此终结点。

  3. 请使用以下图像作为参考。 保存 hosts 文件。

    hosts file in Notepad

步骤 6:验证客户端上的终结点名称解析

检查在用于连接到设备的客户端上是否解析了终结点名称。

  1. 可以使用 ping.exe 命令行实用工具来检查是否解析了终结点名称。 指定 IP 地址后,ping 命令将返回所跟踪的计算机的 TCP/IP 主机名。

    如下例所示,将 -a 开关添加到命令行。 如果主机名是可返回的,则还会在回复中返回此可能有价值的信息。

    Ping in command prompt

步骤 7:设置 Azure 资源管理器环境

设置 Azure 资源管理器环境,并验证设备通过 Azure 资源管理器与客户端进行的通信是否正常工作。 请执行以下步骤进行此验证:

  1. 使用 Add-AzEnvironment cmdlet 进一步确保通过 Azure 资源管理器进行的通信正常工作,并且 API 调用通过 Azure 资源管理器专用端口 443。

    Add-AzEnvironment cmdlet 会添加终结点和元数据,使 Azure 资源管理器 cmdlet 能够与新的 Azure 资源管理器实例连接。

    重要

    在下面的 cmdlet 中提供的 Azure 资源管理器终结点 URL 是区分大小写的。 请确保终结点 URL 全部采用小写形式,并与 hosts 文件中提供的 URL 匹配。 如果大小写不匹配,则会出现错误。

    Add-AzEnvironment -Name <Environment Name> -ARMEndpoint "https://management.<appliance name>.<DNSDomain>/"
    

    下面显示了示例输出:

    PS C:\WINDOWS\system32> Add-AzEnvironment -Name AzASE -ARMEndpoint "https://management.myasegpu.wdshcsso.com/"
    
    Name  Resource Manager Url                      ActiveDirectory Authority
    ----  --------------------                      -------------------------
    AzASE https://management.myasegpu.wdshcsso.com/ https://login.myasegpu.wdshcsso.c...
    
  2. 将环境设置为 Azure Stack Edge,将用于 Azure 资源管理器调用的端口设置为 443。 可以通过两种方式定义环境:

    • 设置环境。 键入以下命令:

      Set-AzEnvironment -Name <Environment Name>
      

      下面是示例输出。

      PS C:\WINDOWS\system32> Set-AzEnvironment -Name AzASE
      
      Name  Resource Manager Url                      ActiveDirectory Authority
      ----  --------------------                      -------------------------
      AzASE https://management.myasegpu.wdshcsso.com/ https://login.myasegpu.wdshcsso.c...     
      

      有关详细信息,请转到 Set-AzEnvironment

    • 针对执行的每个 cmdlet 定义内联环境。 这可确保通过正确的环境进行所有 API 调用。 默认情况下,调用将通过 Azure 公有云,但你希望这些调用通过为 Azure Stack Edge 设备设置的环境。

    • 有关详细信息,请参阅如何切换 Az 环境

  3. 调用本地设备 API 来对与 Azure 资源管理器的连接进行身份验证。

    1. 这些凭据适用于本地计算机帐户,并且仅用于 API 访问。

    2. 可以通过 login-AzAccountConnect-AzAccount 命令进行连接。

      1. 若要登录,请键入以下命令。

        $pass = ConvertTo-SecureString "<Your password>" -AsPlainText -Force;
        $cred = New-Object System.Management.Automation.PSCredential("EdgeArmUser", $pass)
        Connect-AzAccount -EnvironmentName AzASE -TenantId c0257de7-538f-415c-993a-1b87a031879d -credential $cred
        

        使用租户 ID c0257de7-538f-415c-993a-1b87a031879d,因为在此实例中,该 ID 已经过硬编码。 使用以下用户名和密码。

        下面是 Connect-AzAccount 的示例输出:

        PS C:\windows\system32> $pass = ConvertTo-SecureString "<Your password>" -AsPlainText -Force;
        PS C:\windows\system32> $cred = New-Object System.Management.Automation.PSCredential("EdgeArmUser", $pass)
        PS C:\windows\system32> Connect-AzAccount -EnvironmentName AzASE -TenantId c0257de7-538f-415c-993a-1b87a031879d -credential $cred
        
        Account       SubscriptionName   TenantId            Environment
        -------       ----------------   --------            -----------
        EdgeArmUser@localhost Default Provider Subscription c0257de7-538f-415c-993a-1b87a031879d AzASE
        
        PS C:\windows\system32>
        

        另一种登录方式是使用 login-AzAccount cmdlet。

        login-AzAccount -EnvironmentName <Environment Name> -TenantId c0257de7-538f-415c-993a-1b87a031879d

        下面是示例输出。

        PS C:\WINDOWS\system32> login-AzAccount -EnvironmentName AzASE -TenantId c0257de7-538f-415c-993a-1b87a031879d
        
        Account               SubscriptionName              TenantId
        -------               ----------------              --------
        EdgeArmUser@localhost Default Provider Subscription c0257de7-538f-415c-993a-1b87a...            
        
        PS C:\WINDOWS\system32>
        
  4. 若要验证是否能够正常连接到设备,请使用 Get-AzResource 命令。 此命令应返回设备本地存在的所有资源。

    下面是示例输出。

    PS C:\WINDOWS\system32> Get-AzResource
    
    Name              : aseimagestorageaccount
    ResourceGroupName : ase-image-resourcegroup
    ResourceType      : Microsoft.Storage/storageaccounts
    Location          : dbelocal
    ResourceId        : /subscriptions/.../resourceGroups/ase-image-resourcegroup/providers/Microsoft.Storage/storageac
                        counts/aseimagestorageaccount
    Tags              :
    
    Name              : myaselinuxvmimage1
    ResourceGroupName : ASERG
    ResourceType      : Microsoft.Compute/images
    Location          : dbelocal
    ResourceId        : /subscriptions/.../resourceGroups/ASERG/providers/Microsoft.Compute/images/myaselinuxvmimage1
    Tags              :
    
    Name              : ASEVNET
    ResourceGroupName : ASERG
    ResourceType      : Microsoft.Network/virtualNetworks
    Location          : dbelocal
    ResourceId        : /subscriptions/.../resourceGroups/ASERG/providers/Microsoft.Network/virtualNetworks/ASEVNET
    Tags              :
    
    PS C:\WINDOWS\system32>  
    

如果遇到 Azure 资源管理器连接问题,请参阅排查 Azure 资源管理器问题以获取指导。

重要

与 Azure 资源管理器的连接每 1.5 小时或每当 Azure Stack Edge 设备重启时过期一次。 如果发生这种情况,所执行的任何 cmdlet 都将返回错误消息,表示不再连接到 Azure。 需重新登录。

切换环境

你可能需要在两个环境之间切换。

运行 Disconnect-AzAccount 命令以切换到其他 AzEnvironment。 如果在不使用 Disconnect-AzAccount 的情况下使用 Set-AzEnvironmentLogin-AzAccount,则实际上不会切换环境。

下面的示例演示如何在 AzASE1AzASE2 这两个环境之间进行切换。

首先,列出客户端上所有的现有环境。

PS C:\WINDOWS\system32> Get-AzEnvironment​
Name    Resource Manager Url     ActiveDirectory Authority​
----    --------------------      -------------------------​
AzureChinaCloud   https://management.chinacloudapi.cn/                 https://login.chinacloudapi.cn/​
AzureCloud        https://management.azure.com/                        https://login.microsoftonline.com/​
AzureGermanCloud  https://management.microsoftazure.de/                https://login.microsoftonline.de/​
AzDBE1            https://management.HVTG1T2-Test.microsoftdatabox.com https://login.hvtg1t2-test.microsoftdatabox.com/adfs/​
AzureUSGovernment https://management.usgovcloudapi.net/                https://login.microsoftonline.us/​
AzDBE2            https://management.CVV4PX2-Test.microsoftdatabox.com https://login.cvv4px2-test.microsoftdatabox.com/adfs/​

接下来,通过 Azure 资源管理器获取当前所连接到的环境。

PS C:\WINDOWS\system32> Get-AzContext |fl *​
​​
Name               : Default Provider Subscription (...) - EdgeArmUser@localhost​
Account            : EdgeArmUser@localhost​
Environment        : AzDBE2​
Subscription       : ...​
Tenant             : c0257de7-538f-415c-993a-1b87a031879d​
TokenCache         : Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache​
VersionProfile     :​
ExtendedProperties : {}​

现在,应与当前环境断开连接,然后再切换到其他环境。

PS C:\WINDOWS\system32> Disconnect-AzAccount​
​​
Id                    : EdgeArmUser@localhost​
Type                  : User​
Tenants               : {c0257de7-538f-415c-993a-1b87a031879d}​
AccessToken           :​
Credential            :​
TenantMap             : {}​
CertificateThumbprint :​
ExtendedProperties    : {[Subscriptions, ...], [Tenants, c0257de7-538f-415c-993a-1b87a031879d]}

登录到其他环境。 下面显示了示例输出。

PS C:\WINDOWS\system32> Login-AzAccount -Environment "AzDBE1" -TenantId $ArmTenantId​
​
Account     SubscriptionName   TenantId        Environment​
-------     ----------------   --------        -----------​
EdgeArmUser@localhost Default Provider Subscription c0257de7-538f-415c-993a-1b87a031879d AzDBE1

运行此 cmdlet,以确认所连接到的环境。

PS C:\WINDOWS\system32> Get-AzContext |fl *​
​​
Name               : Default Provider Subscription (...) - EdgeArmUser@localhost​
Account            : EdgeArmUser@localhost​
Environment        : AzDBE1​
Subscription       : ...
Tenant             : c0257de7-538f-415c-993a-1b87a031879d​
TokenCache         : Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache​
VersionProfile     :​
ExtendedProperties : {}

现已切换到预期的环境。