ExpressRoute Direct ポートで MACsec を構成する

この記事では、お客様のエッジ ルーターと Microsoft のエッジ ルーターの間の通信を保護するセキュリティ プロトコルである MACsec を、PowerShell コマンドを使って構成する方法について説明します。

準備

MACsec の構成を始める前に、次の前提条件が満たされていることを確認してください。

Azure PowerShell を使用する

この記事の手順と例では、Azure PowerShell Az モジュールが使用されます。 Az モジュールをご利用のコンピューターにローカルにインストールするには、Azure PowerShell のインストールに関するページを参照してください。 Az モジュールの詳細については、「新しい Azure PowerShell Az モジュールの概要」を参照してください。 PowerShell コマンドレットは、頻繁に更新されます。 最新バージョンを実行していないと、手順で指定されている値は失敗する場合があります。 システムにインストールされている PowerShell のバージョンを確認するには、Get-Module -ListAvailable Az コマンドレットを使用します。

Azure Cloud Shell を使用すると、Azure PowerShell または CLI をローカルにインストールしなくても、ほとんどの PowerShell コマンドレットおよび CLI コマンドを実行できます。 Azure Cloud Shell は、無料の対話型シェルで、一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。 この記事に含まれるコードを Azure Cloud Shell で実行するには、Cloud Shell セッションを開き、コード ブロック上の [コピー] ボタンを使ってコードをコピーし、Ctrl + Shift + V キー (Windows と Linux) または command + Shift + V キー (macOS) を押して Cloud Shell セッションに貼り付けます。 テキストを貼り付けても自動的には実行されません。コードを実行するには、Enter キーを押します。

Cloud Shell は、次のようにいくつかの方法で起動することができます。

オプション Link
コード ブロックの右上隅にある [使ってみる] をクリックします。 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 コンソールを開き、コマンドレットを実行して接続します。

    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
    

    既存のキー コンテナーまたはリソース グループをこの構成に再利用できます。 ただし、お使いのキー コンテナーで論理的な削除機能が有効になっていることを確認する必要があります。 この機能を使うと、保持期間内に削除されたキー、シークレット、証明書を回復できます。 お使いのキー コンテナーで論理的な削除が有効になっていない場合は、次のコマンドを実行して有効にします。

    ($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
    

    Note

    • ExpressRoute は、Azure 内の信頼できるサービスであり、Azure Key Vault 内のネットワーク セキュリティ ポリシーをサポートしています。 詳しくは、「Azure Key Vault のファイアウォールと仮想ネットワークを構成する」をご覧ください。
    • ExpressRoute 管理プレーンとの通信が妨げられるので、プライベート エンドポイントの内側に Azure キー コンテナーを配置しないでください。 ExpressRoute 管理プレーンは、接続に対する MACsec のキーとパラメーターを管理する役割を担います。
  2. 新しいユーザー ID を作成するには、New-AzUserAssignedIdentity コマンドレットを使う必要があります。 このコマンドレットは、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 が有効なコマンドレットとして認識されない場合は、次のモジュールを管理者モードでインストールします。 その後で、上のコマンドをもう一度実行します。

    Install-Module -Name Az.ManagedServiceIdentity
    
  3. CAK (接続関連付けキー) と CKN (接続関連付けキー名) を作成し、キー コンテナーに格納します。

    $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
    

    Note

    • 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 が追加されます。 たとえば、1234 の CAK は 12340000 になります。これは暗号に基づいて 128 ビットの場合でも 256 ビットの場合でも同様です。
  4. GET 操作を実行するための認可をユーザー ID に与えます。

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

    ユーザー ID は、Key Vault から CAK や CKN などのシークレットを取得するためのアクセス権を得ました。

  5. ExpressRoute に対して指定されたサービス プリンシパルとして、ユーザー ID を構成します。

    $erIdentity = New-AzExpressRoutePortIdentity -UserAssignedIdentityId $identity.Id
    

ExpressRoute Direct ポートで MACsec を構成する

MACsec を有効にする方法

すべての ExpressRoute Direct インスタンスは、2 つの物理ポートで構成されます。 両方のポートで同時に、または 1 つのポートで個別に、MACsec をアクティブにできます。 後者のオプションを使うと、機能しているポートにトラフィックを転送しながら、他のポートを維持することができ、ExpressRoute Direct が動作している場合の中断を減らすことができます。

Note

次の 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. (任意) ポートが Administrative Down の状態にあるとき、次のコマンドを実行し、ポートを有効にできます。

    $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
    

    これで、Microsoft 側の ExpressRoute Direct ポートで MACsec が有効になりました。 お使いのエッジ デバイスでそれを構成しなかった場合は、続いて、同じ 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
    

    これで、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

これで、Microsoft 側の ExpressRoute Direct ポートで MACsec が無効になりました。

接続をテストする

ExpressRoute Direct のポートで (MACsec のキーの更新を含め) MACsec を設定したら、回線の BGP セッションの状態を検証します。 ポートで回線をまだ作成していない場合は、最初にそれを行い、回線の Azure プライベート ピアリングまたは Microsoft ピアリングを確立します。 お客様のネットワーク デバイスと Microsoft のネットワーク デバイスの間での MACsec キーの不一致など、MACsec の構成が正しくないと、レイヤー 2 での ARP 解決またはレイヤー 3 での BGP 確立が行われません。 すべてが正しく構成されていれば、双方向で BGP ルートが正しくアドバタイズされ、それに従って ExpressRoute 経由でアプリケーション データが流れます。

次のステップ