在 ExpressRoute Direct 端口上配置 MACsec
本文提供有关如何使用 PowerShell 命令配置 MACsec 的指南,MACsec 是一种安全协议,可保护边缘路由器与 Azure 边缘路由器之间的通信。
开始之前
在开始配置 MACsec 之前,请先确保满足以下先决条件:
- 你已熟悉 ExpressRoute Direct 预配工作流。
- 你已根据说明创建了 ExpressRoute Direct 端口资源。
- 如果要在本地运行 PowerShell,请确保你已在计算机上安装了最新版本的 Azure PowerShell。
使用 Azure PowerShell
本文中的步骤和示例使用 Azure PowerShell Az 模块。 若要在计算机上本地安装 Az 模块,请参阅安装 Azure PowerShell。 若要详细了解新 Az 模块,请参阅新 Azure Powershell Az 模块简介。 PowerShell cmdlet 经常更新。 如果未运行最新版本,在说明中指定的值可能无法使用。 若要在系统上查找已安装的 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 机密和用户标识
要安全地存储 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 密钥和参数。
若要创建新的用户标识,需要使用
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-AzUserAssignedIdentity
或Get-AzUserAssignedIdentity
识别为有效的 cmdlet,请在管理员模式下安装以下模块。 然后,再次执行以上命令。Install-Module -Name Az.ManagedServiceIdentity
创建连接关联密钥 (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 位。
授权用户标识执行
GET
操作。Set-AzKeyVaultAccessPolicy -VaultName "your_key_vault_name" -PermissionsToSecrets get -ObjectId $identity.PrincipalId
用户标识从 Key Vault 获取了检索机密(例如 CAK 和 CKN)的访问权限。
将用户标识配置为 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 密码在高速链路上偶尔导致会话故障。
设定 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
(可选)如果端口处于“管理关闭”状态,可以运行以下命令来打开端口。
$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
Azure 端的 ExpressRoute Direct 端口上现已启用 MACsec。 如果尚未在边缘设备上配置它,可以继续使用相同的 MACsec 机密和密码来配置它们。
(可选)若要激活处于“被管理员关闭”状态的端口,请运行以下命令:
$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
Azure 端的 ExpressRoute Direct 端口上现已禁用 MACsec。
测试连接
在 ExpressRoute Direct 端口上设置 MACsec(包括 MACsec 密钥更新)后,验证线路的 BGP 会话的状态。 如果你尚未在端口上创建线路,请先创建一个,然后设定线路的 Azure 专用对等互连或 Microsoft 对等互连。 不正确的 MACsec 配置(例如网络设备与 Azure 网络设备之间的 MACsec 密钥不匹配)会阻止你观察第 2 层的 ARP 解析或第 3 层的 BGP 建立。 如果所有项都配置正确,则你会看到 BGP 路由在两个方向上正确播发通告,并且应用程序数据流会相应通过 ExpressRoute。