在 ExpressRoute Direct 連接埠上設定 MACsec
本文提供如何使用 PowerShell 命令設定 MACsec 的指引;MACsec 是一種安全性通訊協定,可保護您的邊緣路由器與 Microsoft 邊緣路由器之間的通訊。
開始之前
開始設定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 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。 | |
按一下 Azure 入口網站右上方功能表上的 [Cloud Shell] 按鈕。 | |
登入並選取正確的訂用帳戶
請依照下列步驟開始設定:
使用認證資料登入 Azure 帳戶。
選擇您要用於此設定的訂用帳戶。
如果您使用 Azure Cloud Shell,您可以在按一下 [試用] 之後自動登入您的 Azure 帳戶。 若要在本機登入,請以提高的權限開啟 PowerShell 主控台並執行 Cmdlet 以連線。
Connect-AzAccount
如果您有多個訂用帳戶,請取得 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 和 GcmAesXpn128,CAK 必須是長度為 32 個十六進位數字 (0-9、A-F) 的偶數長度字串。
- 若為 GcmAes256 和 GcmAesXpn256,CAK 必須是長度為 64 個十六進位數字 (0-9、A-F) 的偶數長度字串。
- 若為 CAK,必須使用金鑰的完整長度。 如果金鑰比所需長度短,則
0's
會新增至金鑰結尾以符合長度需求。 例如,基於加密機制,CAK 1234 在 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。 第二種做法讓您能將流量轉移至運作中的連接埠,同時維護另一個連接埠,如此可減少 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
MACsec 此時會在 Microsoft 端的 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 $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 流動。
下一步
- 在 ExpressRoute Direct 上建立 ExpressRoute 線路
- 將虛擬網路連結至 ExpressRoute 線路
- 驗證 ExpressRoute 連線