【レポート】EC2上の分離された環境で機密データを処理するAWS Nitro Enclaves Deep Dive #SEC318 #reinvent

re:Invent 2020にて行われたSEC318「Deep dive on AWS Nitro Enclaves for applications running on Amazon EC2」のセッションレポートです。 AWS版Trusted Execution Environment(TEE)を学べます。
2020.12.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Nitro Enclavesは Confidential Computing を提供する Trusted Execution Environment(TEE)です。EC2インスタンス内に機密性の高い分離されたコンピューティング環境を提供します。

enclave は馴染みの無い単語ですが、四方を完全に囲まれた領域(包領)を意味します。 イタリアがEC2インスタンスとすれば、バチカンがenclaveに相当します。

本セッションは、AWS HyperPlane、Nitroの開発などにも携わってきた、セキュリティつよつよなシニアプリンシパルエンジニア Colm MacCarthaigh による AWS Nitro Enclavesの Deep Dive セッションです。

Confidential Computing や TEE に馴染みがない場合、公式ドキュメントで Nitro Enclaves のコンセプト(特に Enclave, EIF、attestation)を学び、次の4分でわかる AWS Nitro Enclaves 動画をみて概要を把握しておくと、セッション動画の理解も進むと思います。

セッション概要

  • タイトル : Deep dive on AWS Nitro Enclaves for applications running on Amazon EC2
  • スピーカー : Colm MacCarthaigh(Senior Principal Engineer@AWS)
  • セッションID : SEC318

セッションはこちらをご確認ください

概要

AWS Nitro Systemは、次世代のAmazon EC2インスタンスの基盤となるプラットフォームであり、AWSがより迅速にイノベーションを起こし、AWSのお客様のコストをさらに削減し、セキュリティの強化や新しいインスタンスタイプなどの追加のメリットを提供できるようにします。このセッションでは、AWS NitroEnclavesを含むNitroシステムのセキュリティ面について詳しく説明します。また、Nitroシステムを活用してEC2インスタンスを使用して安全なアプリケーションを構築する方法についても学びます。(Google Translateによる翻訳)

The AWS Nitro System is the underlying platform for the next generation of Amazon EC2 instances that enables AWS to innovate faster, further reduce cost for AWS customers, and deliver added benefits like increased security and new instance types. This session dives deep on the security aspects of the Nitro System, including AWS Nitro Enclaves. You also learn how you can leverage the Nitro System to build secure applications using EC2 instances.

3行まとめ

  • AWS Nitro Enclaves はEC2インスタンス内で動作する機密性の高い分離されたコンピューティング環境です。
  • 開発者がかんたんに使い始められるインターフェースが提供されています。
  • 開発者はメモリ管理などを難しい技術的なことを意識する必要はありません。

amazon.com は機密性の高い支払い情報をどのように管理していた?

Amazon.com はクレジットカード番号など機密性が極めて高い情報を扱っています。

2000年代のAmazon.comは支払い系システムとその他のシステムが異なるデータセンターで構築されており、 支払い系システムはインターネットアクセスが無い、特定の物理ネットワークの特定端末からしかシステム管理できない、など意図的にアクセスが制限されていました。

現在のAWSであれば、VPCを使うと遥かにかんたんに同等の仮想ネットワーク環境を構築できます。 とはいえ、VPCの設定やEC2の構築、ネットワーク設定など、やるべきことは多岐に渡ります。

AWS Nitro Enclaves の狙い

AWS Nitro Enclaves は EC2 1台に完結して、同等の

  • セキュリティ
  • システムの分離

  • 高アジリティ
  • 低コスト
  • 低レイテンシー

に実現するものです。

EC2がコンプロマイズされても、そのなかで動作する Enclave にはメモリ含めてアクセスすることはできません。

開発者はEnclavesプラットフォームでアプリケーションを作ることに専念すればよく、暗号化など難しい処理を意識する必要はありません。

AWS Nitro Enclaves の追加費用は発生しません。

AWS Nitro Enclaves は AWS Nitro System 上で構築

古典的な仮想化

  • 物理サーバーにXENのような仮想化フレームワークをインストールし、ハイパーバイザー上のインスタンスには物理サーバーのリソースを割り当てる。
  • 同時に、ネットワークやストレージなどの仮想化も必要。
  • 各インスタンスやハイパーバイザーなど、様々なレイヤーを運用する必要があり、大規模な運用チームが必要

AWS Nitro System での仮想化

  • AWS Nitro Systemではネットワーク、ストレージなどはそれぞれ独立したセキュアなカードになっている。
  • 物理マシンのリソースはハイパーバイザーとインスタンスにフルフル使える。
  • それぞれが物理的に分離している。

AWS Nitro Enclaves の動作

  1. Nitro世代のEC2インスタンスを起動
  2. イメージとリソース(CPUコア・メモリ)を指定してenclaveを起動

するだけ。

リソースは起動元EC2インスタンスから割り当てられる。

AWS Nitro Enclaves の分離

各enclaveは同じ物理ホスト上であってもそれぞれ隔離されており、起動元EC2インスタンスのrootユーザーですら、enclaveのメモリやCPUにはアクセスできない。

Trusted Execution Environment(TEE) の実装によっては、enclave のメモリが暗号された状態でアクセスできるものもあるが、AWS Nitro Enclave はよりシンプル・堅牢に一切アクセスできないようにしている。

  • 永続ストレージ無し
  • ネットワークアクセス無し
  • インタラクティブアクセスなし

Enclave イメージの作成

  • イメージはベアボーンカーネルで、わずかなユーザースペースのみ
  • Docker ファイルで Enclave イメージを作るが、Dockerはイメージのパッケージングに使っているだけ
  • イメージの実行にDockerのようなコンテナやオーケストレーションフレームワークは不要

Enclave イメージの実行

  • 親インスタンスとEnclave にはVM ソケット(vsock;仮想シリアルケーブルのようなもの)を作成
  • 通信メッセージは漏洩、スプーフ、インターセプトはできない
  • ソケット間はメッセージパッシング、RPC、RESTのような古典的なメッセージ送受信を行う

AWS Nitro Enclaves attestation

  • Enclave 起動時に公開鍵ペアを作成
  • この鍵のペアはEnclave削除時に破棄される
  • 公開鍵(とオプションでナンス)をNitro attestation サービスに送信し、attestation ドキュメント(問い合わせた情報、イメージ・カーネルのチェックサム、起動情報など)を受け取る
  • ドキュメントは NitroのPKIで署名され、サードパーティーが検証可能
  • 秘密鍵を持っているEnclave だけが暗号化されたドキュメントを復号可能
  • AWS KMS/ACM ともシームレスに連携
  • 親EC2インスタンス上のヘルパーエージェントが Enclave - AWSサービス間の通信をE2E暗号

AWSとユーザーの責任範囲

  • AWS: EC2インスタンスと enclave 間の分離(難題)
  • ユーザー:enclave イメージで実行するアプリケーション
    • RCE(Remote Code Execution)
    • サイドチャンネル攻撃
    • などはユーザーの責任

ユースケース

センシティブデータの処理

  • データをKMS で暗号化
  • attestationを利用
  • KMSのポリシーにおいてイメージのチェックサムや署名鍵を条件にKMS鍵をアクセス制御

最後に

AWS が提供する Confidential Computing/Trusted Execution Environment(TEE) な AWS Nitro Enclaves の誕生背景から実装、ユースケースまで幅広く学べるセッションでした。

なお、AWS はフルマネージドなサービスが多い中、AWS Nitro Enclave は最低限のAPIがむき出し状態であり、それらを活用したツールチェインも OSS で公開 *1されているので、裏の実装を思い浮かべながらいじりたいシステムプログラミング好きにもおすすめのサービスです。

AWS re:Invent 2020 は現在絶賛開催中です!

参加がまだの方は、この機会に是非こちらのリンクからレジストレーションして豊富なコンテンツを楽しみましょう!

AWS re:Invent | Amazon Web Services

参考

脚注

  1. C/Rustで実装