在 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 是一個免費的互動式殼層,具有預先安裝和設定的通用 Azure 工具,可與您的帳戶搭配使用。 若要在 Azure Cloud Shell 上執行本文所包含的任何程式碼,請開啟 Cloud Shell 工作階段、使用某個程式碼區塊上的 [複製] 按鈕來複製程式碼,然後使用 Ctrl+Shift+V (在 Windows 和 Linux 上) 或 Cmd+Shift+V (在 macOS 上) 將程式碼貼到 Cloud Shell 工作階段中。 貼上的文字不會自動執行,請按下 Enter 鍵來執行程式碼。

以下有幾種啟動 Cloud Shell 的方式:

選項 連結
按一下程式碼區塊右上角的 [試試看] Cloud Shell in this article
在您的瀏覽器中開啟 Cloud Shell。 https://shell.azure.com/powershell
按一下 Azure 入口網站右上方功能表上的 [Cloud Shell] 按鈕。 Cloud Shell in the portal

登入並選取正確的訂用帳戶

請依照下列步驟開始設定:

  • 使用認證資料登入 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 和 GcmAesXpn128,CAK 必須是長度為 32 個十六進位數字 (0-9、A-F) 的偶數長度字串。
      • 若為 GcmAes256 和 GcmAesXpn256,CAK 必須是長度為 64 個十六進位數字 (0-9、A-F) 的偶數長度字串。
    • 若為 CAK,必須使用金鑰的完整長度。 如果金鑰比所需長度短,則 0's 會新增至金鑰結尾以符合長度需求。 例如,基於加密機制,CAK 1234 在 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。 第二種做法讓您能將流量轉移至運作中的連接埠,同時維護另一個連接埠,如此可減少 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
    

    MACsec 此時會在 Microsoft 端的 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
    

    SCI 此時會在 ExpressRoute Direct 連接埠上啟用。

如何停用 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 此時會在 Microsoft 端的 ExpressRoute Direct 連接埠上停用。

測試連線能力

在 ExpressRoute Direct 連接埠上設定 MACsec (包括 MACsec 金鑰更新) 之後,請確認線路的 BGP 工作階段狀態。 如果連接埠上還沒有任何線路,請先建立線路,並為線路設定 Azure 私人對等互連或 Microsoft 對等互連。 如果 MACsec 的組態不正確,例如您的網路裝置與 Microsoft 網路裝置之間的 MACsec 金鑰不相符,您就不會在第 2 層看到 ARP 解析,也不會在第 3 層看到 BGP 建立。 如果一切都已正確設定,您會看到雙向均正確公告的 BGP 路由,以及應用程式資料相應地透過 ExpressRoute 流動。

下一步