在 ExpressRoute Direct 端口上配置 MACsec

本文提供了有关如何使用 PowerShell 命令配置 MACsec(保护边缘路由器与Azure边缘路由器之间的通信的安全协议)的指导。

开始之前

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

使用 Azure PowerShell

本文中的步骤和示例使用 Azure PowerShell Az 模块。 若要在本地计算机上安装 Az 模块,请参阅 Install Azure PowerShell。 若要了解有关新 Az 模块的详细信息,请参阅 引入新 Azure PowerShell Az 模块。 PowerShell 命令工具频繁更新。 如果未运行最新版本,在说明中指定的值可能无法使用。 若要在系统上查找已安装的 PowerShell 版本,请使用 Get-Module -ListAvailable Az cmdlet。

登录并选择正确的订阅

按照以下步骤开始配置:

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

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

    若要在本地登录,请使用提升的权限打开 PowerShell 控制台,并运行 cmdlet 以进行连接。

    Connect-AzAccount -Environment AzureChinaCloud
    

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

    Get-AzSubscription
    

    指定要使用的订阅。

    Select-AzSubscription -SubscriptionName "Name of subscription"
    

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

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

    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上启用 [soft-delete 功能]。 此功能允许你在保留期内恢复已删除的密钥、机密和证书。 如果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 Key Vault内网络安全策略的Azure中的受信任服务。 有关详细信息,请参阅 配置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 在 128 位或 256 位加密算法下将成为 12340000。
  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 正常运行时的中断。

注意

可以为 10 gbps ExpressRoute 端口配置非 XPN 密码:

  • GcmAes128
  • GcmAes256

可以为 40 gbps 和更高 ExpressRoute 端口配置非 XPN 或 XPN 密码:

  • GcmAes128
  • GcmAes256
  • GcmAesXpn128
  • GcmAesXpn256

建议的最佳做法是使用 xpn 密码设置加密,以防止在具有 40 gbps 或更大带宽的链接上使用非 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
    

    MACsec 现已在 Azure 端的 ExpressRoute Direct 端口上启用。 如果尚未在边缘设备上配置它,可以继续使用相同的 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

MACsec 现已在Azure端的 ExpressRoute Direct 端口上禁用。

测试连接

在 ExpressRoute Direct 端口上设置 MACsec(包括 MACsec 密钥更新)后,验证线路的 BGP 会话状态。 如果尚未在端口上创建线路,请先创建线路,然后建立 Azure 专用对等互连或 Microsoft 对等互连。 不正确的 MACsec 配置(例如网络设备和 Azure 的网络设备之间的 MACsec 密钥不匹配)会导致无法在第 2 层观察到 ARP 解析或第 3 层的 BGP 建立。 如果所有项都配置正确,那么你会看到 BGP 路由在双向中正确地公布,并且你的应用程序数据流将会相应地流过 ExpressRoute。

后续步骤