Slide 1

Slide 1 text

1 Rustで実装された AWS Nitro Enclaves CLIを読む Osuke Sudo 2020/12/7 @Rust LT Online #2

Slide 2

Slide 2 text

2 @zoom_zoomzo Osuke ソフトウェアエンジニア@LayerX ● 暗号技術・TEEを用いたデータのプライバシー保護・改ざん 耐性手法の研究開発(Confidential Computing) ● Anonifyの開発 ○ https://github.com/LayerXcom/anonify

Slide 3

Slide 3 text

3 アジェンダ ● AWS Nitro Enclacvesとは ● Enclave起動までの処理の流れ ● EIFイメージ展開とメモリ割り当て

Slide 4

Slide 4 text

4 ● 高度にセキュアな情報を扱うことを想定し、AWS Nitro Systemにより提供される隔離保護された実行環境 ○ 軽量なkvmベースのハイパーバイザ + ネットワーク・ストレージのオフロード + セキュリティチッ プなど ● それぞれのEnclaveには、EC2のメモリやCPUリソースを割り当てることができ、独立したカーネルOS上 で動作 ● Enclaveは親EC2とのvsockのみでやりとり可能(外部のネットワークやストレージに接続することはでき ず、admin IAM権限でもユーザーアクセスはできない) AWS Nitro Enclavesとは https://aws.amazon.com/jp/blogs/aws/aws-nitro-enclaves-isolated-ec2-environments-to-process-confidential-data/

Slide 5

Slide 5 text

5 Nitro Enclacve CLI ● Nitro-cliでdocker imageからEIF(Enclave Image File)をビルド可能 ● EIFと割り当てるメモリ、vCPUを指定しenclaveを起動

Slide 6

Slide 6 text

6 enclave起動までの処理 1. 親プロセス:CLIコマンドでコミュニケーションするためのEnclave用デーモンの生成 2. デーモン:コマンドを受け取るためのevent loopを回す 3. 親プロセス:socketにrun-enclaveコマンドを送信 4. デーモン:nitroデバイスファイルへVM生成コマンド送信 5. デーモン:メモリの割り当てとEIFをメモリに書き込み 6. デーモン:vCPUの割り当て 7. デーモン:nitroデバイスファイルを介しenclaveをスタート 8. 親プロセス:enclaveからのレスポンスを処理し表示 参考: Rustで実装されたAWS Nitro Enclaves CLIの実装を読む https://qiita.com/Osuke/items/81d928bd2a46fab46cbc

Slide 7

Slide 7 text

7 init_memory(): メモリ領域の確保 ● Run-enclaveコマンドの引数として渡したメ モリサイズ分だけメモリ領域を確保 ● それぞれのregionがhuge-pageに対応し、 libc::mmap()により割り当て

Slide 8

Slide 8 text

8 init_memory(): EIFイメージの展開 ● NE_GET_IMAGE_LOAD_INFOコマンドでioctlを呼 び、EIFイメージを展開するメモリのオフセットを Nitro Systemから取得 ● 確保したメモリ領域とイメージ展開オフセットから 実際にEIFを書き込む ● ページごとにNE_SET_USER_MEMORY_REGIONコ マンドでioctlを呼び、デバイスドライバにセット ○ (KVMでいうところの KVM_SET_USER_MEMORY_REGIONで実行 バイナリをVMにセットしているイメージ)

Slide 9

Slide 9 text

9 ● Rustで実装されたAWS Nitro Enclaves CLIの実装を読む ○ https://qiita.com/Osuke/items/81d928bd2a46fab46cbc ● Nitro Enclaves Command Line Interface (Nitro CLI) ○ https://github.com/aws/aws-nitro-enclaves-cli ● Deep Dive Into AWS Nitro Enclaves - AWS Online Tech Talks ○ https://youtu.be/K5PRNHaEdOw ● AWS re:Invent 2019: Powering next-gen Amazon EC2: Deep dive into the Nitro system (CMP303-R2) ○ https://youtu.be/rUY-00yFlE4 References