ExpressRoute Direct 포트에서 MACsec 구성

이 문서에서는 PowerShell 명령을 사용하여 에지 라우터와 Microsoft의 에지 라우터 간의 통신을 보호하는 보안 프로토콜인 MACsec을 구성하는 방법에 대한 지침을 제공합니다.

시작하기 전에

MACsec 구성을 시작하기 전에 다음 필수 구성 요소를 충족하는지 확인합니다.

Azure PowerShell 작업

이 문서의 단계 및 예제에서는 Azure PowerShell Az 모듈을 사용합니다. 컴퓨터에 Az 모듈을 로컬로 설치하려면 Azure PowerShell 설치를 참조하세요. 새 Az 모듈에 대한 자세한 내용은 새 Azure PowerShell Az 모듈 소개를 참조하세요. PowerShell cmdlet은 자주 업데이트됩니다. 최신 버전을 실행하지 않는 경우 지침에 지정된 값이 실패할 수 있습니다. 시스템에 설치된 PowerShell 버전을 찾으려면 Get-Module -ListAvailable Az cmdlet을 사용합니다.

Azure PowerShell 또는 CLI를 로컬로 설치하는 대신 Azure Cloud Shell을 사용하여 대부분의 PowerShell cmdlet 및 CLI 명령을 실행할 수 있습니다. Azure Cloud Shell은 공통 Azure 도구가 사전 설치되고 계정으로 사용하도록 구성된 체험 대화형 셸입니다. Azure Cloud Shell에서 이 문서에 포함된 코드를 실행하려면 Cloud Shell 세션을 열고 코드 블록의 복사 단추를 사용하여 코드를 복사한 다음, Windows 및 Linux에서는 Ctrl+Shift+V, macOS에서는 Cmd+Shift+V를 사용하여 Cloud Shell 세션에 붙여 넣습니다. 붙여넣은 텍스트는 자동으로 실행되지 않습니다. Enter를 눌러 코드를 실행합니다.

Cloud Shell을 시작하는 몇 가지 방법이 있습니다.

옵션 링크
코드 블록의 오른쪽 위 모서리에서 사용을 클릭합니다. Cloud Shell in this article
브라우저에서 Cloud Shell을 엽니다. https://shell.azure.com/powershell
Azure Portal의 오른쪽 위 모서리에 있는 메뉴에서 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 비밀 및 사용자 ID 만들기

  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에서 [일시 삭제 기능]을 사용하도록 설정했는지 확인해야 합니다. 이 기능을 사용하면 보존 기간 내에 삭제된 키, 비밀 및 인증서를 복구할 수 있습니다. 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 방화벽 및 가상 네트워크 구성을 참조하세요.
    • ExpressRoute 관리 평면과의 통신을 방해하므로 프라이빗 엔드포인트 뒤에 Azure Key Vault를 배치해서는 안 됩니다. ExpressRoute 관리 평면은 연결에 대한 MACsec 키 및 매개 변수를 관리합니다.
  2. 새 사용자 ID를 만들려면 New-AzUserAssignedIdentity cmdlet을 사용해야 합니다. 이 cmdlet은 Microsoft Entra ID에 사용자 할당 관리 ID를 만들고 지정된 구독 및 리소스 그룹에 등록합니다. 사용자 할당 관리 ID는 관리 ID를 지원하는 모든 Azure 서비스에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 이 ID를 사용하여 코드 또는 구성 파일에 자격 증명을 저장하지 않고도 Azure 리소스에 대한 액세스를 인증하고 권한을 부여할 수 있습니다. 자세한 내용은 Azure 리소스에 대한 관리 ID란?을 참조하세요.

    $identity = New-AzUserAssignedIdentity  -Name "identity_name" -Location "resource_location" -ResourceGroupName "your_resource_group"
    

    기존 사용자 ID를 사용하려면 다음 명령을 실행합니다.

    $identity = Get-AzUserAssignedIdentity -ResourceGroupName "your_resource_group" -Name "identity_name"
    

    PowerShell이 New-AzUserAssignedIdentity 또는 Get-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자리의 16진수(0-9, A-f)까지의 짝수 길이 문자열이어야 합니다.
    • CAK 길이는 지정된 암호 제품군에 따라 달라집니다.
      • GcmAes128 및 GcmAesXpn128의 경우 CAK는 32자리의 16진수(0-9, A-F)의 짝수 길이 문자열이어야 합니다.
      • GcmAes256 및 GcmAesXpn256의 경우 CAK는 64자리의 16진수(0-9, A-F)의 짝수 길이 문자열이어야 합니다.
    • CAK의 경우 키의 전체 길이를 사용해야 합니다. 키가 필요한 길이보다 짧은 경우 길이 요구 사항을 충족하기 위해 0's가 키의 끝에 추가됩니다. 예를 들어 CAK 1234는 암호화를 기준으로 128비트 및 256비트 모두에 대해 12340000...입니다.
  4. 사용자 ID에 GET 작업을 수행하기 위한 권한을 부여합니다.

    Set-AzKeyVaultAccessPolicy -VaultName "your_key_vault_name" -PermissionsToSecrets get -ObjectId $identity.PrincipalId
    

    사용자 ID는 Key Vault에서 CAK 및 CKN과 같은 비밀을 검색하기 위한 액세스 권한을 획득했습니다.

  5. 사용자 ID를 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 비밀 및 암호화를 설정하고 사용자 ID를 포트와 연결하여 필요한 경우 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 피어링을 설정합니다. 네트워크 디바이스와 Microsoft의 네트워크 디바이스 간의 MACsec 키 불일치와 같이 MACsec 구성이 잘못되면 계층 2의 ARP 해상도 또는 계층 3의 BGP 설정이 표시되지 않습니다. 모든 항목이 올바르게 구성되면 BGP 경로가 양방향으로 올바르게 보급되고 애플리케이션 데이터가 ExpressRoute를 통해 적절하게 전달됩니다.

다음 단계