本文提供了有关如何使用 PowerShell 命令配置 MACsec(保护边缘路由器与Azure边缘路由器之间的通信的安全协议)的指导。
开始之前
在开始配置 MACsec 之前,请先确保满足以下先决条件:
- 你已熟悉 ExpressRoute Direct 预配工作流。
- 你已根据说明创建了 ExpressRoute Direct 端口资源。
- 如果要在本地运行 PowerShell,则在计算机上安装了最新版本的 Azure PowerShell。
使用 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 机密和用户标识
若要安全地存储 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 密钥和参数。
若要创建新的用户标识,需要使用
New-AzUserAssignedIdentitycmdlet。 此 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 在 128 位或 256 位加密算法下将成为 12340000。
向用户标识授予执行
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 正常运行时的中断。
注意
可以为 10 gbps ExpressRoute 端口配置非 XPN 密码:
- GcmAes128
- GcmAes256
可以为 40 gbps 和更高 ExpressRoute 端口配置非 XPN 或 XPN 密码:
- GcmAes128
- GcmAes256
- GcmAesXpn128
- GcmAesXpn256
建议的最佳做法是使用 xpn 密码设置加密,以防止在具有 40 gbps 或更大带宽的链接上使用非 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 $erDirectMACsec 现已在 Azure 端的 ExpressRoute Direct 端口上启用。 如果尚未在边缘设备上配置它,可以继续使用相同的 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 $erDirectExpressRoute 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。
后续步骤
- 在 ExpressRoute Direct 上创建 ExpressRoute 线路
- 将虚拟网络链接到 ExpressRoute 线路
- 验证 ExpressRoute 连接