使用 Azure CLI 配置一个标准服务端点

本文将带你了解如何使用Azure CLI配置标准服务端点。 你创建一个公共IP地址作为网络标识符,将其关联到子网上的服务端点,配置网络安全边界,并验证连接性。

Important

标准服务端点目前处于公开预览阶段。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持,或者可能具有受限功能。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

Prerequisites

  • 拥有有效订阅的 Azure 帐户。 如果没有,请创建一个试用版订阅

  • 在该订阅上具有网络参与者角色或更高权限。 具体来说,你需要获得 Microsoft.Network/publicIPAddresses/joinServiceEndpointNetworkIdentifier/action 许可。 欲了解更多信息,请参见 基于角色的网络安全边界访问控制要求

  • 标准服务终结点目前放在功能标志后面。 在进行配置之前,请使用以下自助服务命令在你的订阅中注册 AllowServiceEndpointNetworkIdentifier 功能:

    az feature register \
        --namespace Microsoft.Network \
        --name AllowServiceEndpointNetworkIdentifier
    

    验证注册状态:

    az feature show \
        --namespace Microsoft.Network \
        --name AllowServiceEndpointNetworkIdentifier \
        --query "properties.state" \
        --output tsv
    

    等待状态显示为 已注册,然后刷新资源提供者注册:

    az provider register --namespace Microsoft.Network
    
  • Azure CLI version 2.x 或更后版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

  • 如需在本地运行 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 group create 创建资源组。

az group create \
  --name test-rg \
  --location chinaeast2

创建虚拟网络

使用 az network vnet create 创建一个虚拟网络和子网。

az network vnet create \
  --resource-group test-rg \
  --name vnet-1 \
  --address-prefix 10.0.0.0/16 \
  --subnet-name subnet-1 \
  --subnet-prefix 10.0.0.0/24 \
  --location chinaeast2

创建 NAT 网关

创建一个NAT网关v2,并将其关联到 子网1 ,为虚拟机提供出站互联网连接。

  1. az network public-ip create为NAT网关创建一个公共IP地址。

    az network public-ip create \
      --resource-group test-rg \
      --name public-ip-nat \
      --sku Standard \
      --allocation-method Static \
      --location chinaeast2
    
  2. az network nat gateway create创建一个NAT网关。

    az network nat gateway create \
      --resource-group test-rg \
      --name nat-gateway \
      --location chinaeast2 \
      --public-ip-addresses public-ip-nat \
      --idle-timeout 4  
    
  3. 使用 az network vnet subnet update 将 NAT 网关与 subnet-1 关联。

    az network vnet subnet update \
      --resource-group test-rg \
      --vnet-name vnet-1 \
      --name subnet-1 \
      --nat-gateway nat-gateway
    

部署 Azure Bastion

Azure Bastion 使用浏览器通过其专用 IP 地址通过安全外壳(SSH)或远程桌面协议(RDP)连接到虚拟网络中的 VM。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion

注释

无论出站数据使用情况如何,按小时定价都从部署 Bastion 的时间开始算起。 有关详细信息,请参阅 定价SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在使用完此资源后将其删除。

使用 az network bastion create 创建 Azure Bastion 主机。

az network bastion create \
  --name bastion \
  --resource-group test-rg \
  --vnet-name vnet-1 \
  --location chinaeast2 \
  --sku Basic

创建虚拟机

在虚拟网络中创建一个名为 vm-1 的虚拟机。 虚拟机用于配置后的连接验证。

使用 az vm create 创建虚拟机。

az vm create \
  --resource-group test-rg \
  --name vm-1 \
  --image Ubuntu2204 \
  --vnet-name vnet-1 \
  --subnet subnet-1 \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-address "" \
  --nsg nsg-1

注释

具有 Azure Bastion 主机的虚拟网络中的虚拟机不需要公共 IP 地址。 Bastion 提供公共 IP,虚拟机使用专用 IP 在网络中进行通信。 可以从 Bastion 托管的虚拟网络的任何虚拟机中删除公共 IP。 有关详细信息,请参阅 将公共 IP 地址与 Azure VM 取消关联

注释

Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。

发生以下事件之一时,将禁用默认出站访问 IP:

  • 将公共 IP 地址分配给 VM。
  • 虚拟机被放置在标准负载均衡器的后端池中,可以有出站规则,也可以没有。
  • 向 VM 的子网分配了 Azure NAT 网关资源。

在灵活协调模式下使用虚拟机规模集创建的 VM 没有默认的出站访问。

有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问 ,并使用 源网络地址转换(SNAT)进行出站连接

在虚拟机上安装工具

通过使用 az vm run-command invoke 运行 shell 脚本,在虚拟机上安装 cifs-utilsAzure CLI

az vm run-command invoke \
  --resource-group test-rg \
  --name vm-1 \
  --command-id RunShellScript \
  --scripts "sudo apt-get update && sudo apt-get install -y cifs-utils && curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash"

创建存储帐户

创建一个带有文件共享的 Azure 存储账户,作为测试服务端点连接性的 PaaS 资源。

  1. az storage account create创建一个存储账户。 用一个全球唯一的名称替换 <storage-account-name>

    az storage account create \
      --name <storage-account-name> \
      --resource-group test-rg \
      --location chinaeast2 \
      --sku Standard_LRS \
      --kind StorageV2
    
  2. 使用 az storage share-rm create 创建文件共享。

    az storage share-rm create \
      --resource-group test-rg \
      --storage-account <storage-account-name> \
      --name fileshare-1
    

创建公共 IP 前缀

创建公共 IP 前缀和公共 IP 地址实例以用作网络标识符。

  1. 使用 az network public-ip prefix create 创建公共 IP 前缀

    az network public-ip prefix create \
      --resource-group test-rg \
      --name public-ip-prefix \
      --length 31 \
      --location chinaeast2
    
  2. az network public-ip create从前缀创建一个公共IP地址。

    az network public-ip create \
      --resource-group test-rg \
      --name public-ip-1 \
      --public-ip-prefix public-ip-prefix \
      --sku Standard \
      --allocation-method Static
    

配置服务端点并使用网络标识符

这一步是标准服务端点的关键配置。 你将公共IP地址作为网络标识符与子网上的服务端点关联。

网络标识符是你分配给服务端点的公共IP地址。 公网IP不用于网络路由决策。 当你在订阅内创建公共IP地址时,它会自动从你服务指定的IP池分配。 网络安全边界内的服务使用该公网IP地址识别服务端点流量并配置相应的访问规则。

注释

用作网络标识符的公共IP地址必须满足以下所有要求:标准SKU、静态分配方法、IPv4、已成功配置状态,并且在与服务端点关联前必须已存在。 如果不满足上述任何条件,NRP会拒绝该知识产权。

通过 az network vnet子网更新,更新子网,添加一个以公共IP地址作为网络标识符的服务端点。

az network vnet subnet update \
  --resource-group test-rg \
  --vnet-name vnet-1 \
  --name subnet-1 \
  --add serviceEndpoints '{"service":"Microsoft.Storage","networkIdentifier":{"id":"/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Network/publicIPAddresses/public-ip-1"}}'

注释

<subscription-id> 替换为你的 Azure 订阅 ID。 可以通过运行 az account show --query id --output tsv来查找订阅 ID。

同一公共IP地址可以分配给订阅内同一区域内的所有子网。 在公共预览期间,网络标识符在各个订阅中均受支持。

创建网络安全外围

创建一个网络安全边界,并将你的PaaS资源与之关联。

  1. 使用 az network perimeter create 创建网络安全边界。

    az network perimeter create \
      --name nsp-1 \
      --resource-group test-rg \
      --location chinaeast2
    
  2. 使用 az network perimeter profile create 在网络安全边界中创建配置文件。

    az network perimeter profile create \
      --perimeter-name nsp-1 \
      --resource-group test-rg \
      --name profile-1
    
  3. 使用 az network perimeter association create 将存储帐户与网络安全边界关联。 将 <subscription-id><storage-account-name> 替换为自定义值。

    az network perimeter association create \
      --perimeter-name nsp-1 \
      --resource-group test-rg \
      --association-name assoc-storage \
      --access-mode Learning \
      --profile "{id:/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Network/networkSecurityPerimeters/nsp-1/profiles/profile-1}" \
      --private-link-resource "{id:/subscriptions/<subscription-id>/resourceGroups/test-rg/providers/Microsoft.Storage/storageAccounts/<storage-account-name>}"
    

创建网络安全边界入站访问规则

在网络安全边界中添加基于 IP 的入站访问规则,以允许来自您的网络标识的流量。 该规则与公共 IP 地址匹配,以允许从您的服务终结点进行连接。

使用 az network perimeter profile access-rule create 创建入站访问规则。 将 <public-ip-prefix-range> 替换为你的公共 IP 前缀的地址范围。

az network perimeter profile access-rule create \
  --perimeter-name nsp-1 \
  --resource-group test-rg \
  --profile-name profile-1 \
  --access-rule-name allow-se-standard \
  --direction Inbound \
  --address-prefixes "<public-ip-prefix-range>"

注释

若要查找公共 IP 前缀的地址范围,请运行 az network public-ip prefix show --resource-group test-rg --name public-ip-prefix --query ipPrefix --output tsv

验证连接

用 Azure Bastion 连接到你的虚拟机,测试与存储账户的连接,以验证流量是否符合网络安全边界的入站访问规则授权。

连接到虚拟机

  1. Azure 门户中,搜索并选择 虚拟机

  2. 选择 vm-1

  3. 选择 “连接”,然后选择“ 通过 Bastion 连接”。

  4. 堡垒 页面输入以下信息:

    设置 价值
    身份验证类型 从本地文件选择 SSH 私钥
    用户名 输入“azureuser”。
    本地文件 选择你创建虚拟机时下载的 vm-1-key.pem 文件。
  5. 选择 连接

测试与存储帐户的连接

  1. vm-1 的 SSH 会话中,登录 Azure CLI:

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Azure Public Cloud.
    
  2. 挂载Azure文件共享,以验证通过服务端点与存储账户的连接。 将 <storage-account-name> 替换为你的存储帐户名称:

    sudo mkdir -p /mnt/fileshare-1
    STORAGE_KEY=$(az storage account keys list \
        --resource-group test-rg \
        --account-name <storage-account-name> \
        --query "[0].value" -o tsv)
    
    sudo mount -t cifs //<storage-account-name>.file.core.chinacloudapi.cn/fileshare-1 /mnt/fileshare-1 \
        -o username=<storage-account-name>,password=$STORAGE_KEY,serverino,nosharesock,actimeo=30,mfsymlinks
    
  3. 验证文件共享是否成功挂载:

    df -h /mnt/fileshare-1
    
  4. 要确认入站访问规则是否有效,请查看网络安全边界的诊断日志。 有关网络安全边界诊断日志的更多信息,请参见 网络安全边界的诊断日志

清理资源

当您不再需要本文中创建的资源时,请删除资源组:

az group delete --name test-rg --yes --no-wait

后续步骤