Amazon Web Services ブログ
AWS Direct Connect 接続に MACsec セキュリティを追加する
AWS Direct Connect は、MACsec セキュリティ(IEEE 802.1AE)をサポートし、ネットワークから AWS に到着するまでのデータを保護するための新しい選択肢を提供します。このリリースにより、Direct Connect は、10Gbps および 100Gbps のリンクに対して、ネイティブ、ニアラインレート、およびポイントツーポイントの暗号化を提供します。専用接続(Direct Connect のイーサネットポートが単一の顧客に専用化されている場合)で一部のロケーションで利用できる MACsec は、利用可能な最高速度で AWS への安全な接続が必要な場合に最適な選択肢です。
まず最初に、Direct Connect に MACsec サポートを導入した理由を理解しましょう。
AWS Direct Connect で MACsec を使用する理由は何か?
AWS にはモットーがあり、お客様に繰り返し言い続けています。「Dance like nobody is watching. Encrypt like everyone is.(誰も見ていないかのように踊り、誰もが見ているように暗号化する)」。当社はすでに Direct Connect 経由の IPsec VPN をサポートしており、アプリケーションにはすでに TLS を使用しています。では、なぜ MACsec を導入するのでしょうか?
要するに、MACsec は TCP/IPスタックのレイヤー2で動作するというのが答えです。他の2つのプロトコルがスタックの上位レイヤーを保護するのに対し、これはイーサネット接続を保護します。これには次のような利点があります。
利点 1: レイヤー2 の機密性と完全性
MACsec のレイヤー2暗号化と完全性は、中間者スヌーピングやパッシブ盗聴などの脅威からイーサネットリンクを保護します。MACsec は、すべてのコントロールプレーンプロトコルパケット(ARP、DHCP、LLDP、BGP などのレイヤー3ルーティングプロトコルなど)を含むイーサネットリンクを保護することが可能です。
利点2: 高速暗号化
MACsec は高速にデータを暗号化することができます。MACsec の暗号化はハードウェア(ASIC/PHY)を通して行われるため、双方向のラインレート、またはラインレートに近い暗号化が可能です。これに対し IPsec は通常、専用の暗号化エンジンやチップに依存します。IPsec の性能はパケットサイズに大きく影響されるため、ルーターやスイッチの全体的なスループット性能の一部しか提供できません。
オンプレミスのデータセンターとクラウド間でやり取りされるデータの量が絶えず増加する中、Direct Connect の帯域幅に対する需要は、従来の IPsec ソリューションがサポートできる暗号化レートを上回っています。金融サービスやヘルスケアなどの規制産業や、メディア制作や自律走行車の開発など、セキュリティ要件が厳しい広帯域ワークロードを扱う AWS のお客様からは、こうした限界に直面することがますます多くなっていると聞いています。
MACsecとは何か?
MACsec(Media Access Control Security)とは、MACsec に対応した2台のイーサネットスイッチ/ルーター間を移動するパケットを暗号化する IEEE 802.1AE 規格である。(本記事執筆時点の現行バージョンは、IEEE 802.1AE-2018です)。
例えば IPSec や TLS のような上位レイヤーのプロトコルと比較して、MACsec はもともとホップバイホップの暗号化技術として設計されています。フレームは有線で送信されるときに暗号化され、フレームを処理する次のホップのデバイスで復号されます。
MACsec は、レイヤー2有線通信にこれらの主要な利点をもたらします:
- 機密性の確保:MACsec は、フレームの Ether Type とペイロードを暗号化することにより、レイヤー2で強力な暗号化を提供し、機密性の確保を支援します。
- データの完全性:MACsec は、データが転送中に変更されないことを保証するために、完全性チェックを提供します。
- データ発信元の信頼性:MACsec は、フレームが信頼できる MACsec ピアの1つによって送信されたことを保証します。
- リプレイ保護:リプレイ保護が有効な場合、パケット番号が離れすぎているフレームをドロップします。
いくつかの重要な MACsec 概念を見てみましょう:
- セキュアチャネル
- セキュアアソシエーション
- MACsec カプセル化
- MACSec キーアグリーメント
- 暗号スイート
セキュアチャネル
各 MACsec 参加者は、他の参加者にトラフィックを送信するために使用されるセキュアチャネルを作成します。これらのセキュアチャネルは単方向で、1つのチャネルは他の参加者へのトラフィックの送信に使用され、2番目のチャネルは他の参加者からのトラフィックの受信に使用されます。
セキュア チャネルには、8 バイトの識別子であるセキュア チャネル識別子 (SCI) が割り当てられます。
セキュアアソシエーション
各セキュアチャネルでの通信は、セキュアアソシエーションと呼ばれる一連の一時的なセッションとして行われます。各セキュアチャネルは、任意の時点で最大2つのセキュアアソシエーション(SAs)を含みます。
通常チャネルは1つの SA しか持ちませんが、SA を交換する必要がある場合チャネルは2つの SA を持ち、鍵のローテーション時など SA が一方から他方へ交換されます。
セキュアアソシエーションには、フレームの暗号化と保護に必要な 2 つの重要な情報が含まれています。
- セキュアアソシエーションキー(SAK):事前共有キーから派生した暗号化キー
- パケット番号(PN)に関連するカウンタ:これらのパケット番号は、暗号化および検証プロセスで使用され、リプレイ保護に使用されます。チャネルの送信側では、カウンターは次のパケット番号を記録するために使用され、受信側では、SA は次にどのパケット番号が予想されるかを記録します。
パケット番号は、MACsec のリプレイ保護メカニズムで使用されます。リプレイ保護が有効な場合、MACsec はその番号が予想される順序から離れすぎているフレームをドロップします。フレームを受信したピアは、その番号を最も低い許容可能な PN と比較し、より低い番号のフレームをドロップします。
実際に許容可能な最低の PN を定義するのはリプレイウィンドウです。許容可能な最低の PN は基本的に、次に予想される数値、つまり設定されたリプレイウィンドウから導出されます。
MACsec カプセル化
MACsec は、EtherType の直前に16バイトの MACsecタグ(SecTAG)を挿入し、フレームの末尾に16バイトの整合性チェック値(ICV)を追加して、イーサネットフレームを変更します。元のEtherType とフレームペイロードは暗号化され、SecTAG と ICV の間に挿入されます。(オリジナルの Dot1qタグを含む)。
MACSec キーアグリーメント(MKA)
MACsec キーアグリーメントプロトコル (MKA) は、ピアの検出、認証、および暗号化キーの生成を管理します。これには、ピア デバイスの検出と、ピア デバイスが次の項目に一致するように構成されているかどうかを確認することによる正当性の検証が含まれます。
Secure Connectivity Association Key (CAK):CAK は、各 MACsec 対応インターフェースに関連付けられた静的な鍵です。AWS の実装では、そして実際ほとんどの実装では事前共有鍵が使用され、最初はオフラインで交換されます。
Connectivity association Key Name (CKN):どの CAK が使用されているかを識別するために、各 MKA メッセージに文字列の形で含まれる名前です。MACsec 認証は、事前に設定された CAK とConnectivity Association Key Name (CKN)の相互所持と確認に基づいて行われます。MKA は、Connectivity Association Key (CAK)を使用して、Secure Association Key (SAKs はセッションキー)を導出します。セキュアアソシエーションキーには寿命があり、一定期間ごとにリフレッシュされます(その期間はあるフレーム数として定義される)。SAK は、他の重要な制御情報とともに、MKA プロトコル制御パケット(MKPDUとも呼ばれる)において配布されます。
注: CKN と CAK はそれぞれ、64 の 16 進数で表現される 32 オクテットである必要があります。
暗号スイート
MACsec は元々 GCM-AES-128 を暗号スイートとして使用していました。その後、GCM-AES-256 を使用するオプションが追加されるように修正されました。GCM-AES-256 はパケット番号を拡張し、GCM-AES-XPN-128 および GCM-AES-XPN-256 暗号スイートのサポートを追加しています。これらの追加暗号は、高速なパケット番号の枯渇(PNフィールド)に対処するために導入されました。高速なリンク速度では、元の32ビットパケット番号(PN)フィールドは、より高速なインターフェースに対応できず、100G インターフェースで5分ごとに新しいセキュリティアソシエーションを発生させることがありました(たとえば、新しい SA の確立は事実上、鍵のロールオーバーを強制します)。
注: AWS Direct Connect MACsec は、100Gbps 接続で GCM-AES-XPN-256 をサポートし、10Gbps 接続で GCM-AES-XPN-256 および GCM-AES-256 をサポートするようになりました。
MKA 制御パケットの暗号化には特定の暗号が使用され、AWS 実装では現在 AES-CMAC-256 をサポートしています。
AWS Direct Connect 用の MACsec の設定
Direct Connect MACsec 機能を有効にするには、MACsec 対応の Direct Connect 回線に移行する必要があります。
これを行うには、AWS Direct Connect コンソールで「MACsec のリクエスト」オプションを選択します。
ラストマイルプロバイダー
MACsec はホップバイホップ単位でリンクを保護するため、レイヤー2トラフィックに対して透過的で MACsec と互換性のある専用接続を用意する必要があります。お客様のデバイスは、当社のダイレクトコネクトデバイスと直接レイヤー2で隣接している必要があります。ラストマイルプロバイダーは、お客様の接続が MACsec で動作することを確認するのに役立ちます。
前提条件
Direct Connect の MACsec を構成する最初のステップの1つは、Direct Connect デバイスに接続するオンプレミス機器を選択し、デバイスが MACsec をサポートしていることを確認することです。接続の両端が以下の AWS のデフォルト設定オプションに同意することが重要です:
- CKN 長さ: 64 の 16 進数で表現される 32 オクテット
- CAK 長さ: 64 の 16 進数で表現される 32 オクテット
- 暗号化アルゴリズム: AES-CMAC-256
- SAK 暗号スイート: GCM-AES-XPN-256
- 機密性オフセット: 0
- ICVインジケーター: No
- SAK キー再生成時間: PN ロールオーバー
トポロジー
MACsec はホップバイホップベースでリンクを保護するため、デバイスは AWS Direct connect デバイスと直接レイヤー2で隣接関係にある必要があります。これにより、次の2つのトポロジーが考えられます。
トポロジー 1: ルーター – スイッチ – ダイレクトコネクトデバイス
このトポロジーでは、オンプレミス スイッチと AWS Direct Connect デバイスの間に MACsec が設定されます。 IP ルーティングは、スイッチに接続されているオンプレミスルーターによって処理されます。
トポロジー 2: ルーター – ダイレクトコネクトデバイス
このトポロジーでは、オンプレミスルーターと AWS Direct Connect デバイスの間に MACsec が設定されます。
注: どちらのトポロジーでも、リンクアグリゲーショングループ(LAG) を使用してリンクを統合し、より高いキャパシティを実現できます。
AWS Direct Connect の MACsec 設定
AWS Management Console または Direct Connect API を使用して、Direct Connect MASsec を構成します。MACsec デプロイの一環として新しい Direct Connect API を導入しており、現在利用可能な API の一部は MACsec 機能をサポートするように拡張されています。また、これらの新しい API メソッドをサポートする最新の AWS CLI バージョンも配信しています。
設定ワークフローは非常に簡単です:
- MACsec をサポートする新しい接続を作成する
- CKN/CAK を接続に関連付ける
- 接続ステータスを確認する
- 必要に応じて、トラフィックを新しい接続に移行する
ステップ 1: MACsec サポートを使用して新しい接続を作成する
Direct Connect CreateConnection
API が新しい requestMACSec フィールドで拡張されました。 AWS CLI を使用して、次のように新しい接続の MACsec サポートをリクエストできます。
aws directconnect create-connection --location IAD66 --bandwidth 10Gbps --connection-name
"MACsec connection" --request-mac-sec
ステップ 2: CKN/CAK を接続に関連付ける
CKN/CAK ペアを MACsec 対応ポート (または LAG) に関連付けるために、新しい Direct Connect API AssociateMacSecKey
が導入されました。
CKN/CAK を接続に関連付けるには、AWS Secret Manager で既にペアを定義している(シークレットARNを参照している)場合と、CKN/CAK の値を直接指定する場合の2通りがあります。
後者の場合、入力した CKN/CAK 値を保存するために AWS Secrets Manager でシークレットを作成し、それを接続に関連付けます。
以下、AWS CLIを使用して CKN/CAK を接続に関連付ける例を2つ紹介します:
- 事前定義されたシークレットの参照:
aws directconnect associate-mac-sec-key --secret-arn secretARN --connection-id connectionID
- CKN/CAK ペアの作成:
aws directconnect associate-mac-sec-key --ckn ckn --cak cak --connection-id connectionID
MACsec シークレットキーを接続に関連付けた後は変更できません。キーを変更する必要がある場合は、接続からキーの関連付けを解除してから、新しいキーを接続に関連付けます。
ステップ 3: 接続ステータスを確認する
Direct Connect DescribeConnections
API が拡張され、次のような MACsec 関連の設定のステータスが API 応答に含まれるようになりました。
- 接続 MACsec のサポート
- 暗号化ポートの状態および使用中の CKN
- 暗号化モード
- ポートに関連する MACsec キー
以下は、MACsec 固有の値を強調表示した、aws directconnect の description-connection 出力のスニペットです。
<snip>
"macSecCapable": true,
"portEncryptionStatus": "Encryption Up with CKN 444CF2486F0B7890FE88279F15DA27C31DB301C47DE95A2FE0E2F42A5D68107F",
"encryptionMode": "should_encrypt",
"macSecKeys": [
{ "secretARN": "arn:aws:secretsmanager:useast-1:123456789012:secret:directconnect!example/us-east-1/ dxmacsec/222CF2486F0B7890FE88279F15DA27C31DB301C47DE95A2FE0E2F42A5D68107F-7lsJMj",
"ckn": "222CF2486F0B7890FE88279F15DA27C31DB301C47DE95A2FE0E2F42A5D68107F",
"state": "associated", "startOn": "2020-11-10 21:57:42" },
{ "secretARN": "arn:aws:secretsmanager:useast-1:123456789012:secret:directconnect!example/us-east-1/ dxmacsec/444CF2486F0B7890FE88279F15DA27C31DB301C47DE95A2FE0E2F42A5D68107F-Yf88hh",
"ckn": "444CF2486F0B7890FE88279F15DA27C31DB301C47DE95A2FE0E2F42A5D68107F",
"state": "associated", "startOn": "2020-12-17 21:46:45" } ]
</snip>
この出力では、「macSecKeys」で示されているようにポートが 2 つのキーに関連付けられており、ポートの暗号化ステータスがアップで 444CF2…. で始まる CKN を使用しており、暗号化モードが「should_encrypt」であることがわかります。
暗号化モードパラメータは、ポートが MKA および MACsec にどのように参加するかを定義します。利用可能な値は次のとおりです。
- should_encrypt:接続は MKA を試み、成功した場合、接続は暗号化されたトラフィックのみを送受信する。MKA がタイムアウトまたは失敗した場合、接続は非暗号化トラフィックを許可する。
- must_encrypt:接続は MKA を試み、成功した場合、接続は暗号化されたフレームのみを送受信する。MKA がタイムアウトまたは失敗した場合、接続は暗号化された状態でダウンする。認証はしばらくしてから再試行される。
- no_encrypt:接続は MKA を実行しない。受信した MKAフレームはすべて無視される。接続は暗号化されていないフレームのみ送受信する。
暗号化モードのデフォルト値は「 should_encrypt 」ですが、これは新しい DirectConnect API UpdateConnection
を使用して変更できます。
AWS CLI を使用した例を次に示します。
aws directconnect update-connection --connection-id dxcon-ffs0c7qr --encryption-mode
must_encrypt
ステップ 4: 必要に応じてトラフィックを新しい接続に移行する
既存の AssociateVIF AWS Direct connect API を使用して、接続に関連付けられている既存の VIF を移行できます。このプロセスでは、変更が当社側でプロビジョニングされるため、ダウンタイムが発生します。
また、追加の VIF を構築し、ルーティング設定を更新することで新しいリンクに移行することができます。ドキュメントの「AWS Direct Connect Resiliency Toolkit を使用した使用の開始」のページは、プロセスを進めていく上で有用なリソースとなります。Resiliency Toolkit の簡単で非常にハイレベルな紹介については、「Exploring the AWS Direct Connect Resiliency Toolkit」というブログ記事も用意されています。
AWS Direct Connect MACsec とリンクアグリゲーショングループ (LAG)
MACsec は、Direct Connect Link Aggregation Group (LAG) でもサポートされています。
LAG と MACsec に関する重要な点は、MACsec 固有の構成が Direct Connect Connection レベルではなく LAG レベルで行われるということです。
構成ワークフローは次のもので構成されます:
- LAG の作成と MACsec 対応ポートの要求(すべての接続が MACsec に対応している必要があることに留意)
- LAG に CKN と CAK を関連付ける(すべてのメンバー接続が同じ CKN/CAK を使用することになる)
- LAG の暗号化モードを設定する(現在のデフォルトモードは暗号化なし)
AWS Direct Connect MACsec キー管理
適切な鍵管理は、MACSec の実装にとって重要です。とはいえ、MACsec で使用する CKN/CAK ペアを安全に保管、配布、ローテーション、消費するのは難しいことかもしれません。これらのタスクに必要な運用オーバーヘッドを削減するために、MACsec for Direct Connect は、サービスリンクされたロールを使用して AWS Secrets Manager と統合されています。
AWS Secrets Manager は、アプリケーション、サービス、IT リソースへのアクセスに必要なシークレットを保護するのに役立ちます。このサービスにより、データベース認証情報、API キー、およびその他のシークレットを、そのライフサイクルを通じて簡単にローテーション、管理、および取得することができます。サービスリンクロールは、AWS サービスに直接リンクされた AWS Identity and Access Management(IAM)ロールのユニークなタイプです。詳細については、IAM ユーザーガイドの「サービスリンクされたロールの権限」を参照してください。
先に説明したように、新規または以前に保存した MACsec キーを接続に関連付けるには、associate-mac-sec-key コマンド(または AWS マネジメントコンソール)を使用し、CKN/CAK ペアまたは AWS Secrets Manager にすでに保存されているシークレットの ARN を提供します。associate-mac-sec-key コマンドを初めて実行すると、AWS は AWS Direct Connect が AWS Secrets Manager と対話し、MACsec Keys を保存して対話できる IAM サービスリンクのロールを作成します。したがって、associate-mac-sec-key コマンドを実行するアカウントが、自分のアカウントでサービスリンクされたロールを作成するためのアクセス権を持っていることを確認する必要があります。詳細は、IAM ユーザーガイドの「サービスリンク型ロールの使用」セクションを参照してください。
キーをローテーションさせる場合は、MACsec キーチェーンでヒットレスキーロールオーバーがサポートされています。Direct Connect MACsec は、最大3つの CKN/CAK ペアを保存できるMACsec キーチェーンに対応しています。Associate-mac-sec-key コマンドを使用して、CKN/CAK ペアを既存の MACsec 有効接続に関連付けます。次に、AWS Direct Connect 接続側のデバイスに同じ CKN/CAK のペアを設定します。Direct Connect デバイスは、接続のために最後に保存されたキーを使用しようとします。そのキーがお客様のデバイス上のキーと一致しない場合、Direct Connect は以前の作業キーを引き続き使用します。
現在の Direct Connect MACsec 実装は、鍵の有効期限に基づく鍵のローテーションをサポートしていません。鍵のローテーションを開始するには、コンソールまたは API 使用して、接続に新しい保存された鍵を関連付ける必要があります。
まとめ
MACsec は現在、一部の Direct Connect ロケーションの新しい専用型の10Gbps および 100Gbps のDirect Connectでサポートされています。
ダイレクトコネクト接続にレイヤー2の機密性と完全性、または高速暗号化を必要とするお客様は、新しい MACsec 機能の恩恵を受けることができます。
MACsec の使用にご興味がある場合は、ご希望の Direct Connect ロケーションでの利用可否をご確認ください。AWS Direct Connect のロケーションに設備がない場合は、AWS パートナーネットワークに連絡し、ロケーションから AWS Direct Connect サービスにアクセスするための支援を受けることができます。
この記事は 「Adding MACsec security to AWS Direct Connect connections」の日本語訳です。
プロフェッショナルサービス本部 インフラストラクチャアーキテクトの大谷 真広、大木 和田留が翻訳しました。