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

在 ExpressRoute Direct 端口上配置 MACsec

本文提供了有关如何使用 PowerShell 命令配置 MACsec 的指导,MACsec 是一个安全协议,可保护你的边缘路由器与 Microsoft 的边缘路由器之间的通信。

开始之前

在开始配置 MACsec 之前,请先确保满足以下先决条件:

使用 Azure PowerShell

本文中的步骤和示例使用 Azure PowerShell Az 模块。 若要在计算机上本地安装 Az 模块,请参阅安装 Azure PowerShell。 若要详细了解新 Az 模块,请参阅新 Azure Powershell Az 模块简介。 PowerShell cmdlet 经常更新。 如果未运行最新版本,在说明中指定的值可能无法使用。 若要在系统上查找已安装的 PowerShell 版本,请使用 Get-Module -ListAvailable Az cmdlet。

可以使用 Azure Cloud Shell 来运行大多数 PowerShell cmdlet 和 CLI 命令,而无需在本地安装 Azure PowerShell 或 CLI。 Azure Cloud Shell 是免费的交互式 Shell,预安装有常用 Azure 工具,并将其配置为与帐户一起使用。 若要在 Azure Cloud Shell 上运行本文中包含的任何代码,请打开 Cloud Shell 会话,对代码块使用“复制”按钮以复制代码,然后使用 Ctrl+Shift+V(在 Windows 和 Linux 上)或 Cmd+Shift+V(在 macOS 上)将其粘贴到 Cloud Shell 会话中。 粘贴的文本不会自动执行,请按“Enter”运行代码。

可通过多种方式来启动 Cloud Shell:

选项 链接
单击代码块右上角的“试用”。 本文中的 Cloud Shell
在浏览器中打开 Cloud Shell。 https://shell.azure.com/powershell
单击 Azure 门户右上角菜单上的“Cloud Shell”按钮。 门户中的 Cloud Shell

登录并选择正确的订阅

按照以下步骤开始配置:

  • 使用你的凭据登录到你的 Azure 帐户。

  • 选择你要用于此配置的订阅。

    如果你使用 Azure Cloud Shell,则可在单击“试用”后自动登录到你的 Azure 帐户。 若要在本地登录,请使用提升的权限打开 PowerShell 控制台,并运行 cmdlet 以进行连接。

    Connect-AzAccount
    

    如果有多个订阅,请获取 Azure 订阅的列表。

    Get-AzSubscription
    

    指定要使用的订阅。

    Select-AzSubscription -SubscriptionName "Name of subscription"
    

创建 Azure Key Vault、MACsec 机密和用户标识

  1. 要安全地存储 MACsec 机密,你需要在一个新资源组中创建 Key Vault 实例。 Key Vault 是一项服务,可用于管理和保护 Azure 中的加密密钥、证书和机密。 有关详细信息,请参阅什么是 Azure 密钥保管库?

    New-AzResourceGroup -Name "your_resource_group" -Location "resource_location"
    $keyVault = New-AzKeyVault -Name "your_key_vault_name" -ResourceGroupName "your_resource_group" -Location "resource_location" -SoftDeleteRetentionInDays 90
    

    你可以将现有的 Key Vault 或资源组重用于此配置。 但是,你必须确保在 Key Vault 上启用了 [软删除功能]。 此功能允许你在保留期内恢复已删除的密钥、机密和证书。 如果你的 Key Vault 未启用软删除,请运行以下命令来启用它:

    ($resource = Get-AzResource -ResourceId (Get-AzKeyVault -VaultName "your_existing_keyvault").ResourceId).Properties | Add-Member -MemberType "NoteProperty" -Name "enableSoftDelete" -Value "true"
    Set-AzResource -ResourceId $resource.ResourceId -Properties $resource.Properties
    

    注意

    • ExpressRoute 是 Azure 中的一项可信服务,支持 Azure Key Vault 中的网络安全策略。 有关详细信息,请参阅配置 Azure Key Vault 防火墙和虚拟网络
    • 不应将 Azure Key Vault 放置在专用终结点后面,因为这会阻止与 ExpressRoute 管理平面的通信。 ExpressRoute 管理平面负责管理你的连接的 MACsec 密钥和参数。
  2. 若要创建新的用户标识,需要使用 New-AzUserAssignedIdentity cmdlet。 此 cmdlet 在 Microsoft Entra ID 中创建用户分配的托管标识,并将其注册到指定的订阅和资源组。 用户分配的托管标识是一种独立的 Azure 资源,可分配给支持托管标识的任何 Azure 服务。 你可以使用此标识进行身份验证并授权访问 Azure 资源,而无需在代码或配置文件中存储任何凭据。 有关详细信息,请参阅什么是 Azure 资源的托管标识?

    $identity = New-AzUserAssignedIdentity  -Name "identity_name" -Location "resource_location" -ResourceGroupName "your_resource_group"
    

    若要使用现有用户标识,请运行以下命令:

    $identity = Get-AzUserAssignedIdentity -ResourceGroupName "your_resource_group" -Name "identity_name"
    

    如果 PowerShell 无法将 New-AzUserAssignedIdentityGet-AzUserAssignedIdentity 识别为有效的 cmdlet,请在管理员模式下安装以下模块。 然后,再次执行以上命令。

    Install-Module -Name Az.ManagedServiceIdentity
    
  3. 创建连接关联密钥 (CAK) 和连接关联密钥名称 (CKN),并将其存储在 Key Vault 中。

    $CAK = ConvertTo-SecureString "your_key" -AsPlainText -Force
    $CKN = ConvertTo-SecureString "your_key_name" -AsPlainText -Force
    $MACsecCAKSecret = Set-AzKeyVaultSecret -VaultName "your_key_vault_name" -Name "CAK_name" -SecretValue $CAK
    $MACsecCKNSecret = Set-AzKeyVaultSecret -VaultName "your_key_vault_name" -Name "CKN_name" -SecretValue $CKN
    

    注意

    • CKN 必须是长度为 64 的十六进制数字的均匀字符串(0-9,A-F)。
    • CAK 长度取决于指定的密码套件:
      • 对于 GcmAes128 和 GcmAesXpn 128,CAK 必须是长度为 32 的十六进制数字 (0-9, A-F) 的均匀字符串。
      • 对于 GcmAes256 和 GcmAesXpn 256,CAK 必须是长度为 64 的十六进制数字 (0-9,A-F) 的均匀字符串。
    • 对于 CAK,必须使用密钥的完整长度。 如果密钥长度短于要求的长度,则 0's 将被添加到密钥末尾以满足长度要求。 例如,1234 的 CAK 将成为 12340000……,无论密码是 128 位还是 256 位。
  4. 授权用户标识执行 GET 操作。

    Set-AzKeyVaultAccessPolicy -VaultName "your_key_vault_name" -PermissionsToSecrets get -ObjectId $identity.PrincipalId
    

    用户标识从 Key Vault 获取了检索机密(例如 CAK 和 CKN)的访问权限。

  5. 将用户标识配置为 ExpressRoute 的指定服务主体。

    $erIdentity = New-AzExpressRoutePortIdentity -UserAssignedIdentityId $identity.Id
    

在 ExpressRoute Direct 端口上配置 MACsec

如何启用 MACsec

每个 ExpressRoute Direct 实例都包含两个物理端口。 你可以同时在两个端口上激活 MACsec,也可以单独在一个端口上激活 MACsec。 在对一个端口进行维护时,你可以使用后一种方式将流量转移到正常运行的端口,这可以减少 ExpressRoute Direct 正常运行时的中断。

注意

可以配置 XPN 和非 XPN 密码:

  • GcmAes128
  • GcmAes256
  • GcmAesXpn128
  • GcmAesXpn256

建议的最佳做法是使用 xpn 密码设置加密,以防止非 xpn 密码在高速链路上偶尔导致会话故障。

  1. 设定 MACsec 机密和密码,将用户标识与端口相关联,以便 ExpressRoute 管理代码可以在需要时检索 MACsec 机密。

    $erDirect = Get-AzExpressRoutePort -ResourceGroupName "your_resource_group" -Name "your_direct_port_name"
    $erDirect.Links[0]. MacSecConfig.CknSecretIdentifier = $MacSecCKNSecret.Id
    $erDirect.Links[0]. MacSecConfig.CakSecretIdentifier = $MacSecCAKSecret.Id
    $erDirect.Links[0]. MacSecConfig.Cipher = "GcmAes256"
    $erDirect.Links[1]. MacSecConfig.CknSecretIdentifier = $MacSecCKNSecret.Id
    $erDirect.Links[1]. MacSecConfig.CakSecretIdentifier = $MacSecCAKSecret.Id
    $erDirect.Links[1]. MacSecConfig.Cipher = "GcmAes256"
    $erDirect.identity = $erIdentity
    Set-AzExpressRoutePort -ExpressRoutePort $erDirect
    
  2. (可选)如果端口处于“管理关闭”状态,可以运行以下命令来打开端口。

    $erDirect = Get-AzExpressRoutePort -ResourceGroupName "your_resource_group" -Name "your_direct_port_name"
    $erDirect.Links[0].AdminState = "Enabled"
    $erDirect.Links[1].AdminState = "Enabled"
    Set-AzExpressRoutePort -ExpressRoutePort $erDirect
    

    Microsoft 端的 ExpressRoute Direct 端口上现在会启用 MACsec。 如果尚未在边缘设备上配置它,可以继续使用相同的 MACsec 机密和密码来配置它们。

  3. (可选)若要激活处于“被管理员关闭”状态的端口,请运行以下命令:

    $erDirect = Get-AzExpressRoutePort -ResourceGroupName "your_resource_group" -Name "your_direct_port_name"
    $erDirect.Links[0].MacSecConfig.SciState = "Enabled"
    $erDirect.Links[1].MacSecConfig.SciState = "Enabled"
    Set-AzExpressRoutePort -ExpressRoutePort $erDirect
    

    ExpressRoute Direct 端口上现在会启用 SCI。

如何禁用 MACsec

若要在 ExpressRoute Direct 实例上停用 MACsec,请运行以下命令:

$erDirect = Get-AzExpressRoutePort -ResourceGroupName "your_resource_group" -Name "your_direct_port_name"
$erDirect.Links[0]. MacSecConfig.CknSecretIdentifier = $null
$erDirect.Links[0]. MacSecConfig.CakSecretIdentifier = $null
$erDirect.Links[1]. MacSecConfig.CknSecretIdentifier = $null
$erDirect.Links[1]. MacSecConfig.CakSecretIdentifier = $null
$erDirect.identity = $null
Set-AzExpressRoutePort -ExpressRoutePort $erDirect

Microsoft 端的 ExpressRoute Direct 端口上现在会禁用 MACsec。

测试连接

在 ExpressRoute Direct 端口上设置 MACsec(包括 MACsec 密钥更新)后,验证线路的 BGP 会话的状态。 如果你尚未在端口上创建线路,请先创建一个,然后设定线路的 Azure 专用对等互连或 Microsoft 对等互连。 如果 MACsec 配置不正确(例如,你的网络设备与 Microsoft 的网络设备之间的 MACsec 密钥不匹配),则你不会看到第 2 层的 ARP 解析或第 3 层的 BGP 建立。 如果所有项都配置正确,则你会看到 BGP 路由在两个方向上正确播发通告,并且应用程序数据流会相应通过 ExpressRoute。

后续步骤