OpenVINO™ セキュリティー・アドオン#
このガイドでは、OpenVINO™ セキュリティー・アドオンを使用して、OpenVINO™ ツールキットで作成されたモデルを作成、配布、使用する手順を説明します:
モデル開発者: モデル開発者は、独立系ソフトウェア・ベンダーと対話して、モデルへのユーザーアクセスを制御します。このドキュメントでは、OpenVINO™ セキュリティー・アドオンを使用してハードウェアと仮想マシンをセットアップし、OpenVINO™ モデルへのアクセス制御を定義し、アクセス制御されたモデルをユーザーに提供する方法を説明します。
独立系ソフトウェア・ベンダー: OpenVINO™ セキュリティー・アドオンを使用して、顧客 (ユーザー) に提供するアクセス制御モデルのライセンスを検証する手順については、このガイドを使用してください。
ユーザー: このドキュメントには、OpenVINO™ セキュリティー・アドオンを介して制御されたモデルにアクセスしてする必要があるエンドユーザー向けの手順が含まれています。
このリリースでは、1 人がモデル開発者と独立系ソフトウェア・ベンダーの両方の役割を果たします。したがって、このドキュメントでは、これら 2 つのロール用に 1 つのシステムを構成し、ユーザーロール用に 1 つのシステムを構成する手順を説明します。このドキュメントでは、同じ人物がモデル開発者、独立系ソフトウェア・ベンダー、およびユーザーの役割を果たす方法も提供し、ユーザーの観点から OpenVINO™ セキュリティー・アドオンがどのように機能するかを確認できるようにします。
概要#
OpenVINO™ セキュリティー・アドオンは、インテル® アーキテクチャー上の OpenVINO™ モデルサーバーと連携して動作します。OpenVINO™ セキュリティー・アドオンと OpenVINO™ モデルサーバーを併用すると、モデル開発者と独立系ソフトウェア・ベンダーが安全なパッケージングと安全なモデル実行を使用して OpenVINO™ モデルへのアクセス制御を可能にし、割り当てられた制限内でモデルユーザーが推論を実行できるようになります。
OpenVINO™ セキュリティー・アドオンは、カーネルベースの仮想マシン (KVM) で実行される 3 つのコンポーネントで構成されています。これらのコンポーネントは、分離された環境でセキュリティーが重要な操作を実行する方法を提供します。3 つのコンポーネントの概要は次のとおりです。それぞれの三角線をクリックすると詳細が表示されます。
OpenVINO™ セキュリティー・アドオン・ツール: モデル開発者や独立系ソフトウェア・ベンダーは、OpenVINO™ セキュリティー・アドオン・ツール (ovsatool) を使用して、アクセス制御されたモデルとマスターライセンスを生成できます。
モデル開発者は、OpenVINO™ ツールキットの出力からアクセス制御されたモデルを生成します。アクセス制御されたモデルは、モデルの中間表現 (IR) ファイルを使用して、モデルユーザーに配布されるアクセス制御された出力ファイルアーカイブを作成します。また、追加のセキュリティーなしでアーカイブファイルを長期保存したり、バックアップすることもできます。
モデル開発者は、OpenVINO™ セキュリティー・アドオン・ツール (ovsatool) を使用して、アクセス制御されたモデルの暗号キーと関連物を生成および管理します。暗号化マテリアルは、仮想マシン (VM) 環境でのみ使用できます。OpenVINO™ セキュリティー・アドオン・キー管理システムを使用すると、モデル開発者は外部の認証局を取得して、キーストアに追加する証明書を生成できます。
モデル開発者は、アクセス制御モデル用にユーザー固有のライセンスを JSON 形式ファイルで生成します。モデル開発者は、グローバルまたはユーザー固有のライセンスを定義し、ライセンスにポリシーを添付できます。例えば、モデル開発者はモデルに時間制限を追加したり、ユーザーがモデルを実行できる回数を制限したりできます。
OpenVINO™ セキュリティー・アドオンのライセンスサービス: OpenVINO™ セキュリティー・アドオン・ライセンス・サービスを使用して、ユーザー・パラメーターを検証します。
独立系ソフトウェア・ベンダーは、OpenVINO™ セキュリティー・アドオン・ライセンス・サービスをホストしており、ユーザーがアクセス制御されたモデルをモデルサーバーにロードしようとすると、ライセンス検証要求に応答します。ライセンスは OpenVINO™ セキュリティー・アドオン・ライセンス・サービスに登録されます。
ユーザーがモデルをロードすると、OpenVINO™ セキュリティー・アドオン・ランタイムはライセンスサービスに接続して、ライセンスが有効であり、モデル開発者が OpenVINO™ セキュリティー・アドオン・ツール (
ovsatool) で定義したパラメーターの範囲内にあることを確認します。ユーザーは、インターネット経由で独立系ソフトウェア・ベンダーのライセンスサービスにアクセスできる必要があります。
OpenVINO™ セキュリティー・アドオン・ランタイム: ユーザーは、OpenVINO™ セキュリティー・アドオン・ランタイムを仮想マシンにインストールして使用します。
ユーザーは、仮想マシンで OpenVINO™ セキュリティー・アドオン・ランタイムのコンポーネントをホストします。
ユーザーは、OpenVINO™ セキュリティー・アドオンの外部から、アクセス制御されたモデルを OpenVINO™ モデルサーバー構成ファイルに追加します。OpenVINO™ モデルサーバーはモデルをメモリーにロードしようとします。現時点では、OpenVINO™ セキュリティー・アドオン・ランタイムのコンポーネントは、アクセス制御モデルのユーザーライセンスを、独立系ソフトウェア・ベンダーが提供するライセンスサービスに保存されている情報と照合して検証します。
ライセンスが正常に検証されると、OpenVINO™ モデルサーバーはモデルをロードし、推論要求を処理します。
OpenVINO™ セキュリティー・アドオンがモデルの開発とデプロイに使用する場所
このドキュメントでは、SWTPM (ゲスト VM で使用される vTPM) と HW TPM (ホスト上の TPM) の間のバインディングについて説明します。
インストールについて#
モデル開発者、独立系ソフトウェア・ベンダー、およびユーザーは、それぞれ物理ハードウェア・マシンとカーネルベースの仮想マシン (KVM) を準備する必要があります。さらに、その役割ごとにゲスト仮想マシン (ゲスト VM) を準備します。
例:
1 人がモデル開発者と独立系ソフトウェア・ベンダーの両方を務める場合、2 つのゲスト VM を準備しなければなりません。両方のゲスト VM は、同じ物理ハードウェア (ホストマシン) 上に存在し、そのホストマシン上の同じ KVM の下に存在できます。
同様に 1 人が 3 つの役割すべてを担当する場合、3 つのゲスト VM を準備する必要があります。3 つのゲスト VM はすべて、同じホストマシン上に存在し、そのホストマシン上の同じ KVM の下に存在できます。
各マシンの目的
マシン |
目的 |
|---|---|
ホストマシン カーネルベースの仮想マシン (KVM) ゲスト VM |
KVM とゲスト VM 共有がセットアップされる物理ハードウェア。OpenVINO™ セキュリティー・アドオンは、セキュリティーが重要な操作に対して分離された環境を提供するため、この仮想マシンで実行されます。モデル開発者はゲスト VM を使用して、完成したモデルのアクセス制御を有効にします。独立系ソフトウェア・プロバイダーは、ゲスト VM を使用してライセンスサービスをホストします。ユーザーはゲスト VM を使用してライセンスサービスに接続し、アクセス制御モデルを実行します。 |
必要条件#
ハードウェア
インテル® Core™ またはインテル® Xeon® プロセッサー
オペレーティング・システム、ファームウェア、およびソフトウェア
ホストマシンの Ubuntu* Linux* 18.04。
TPM バージョン 2.0 準拠の Discrete Trusted Platform Module (dTPM) または Firmware Trusted Platform Module (fTPM) が必要です。
セキュアブートを有効にします。
その他
独立系ソフトウェア・ベンダーは、デプロイ用の楕円曲線暗号 (ECC) 証明書をサポートするオンライン証明書ステータスプロトコル (OCSP) を実装する認証局 (CA) にアクセスできる必要があります。
このドキュメントの例では、自己署名証明書を使用します。
ホストマシンを準備する#
このセクションは、モデル開発者と独立系ソフトウェア・ベンダーを組み合わせた役割と、個別ユーザーの役割を対象としています。
ステップ 1: ホストマシン上でパッケージをセットアップ#
このステップは、前提条件を満たすインテル® Core™ またはインテル® Xeon® プロセッサー・マシンで開始してください。
注
ステップ 1 ~ 11 を手動で実行する代わりに、OpenVINO™ セキュリティー・アドオン・リポジトリーの Scripts/reference ディレクトリーにあるスクリプト install_host_deps.sh を実行できます。問題を検出すると、スクリプトはエラーメッセージを表示して停止します。エラーによりスクリプトが停止した場合、エラーの原因となった問題を修正し、スクリプトを再起動てください。スクリプトは数分間実行され、進行状況に関する情報が報告されます。
トラステッド・プラットフォーム・モジュール (TPM) サポートのテスト:
dmesg | grep -i TPM
出力には、カーネル・ブート・ログ内の TPM の可用性が示されます。TPM サポートが利用可能であることを示すために、次のデバイスを検索します:
/dev/tpm0/dev/tpmrm0
この情報が表示されない場合、システムは OpenVINO™ セキュリティー・アドオンを使用する前提条件が満たされていません。
BIOS でハードウェアの仮想化サポートが有効になっていることを確認します:
$ kvm-ok
出力には次のように表示されます:
INFO: /dev/kvm existsKVM acceleration can be used表示が異なる場合は、BIOS 設定を変更してハードウェア仮想化を有効にしてください。
kvm-okコマンドが見つからない場合は、インストールします:sudo apt install -y cpu-checker
カーネルベースの仮想マシン (KVM) および QEMU パッケージをインストールしてください。
sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager
QEMU のバージョンを確認します:
qemu-system-x86_64 --version2.12.0 より前の QEMU バージョンを示している場合は、QEMU ウェブサイトから最新の QEMU バージョンをダウンロードおよびコンパイルしてインストールします。
libtpm パッケージのビルドとインストール。
swtpm パッケージのビルドとインストール。
swtpmパッケージを$PATH環境変数に追加します。ソフトウェア・ツール tpm2-abmrd をインストールします。インストール情報については、こちらを参照してください。
tpm2-tools をインストールします。インストール情報については、こちらを参照してください。
Docker パッケージ をインストールします。
注
install_host_deps.shスクリプトの使用にかかわりなく、ステップ 12 を完了して、ホストマシン上でのパッケージのセットアップを完了します。プロキシーの背後で実行している場合は、Docker のプロキシーを設定します。
以下のものがインストールされ、使用可能です:
* カーネルベースの仮想マシン (KVM)
* QEMU
* SW-TPM
* HW-TPM サポート
* Docker
ネットワーク用にホストマシンを構成する準備ができました。
ステップ 2: ホストマシン上でネットワークをセットアップ#
このステップは、モデル開発者と独立系ソフトウェア・ベンダーの役割を組み合わせたものです。モデルユーザー VM が別の物理ホストで実行される場合、そのホストに対しても次のステップを繰り返します。
このステップでは、2 つのネットワーク・ブリッジを準備します:
KVM がインターネット経由でアクセスできるグローバル IP アドレス。これは、ユーザーのマシン上の OpenVINO™ セキュリティー・アドオン・ランタイム・ソフトウェアが有効なライセンスを持っていることを確認するのに使用するアドレスです。
ゲスト VM と QEMU ホスト・オペレーティング・システム間の通信を提供するホスト専用ローカルアドレス。
このステップの例では、次の名前を使用します。実際の構成では別の名前が使用される場合があります:
50-cloud-init.yaml設定ファイル名の例として。eno1ネットワーク・インターフェイス名の例として。br0ブリッジ名の例として。virbr0ブリッジ名の例として。
ネットワーク構成ファイルを開いて編集します。このファイルは
/etc/netplanに次のような名前であります:50-cloud-init.yamlファイル内で次の行を探します:
network: ethernets: eno1: dhcp4: true dhcp-identifier: mac version: 2既存の回線を変更し、
br0ネットワーク・ブリッジを追加します。この変更により、外部ネットワークへのアクセスが可能になります:network: ethernets: eno1: dhcp4: false bridges: br0: interfaces: [Eno1]eno1] dhcp4: yes dhcp-identifier: mac version: 2ネットワーク構成ファイルを保存して閉じます。
2 つのコマンドを実行して、更新されたネットワーク構成ファイルをアクティブ化します。SSH を使用している場合、これらのコマンドを実行するとネットワーク接続が失われる可能性があります。その場合、ネットワークに再接続します。
sudo netplan generate
sudo netplan apply ブリッジが作成され、新しいブリッジに IP アドレスが割り当てられます。
新しいブリッジを確認します:
ip a | grep br0
出力は次のようになり、有効な IP アドレスが表示されます:
4: br0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000inet 123.123.123.123/<mask> brd 321.321.321.321 scope global dynamic br0
br0-qemu-ifupという名前のスクリプトを作成して、br0インターフェイスを起動します。スクリプトに次の内容を追加します:#!/bin/sh nic=$1 if [ -f /etc/default/qemu-kvm ]; then ./etc/default/qemu-kvm fi switch=br0 ifconfig $nic 0.0.0.0 up brctl addif ${switch} $nic
br0-qemu-ifdownという名前のスクリプトを作成して、br0インターフェイスを停止します。スクリプトに次の内容を追加します:#!/bin/sh nic=$1 if [ -f /etc/default/qemu-kvm ]; then ./etc/default/qemu-kvm fi switch=br0 brctl delif $switch $nic ifconfig $nic 0.0.0.0 down
virbr0-qemu-ifupという名前のスクリプトを作成して、virbr0インターフェイスを起動します。スクリプトに次の内容を追加します:#!/bin/sh nic=$1 if [ -f /etc/default/qemu-kvm ]; then ./etc/default/qemu-kvm fi switch=virbr0 ifconfig $nic 0.0.0.0 up brctl addif ${switch} $nic
virbr0-qemu-ifdownという名前のスクリプトを作成して、virbr0インターフェイスを停止します。スクリプトに次の内容を追加します:#!/bin/sh nic=$1 if [ -f /etc/default/qemu-kvm ]; then ./etc/default/qemu-kvm fi switch=virbr0 brctl delif $switch $nic ifconfig $nic 0.0.0.0 down
QEMU ネットワーク構成の詳細については、QEMU のドキュメントを参照してください。
ネットワークはホストマシン上に設定されます。ステップ 3 に進み、モデル開発者と独立系ソフトウェア・ベンダーの役割を組み合わせたゲスト VM を準備します。
ステップ 3: OpenVINO™ セキュリティー・アドオンをクローン#
OpenVINO™ セキュリティー・アドオンをダウンロードします。
ステップ 4: モデル開発者と独立系ソフトウェア・ベンダーのロールを組み合わせて 1 つのゲスト VM をセットアップ#
役割ごとに、ゲスト VM 仮想マシンを準備する必要があります。このリリースでは、モデル開発者ロールと独立系ソフトウェア・ベンダーの役割が組み合わされているため、これらのステップでは、ovsa_isv という 1 つのゲスト VM をセットアップするように指示されています。
ホストマシンでこれらのステップを開始します。
オプションとして、virsh と仮想マシン・マネージャーを使用してゲスト VM を作成および起動できます。この手順の詳細は、libvirtd のドキュメントを参照してください。
Ubuntu 18.04 の 64 ビット PC (AMD64) コンピューター用サーバー のインストール ISO イメージをダウンロードします。
モデル開発者および独立系ソフトウェア・ベンダーの役割を持つゲスト VM として機能する空の仮想ディスクイメージを作成します:
sudo qemu-img create -f qcow2 <path>/ovsa_isv_dev_vm_disk.qcow2 20G
ゲスト VM に Ubuntu 18.04 をインストールします。ゲスト VM に
ovsa_isvという名前を付けます:sudo qemu-system-x86_64 -m 8192 -enable-kvm \ -cpu host \ -drive if=virtio,file=<path-to-disk-image>/ovsa_isv_dev_vm_disk.qcow2,cache=none \ -cdrom <path-to-iso-image>/ubuntu-18.04.5-live-server-amd64.iso \ -device e1000,netdev=hostnet1,mac=52:54:00:d1:66:5f \ -netdev tap,id=hostnet1,script=<path-to-scripts>/virbr0-qemu-ifup,downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -vnc :1
VNC クライアントを
<host-ip-address>:1で接続します画面の指示に従って、ゲスト VM のインストールを完了します。VM に次の名前を付けます:
ovsa_isv_devゲスト VM をシャットダウンします。
cdrom イメージのオプションを削除した後、ゲスト VM を再起動します:
sudo qemu-system-x86_64 -m 8192 -enable-kvm \ -cpu host \ -drive if=virtio,file=<path-to-disk-image>/ovsa_isv_dev_vm_disk.qcow2,cache=none \ -device e1000,netdev=hostnet1,mac=52:54:00:d1:66:5f \ -netdev tap,id=hostnet1,script=<path-to-scripts>/virbr0-qemu-ifup,downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -vnc :1
必要な追加のソフトウェアをインストールするには、次のオプションのいずれかを選択します:
-
- オプション 1: スクリプトを使用して追加のソフトウェアをインストール
-
スクリプト
install_guest_deps.shを OVSA リポジトリーのScripts/reference directoryディレクトリーからゲスト VM にコピーします。スクリプトを実行します。
ゲスト VM をシャットダウンします。
-
- オプション 2追加のソフトウェアを手動でインストール
-
1. ソフトウェア・ツール tpm2-tss をインストールします。インストール情報については、こちらを参照してください。 2. ソフトウェア・ツール tpm2-abmrd をインストールします。インストール情報については、こちらを参照してください。 3. tpm2-tools をインストールします。インストール情報については、こちらを参照してください。 4. Docker パッケージ をインストールします。 5. ゲスト VM をシャットダウンします。
-
ホスト上で、仮想 TPM デバイスをサポートするディレクトリーを作成し、その証明書を提供します。
rootのみがこのディレクトリーに対する読み取り/書き込み権限を持つ必要があります:sudo mkdir -p /var/OVSA/ sudo mkdir /var/OVSA/vtpm sudo mkdir /var/OVSA/vtpm/vtpm_isv_dev export XDG_CONFIG_HOME=~/.config /usr/share/swtpm/swtpm-create-user-config-files swtpm_setup --tpmstate /var/OVSA/vtpm/vtpm_isv_dev --create-ek-cert --create-platform-cert --overwrite --tpm2 --pcr-banks - .. note:: 手順 10 と 11 では、コマンドを手動で実行する代わりに、OpenVINO™ セキュリティー・アドオン・リポジトリーの ``Scripts/reference`` ディレクトリーにある ``start_ovsa_isv_dev_vm.sh`` スクリプトをコピーして編集できます。スクリプトを使用する場合は、モデル開発者であるか、独立系ソフトウェア・ベンダーであるかに関係なく、ファイル名に ``isv`` が含まれるスクリプトを選択します。スクリプトを編集して、正しいディレクトリーの場所を指定し、各ゲスト VM の ``vnc`` を増やします。
ホスト上で vTPM を開始し、HW TPM データを NVRAM に書き込み、QEMU の vTPM を再起動します:
sudo swtpm socket --tpm2 --server port=8280 \ --ctrl type=tcp,port=8281 \ --flags not-need-init --tpmstate dir=/var/OVSA/vtpm/vtpm_isv_dev & sudo tpm2_startup --clear -T swtpm:port=8280 sudo tpm2_startup -T swtpm:port=8280 python3 <path to Security-Addon source>/Scripts/host/OVSA_write_hwquote_swtpm_nvram.py 8280 sudo pkill -f vtpm_isv_dev swtpm socket --tpmstate dir=/var/OVSA/vtpm/vtpm_isv_dev \ --tpm2 \ --ctrl type=unixio,path=/var/OVSA/vtpm/vtpm_isv_dev/swtpm-sock \ --log level=20
ゲスト VM を起動します:
sudo qemu-system-x86_64 \ -cpu host \ -enable-kvm \ -m 8192 \ -smp 8,sockets=1,cores=8,threads=1 \ -device e1000,netdev=hostnet0,mac=52:54:00:d1:66:6f \ -netdev tap,id=hostnet0,script=<path-to-scripts>/br0-qemu-ifup,downscript=<path-to-scripts>/br0-qemu-ifdown \ -device e1000,netdev=hostnet1,mac=52:54:00:d1:66:5f \ -netdev tap,id=hostnet1,script=<path-to-scripts>/virbr0-qemu-ifup,downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -drive if=virtio,file=<path-to-disk-image>/ovsa_isv_dev_vm_disk.qcow2,cache=none \ -chardev socket,id=chrtpm,path=/var/OVSA/vtpm/vtpm_isv_dev/swtpm-sock \ -tpmdev emulator,id=tpm0,chardev=chrtpm \ -device tpm-tis,tpmdev=tpm0 \ -vnc :1
コマンドで QEMU ランタイムオプションを使用して、このゲスト VM に割り当てられたメモリー量または CPU を変更します。
VNC クライアントを使用して、次のゲスト VM にログオンします:
<host-ip-address>:1
ステップ 5: ユーザーロール用に 1 つのゲスト VM をセットアップ#
ユーザーの役割を持つゲスト VM を作成するには、次のオプションのいずれかを選択します:
オプション 1: ovsa_isv_dev_vm_disk.qcow2 ディスクイメージをコピーして名前を変更します
ovsa_isv_dev_vm_disk.qcow2ディスクイメージをovsa_runtime_vm_disk.qcow2という名前の新しいイメージにコピーします。ステップ 4 でovsa_isv_dev_vm_disk.qcow2ディスクイメージを作成しました。新しいイメージをブートします。
ホスト名を
ovsa_isv_devからovsa_runtimeに変更します。
sudo hostnamectl set-hostname ovsa_runtime
新しいイメージの
ovsa_isv_devのすべてのインスタンスをovsa_runtimeに置き換えます。
sudo nano /etc/hosts
/etc/machine-idを変更します:
sudo rm /etc/machine-id systemd-machine-id-setup
ゲスト VM をシャットダウンします。
オプション 2: ゲスト VM を手動で作成します
空の仮想ディスクイメージを作成します:
sudo qemu-img create -f qcow2 <path>/ovsa_ovsa_runtime_vm_disk.qcow2 20G
ゲスト VM に Ubuntu 18.04 をインストールします。ゲスト VM に
ovsa_runtimeという名前を付けます:
sudo qemu-system-x86_64 -m 8192 -enable-kvm \ -cpu host \ -drive if=virtio,file=<path-to-disk-image>/ovsa_ovsa_runtime_vm_disk.qcow2,cache=none \ -cdrom <path-to-iso-image>/ubuntu-18.04.5-live-server-amd64.iso \ -device e1000,netdev=hostnet1,mac=52:54:00:d1:66:5f \ -netdev tap,id=hostnet1,script=<path-to-scripts>/virbr0-qemu-ifup, downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -vnc :2
VNC クライアントを
<host-ip-address>:2で接続します。画面の指示に従って、ゲスト VM のインストールを完了します。ゲスト VM に
ovsa_runtimeという名前を付けます。ゲスト VM をシャットダウンします。
ゲスト VM を再起動します:
sudo qemu-system-x86_64 -m 8192 -enable-kvm \ -cpu host \ -drive if=virtio,file=<path-to-disk-image>/ovsa_ovsa_runtime_vm_disk.qcow2,cache=none \ -device e1000,netdev=hostnet1,mac=52:54:00:d1:66:5f \ -netdev tap,id=hostnet1,script=<path-to-scripts>/virbr0-qemu-ifup, downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -vnc :2
必要な追加のソフトウェアをインストールするには、次のオプションのいずれかを選択します:
オプション 1: スクリプトを使用して追加のソフトウェアをインストール 1. スクリプト
install_guest_deps.shを OVSA リポジトリーのScripts/referenceディレクトリーからゲスト VM にコピーします。 2. スクリプトを実行します。 3. ゲスト VM をシャットダウンします。オプション 2: 追加のソフトウェアを手動でインストール 1. ソフトウェア・ツール tpm2-tss をインストールします。インストール情報については、ここを参照してください。 2. tpm2-abmrd ソフトウェア・ツールインストールします。インストール情報については、ここを参照してください。 3. tpm2-tools をインストールします。インストール情報については、こちらを参照してください。 4. Docker パッケージ をインストールします。 5. ゲスト VM をシャットダウンします。
仮想 TPM デバイスをサポートするディレクトリーを作成し、その証明書を提供します。
rootのみがこのディレクトリーに対する読み取り/書き込み権限を持つ必要があります:sudo mkdir /var/OVSA/vtpm/vtpm_runtime export XDG_CONFIG_HOME=~/.config /usr/share/swtpm/swtpm-create-user-config-files swtpm_setup --tpmstate /var/OVSA/vtpm/vtpm_runtime --create-ek-cert --create-platform-cert --overwrite --tpm2 --pcr-banks - .. note:: 手順 3 と 4 では、コマンドを手動で実行する代わりに、OpenVINO™ セキュリティー・アドオン・リポジトリーの ``Scripts/reference`` ディレクトリーにある ``start_ovsa_runtime_vm.sh`` スクリプトをコピーして編集できます。スクリプトを編集して、正しいディレクトリーの場所を指定し、各ゲスト VM の ``vnc`` を増やします。つまり、同じホストマシン上に 3 番目のゲスト VM を作成する場合は、``-vnc :2`` を ``-vnc :3`` に変更します。
vTPM を開始し、HW TPM データを NVRAM に書き込み、QEMU の vTPM を再起動します:
sudo swtpm socket --tpm2 --server port=8380 \ --ctrl type=tcp,port=8381 \ --flags not-need-init --tpmstate dir=/var/OVSA/vtpm/vtpm_runtime & sudo tpm2_startup --clear -T swtpm:port=8380 sudo tpm2_startup -T swtpm:port=8380 python3 <path to Security-Addon source>/Scripts/host/OVSA_write_hwquote_swtpm_nvram.py 8380 sudo pkill -f vtpm_runtime swtpm socket --tpmstate dir=/var/OVSA/vtpm/vtpm_runtime \ --tpm2 \ --ctrl type=unixio,path=/var/OVSA/vtpm/vtpm_runtime/swtpm-sock \ --log level=20
新しいターミナルでゲスト VM を起動します:
sudo qemu-system-x86_64 \ -cpu host \ -enable-kvm \ -m 8192 \ -smp 8,sockets=1,cores=8,threads=1 \ -device e1000,netdev=hostnet2,mac=52:54:00:d1:67:6f \ -netdev tap,id=hostnet2,script=<path-to-scripts>/br0-qemu-ifup,downscript=<path-to-scripts>/br0-qemu-ifdown \ -device e1000,netdev=hostnet3,mac=52:54:00:d1:67:5f \ -netdev tap,id=hostnet3,script=<path-to-scripts>/virbr0-qemu-ifup,downscript=<path-to-scripts>/virbr0-qemu-ifdown \ -drive if=virtio,file=<path-to-disk-image>/ovsa_runtime_vm_disk.qcow2,cache=none \ -chardev socket,id=chrtpm,path=/var/OVSA/vtpm/vtpm_runtime/swtpm-sock \ -tpmdev emulator,id=tpm0,chardev=chrtpm \ -device tpm-tis,tpmdev=tpm0 \ -vnc :2
コマンドで QEMU ランタイムオプションを使用して、このゲスト VM に割り当てられたメモリー量または CPU を変更します。
VNC クライアントを使用して、
<host-ip-address>:<x>のゲスト VM にログオンします。ここで、<x>はstart_ovsa_isv_vm.shまたはステップ 8 の vnc 番号に対応します。
OpenVINO™ セキュリティー・アドオンのソフトウェアを構築してインストールする方法#
以下の手順に従って、OpenVINO™ セキュリティー・アドオンをホストおよび別の VM でビルドしてインストールします。
ステップ 1: OpenVINO™ モデルサーバーのイメージをビルド#
OpenVINO™ セキュリティー・アドオンのビルドは、OpenVINO™ モデルサーバーの Docker コンテナに依存します。まず、ホスト上で OpenVINO™ モデルサーバーをダウンロードしてビルドします。
OpenVINO™ モデルサーバー・ソフトウェアをダウンロード
-
git clone https://github.com/openvinotoolkit/model_server.git cd model_server make docker_build
ステップ 2: すべてのロールに必要なソフトウェアをビルド#
このステップは、モデル開発者と独立系ソフトウェア・ベンダー、およびユーザーの役割を組み合わせたものです
前に複製したトップレベルの OpenVINO™ セキュリティー・アドオンのソース・ディレクトリーに移動します。
cd security_addon
OpenVINO™ セキュリティー・アドオンをビルド:
make clean all sudo -s make package ``` 次のパッケージが ``release_files`` ディレクトリーの下に作成されます: - ``ovsa-kvm-host.tar.gz``: ホストマシンファイル - ``ovsa-developer.tar.gz``: モデル開発者と独立系ソフトウェア開発者向け - ``ovsa-model-hosting.tar.gz``: ユーザー向け
ステップ 3: ホスト・ソフトウェアのインストール#
このステップは、モデル開発者、独立系ソフトウェア・ベンダー、およびユーザーの役割を合わせたものです。
release_filesディレクトリーに移動します:cd release_files
パスをセットアップ:
export OVSA_RELEASE_PATH=$PWD
OpenVINO™ セキュリティー・アドオン・ソフトウェアをホストマシンにインストールします:
cd $OVSA_RELEASE_PATH tar xvfz ovsa-kvm-host.tar.gz cd ovsa-kvm-host ./install.sh
複数のホストマシンを使用している場合、それぞれのホストマシンでステップ 3 を繰り返します。
ステップ 4: OpenVINO™ セキュリティー・アドオンのモデル開発者/ISV コンポーネントのインストール#
このステップは、モデル開発者と独立系ソフトウェア・ベンダーの役割を組み合わせたものです。ゲスト VM への参照は ovsa_isv_dev です。
<user>としてゲスト VM にログオンします。ホーム・ディレクトリーに OpenVINO™ セキュリティー・アドオン・ディレクトリーを作成します
mkdir -p ~/OVSA
ゲスト VM の外部のホストマシンに移動します
ovsa-developer.tar.gzをrelease_filesからゲスト VM にコピーします:cd $OVSA_RELEASE_PATH scp ovsa-developer.tar.gz username@<isv-developer-vm-ip-address>:/<username-home-directory>/OVSA
ゲスト VM に移動します:
ovsaユーザーを作成しますsudo useradd -m ovsa sudo passwd ovsa
ソフトウェアをゲスト VM にインストールします:
cd ~/OVSA tar xvfz ovsa-developer.tar.gz cd ovsa-developer sudo ./install.sh
別のターミナルで
ovsaユーザーとしてライセンスサーバーを起動します。source /opt/ovsa/scripts/setupvars.sh cd /opt/ovsa/bin ./license_server
注
ファイアウォールの内側にいる場合は、プロキシー構成を確認して設定し、ライセンスサーバーが証明書を検証できることを確認してください。
ステップ 5: OpenVINO™ セキュリティー・アドオンのモデルをホスティングするコンポーネントのインストール#
このステップはユーザー向けです。ゲスト VM への参照は ovsa_runtime です。
モデル・ホスティング・コンポーネントは、OpenVINO™ モデルサーバーの NGINX Docker をベースとした OpenVINO™ セキュリティー・アドオン・ランタイム Docker コンテナをインストールし、アクセス制御されたモデルをホストします。
<user>としてゲスト VM にログオンします。ホーム・ディレクトリーに OpenVINO™ セキュリティー・アドオン・ディレクトリーを作成します
mkdir -p ~/OVSA
ホストマシン上で、ovsa-model-hosting.tar.gz を release_files からゲスト VM にコピーします:
cd $OVSA_RELEASE_PATH scp ovsa-model-hosting.tar.gz username@<runtime-vm-ip-address>:/<username-home-directory>/OVSA
ゲスト VM に移動します:
ovsaユーザーを作成しますsudo useradd -m ovsa sudo passwd ovsa sudo usermod -aG docker ovsa
ソフトウェアをゲスト VM にインストールします:
cd ~/OVSA tar xvfz ovsa-model-hosting.tar.gz cd ovsa-model-hosting sudo ./install.sh
OpenVINO™ セキュリティー・アドオンの使用方法#
このセクションでは、モデル開発者/独立系ソフトウェア・ベンダーとユーザー間の対話が必要です。すべての役割は、このセクションを開始する前に、該当するすべてのセットアップ手順とインストール手順を完了する必要があります。
このドキュメントでは、例として face-detection-retail-0004 モデルを使用します。
次の図は、モデル開発者、独立系ソフトウェア・ベンダー、およびユーザーの間との対話を示しています。
ヒント
モデル開発者/独立系ソフトウェア・ベンダーとユーザーの役割は仮想マシンに関連しており、1 人が役割に必要な複数のタスクを実行する場合があります。このドキュメントでは、モデル開発者と独立系ソフトウェア・ベンダーのタスクが結合され、ovsa_isv というゲスト VM が使用されます。すべての役割を同じホストマシン上にセットアップすることもできます。
モデル開発者向け手順#
モデル開発者はモデルを作成し、アクセス制御を定義し、ユーザーライセンスを作成します。モデルが作成され、アクセス制御が有効になり、ライセンスの準備が完了したら、モデル開発者はモデルユーザーと共有する前にライセンスの詳細を独立系ソフトウェア・ベンダーに提供します。
ゲスト VM への参照は ovsa_isv_dev です。ゲスト VM に ovsa ユーザーとしてログオンします。
ステップ 1: 成果物のディレクトリーをセットアップ#
artifacts という名前のディレクトリーを作成します。このディレクトリーには、ライセンスの作成に必要なアーティファクトが保存されます:
mkdir -p ~/OVSA/artefacts
cd ~/OVSA/artefacts
export OVSA_DEV_ARTEFACTS=$PWD
source /opt/ovsa/scripts/setupvars.shステップ 2: キーストアを作成し証明書を追加#
証明書を要求するためのファイルを作成します:
この例では、デモ用途で自己署名証明書を使用します。運用環境では、CSR ファイルを使用して CA 署名付き証明書を要求します。
cd $OVSA_DEV_ARTEFACTS /opt/ovsa/bin/ovsatool keygen -storekey -t ECDSA -n Intel -k isv_keystore -r isv_keystore.csr -e "/C=IN/CN=localhost"
キー・ストア・ファイルとともに以下の 2 つのファイルが作成されます: -
isv_keystore.csr証明書署名要求 (CSR) -isv_keystore.csr.crt自己署名証明書運用環境では、
isv_keystore.csrを CA に送信して、CA 署名付き証明書を要求します。
証明書をキーストアに追加します
/opt/ovsa/bin/ovsatool keygen -storecert -c isv_keystore.csr.crt -k isv_keystore
ステップ 3: モデルを作成#
この例では、curl を使用して、OpenVINO Open Model Zoo から face-detection-retail-004 モデルをダウンロードします。ファイアウォールの内側にいる場合は、プロキシー構成を確認して設定してください。
Open Model Zoo からモデルをダウンロード:
curl --create-dirs https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_../legacy-features/model-zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.xml https://download.01.org/opencv/2021/openvinotoolkit/2021.1/open_../legacy-features/model-zoo/models_bin/1/face-detection-retail-0004/FP32/face-detection-retail-0004.bin -o model/face-detection-retail-0004.xml -o model/face-detection-retail-0004.binモデルは OVSA_DEV_ARTEFACTS/model ディレクトリーにダウンロードされます
ステップ 4: モデルのアクセス制御を定義し、マスターライセンスを作成#
モデルのアクセス制御とマスターライセンスを定義して有効にします:
uuid=$(uuidgen)
/opt/ovsa/bin/ovsatool controlAccess -i model/face-detection-retail-0004.xml model/face-detection-retail-0004.bin -n "face detection" -d "face detection retail" -v 0004 -p face_detection_model.dat -m face_detection_model.masterlic -k isv_keystore -g $uuidface-detection-retail-0004 モデルの中間表現ファイルは face_detection_model.dat として暗号化され、マスターライセンスは次のように生成されます。
ステップ 5: ランタイム参照 TCB の作成#
ランタイム参照 TCB を使用して、アクセス制御モデルと特定のランタイムの顧客ライセンスを作成します。
ランタイムの参照 TCB を生成します
/opt/ovsa/bin/ovsaruntime gen-tcb-signature -n "Face Detect @ Runtime VM" -v "1.0" -f face_detect_runtime_vm.tcb -k isv_keystoreステップ 6: アクセス制御されたモデルおよびランタイム参照 TCB を公開#
アクセス制御モデルはユーザーと共有する準備ができており、参照 TCB はライセンスチェックを実行する準備ができています。
ステップ 7: ユーザーリクエストを受信#
アクセス制御されたモデルにアクセスするユーザーからアーティファクトを取得します:
顧客のキーストアからの顧客証明書。
ユーザーがモデルにアクセスする期間など、ライセンスの運用に適用されるその他の情報
カスタマーライセンス構成を作成します。
cd $OVSA_DEV_ARTEFACTS /opt/ovsa/bin/ovsatool licgen -t TimeLimit -l30 -n "Time Limit License Config" -v 1.0 -u "<isv-developer-vm-ip-address>:<license_server-port>" /opt/ovsa/certs/server.crt -k isv_keystore -o 30daylicense.config .. note:: パラメーター /opt/ovsa/certs/server.crt には、ライセンスサーバーが使用する証明書が含まれています。サーバー証明書は顧客ライセンスに追加され、使用中に検証されます。`OpenVINO™ セキュリティー・アドオン・ライセンスサーバー証明書のピニング <https://github.com/openvinotoolkit/security_addon/blob/master/docs/ovsa_license_server_cert_pinning.md>` を参照してください
カスタマーライセンスを作成します。
cd $OVSA_DEV_ARTEFACTS /opt/ovsa/bin/ovsatool sale -m face_detection_model.masterlic -k isv_keystore -l 30daylicense.config -t face_detect_runtime_vm.tcb -p custkeystore.csr.crt -c face_detection_model.lic
ライセンスを使用してライセンスサーバーのデータベースを更新します。
cd /opt/ovsa/DB python3 ovsa_store_customer_lic_cert_db.py ovsa.db $OVSA_DEV_ARTEFACTS/face_detection_model.lic $OVSA_DEV_ARTEFACTS/custkeystore.csr.crt
次のファイルをユーザーに提供します:
face_detection_model.datface_detection_model.lic
モデルユーザーの手順#
ゲスト VM への参照は ovsa_rumtime です。ゲスト VM に ovsa ユーザーとしてログオンします。
ステップ 1: 成果物のディレクトリーのセットアップ#
artifacts という名前のディレクトリーを作成します。このディレクトリーには、ライセンスの作成に必要なアーティファクトが保存されます:
mkdir -p ~/OVSA/artefacts cd ~/OVSA/artefacts export OVSA_RUNTIME_ARTEFACTS=$PWD source /opt/ovsa/scripts/setupvars.sh
ステップ 2: CA 署名付き証明書をキーストアに追加#
顧客キー・ストア・ファイルを生成します:
cd $OVSA_RUNTIME_ARTEFACTS /opt/ovsa/bin/ovsatool keygen -storekey -t ECDSA -n Intel -k custkeystore -r custkeystore.csr -e "/C=IN/CN=localhost"
キー・ストア・ファイルとともに以下の 2 つのファイルが作成されます: -
custkeystore.csr証明書署名要求 (CSR) -custkeystore.csr.crt`自己署名証明書
custkeystore.csrを CA に送信して、CA 署名付き証明書を要求します。証明書をキーストアに追加します:
/opt/ovsa/bin/ovsatool keygen -storecert -c custkeystore.csr.crt -k custkeystore
ステップ 3: モデル開発者にアクセス制御されたモデルを要求#
この例では、scp を使用して、同じホストマシン上の ovsa_runtime ゲスト VM と ovsa_dev ゲスト VM 間でデータを共有します。
モデルの必要性をモデル開発者に伝えます。開発者は、キーストアからの証明書とその他の情報を必要とします。この例では、必要とされるモデルが利用可能な時間を使用します。
モデルユーザーの証明書を開発者に提供する必要があります:
cd $OVSA_RUNTIME_ARTEFACTS scp custkeystore.csr.crt username@<developer-vm-ip-address>:/<username-home-directory>/OVSA/artefacts
ステップ 4: アクセス制御されたモデルを受信して OpenVINO™ モデルサーバーにロード#
モデルを次の名前のファイルとして受け取ります:
face_detection_model.dat
face_detection_model.lic
cd $OVSA_RUNTIME_ARTEFACTS scp username@<developer-vm-ip-address>:/<username-home-directory>/OVSA/artefacts/face_detection_model.dat . scp username@<developer-vm-ip-address>:/<username-home-directory>/OVSA/artefacts/face_detection_model.lic .
環境の準備:
cd $OVSA_RUNTIME_ARTEFACTS/.. cp /opt/ovsa/example_runtime ovms -r cd ovms mkdir -vp model/fd/1
$OVSA_RUNTIME_ARTEFACTS/../ovmsディレクトリーには、モデルサーバーを起動するスクリプトとサンプル構成 JSON ファイルが含まれています。モデル開発者からアーティファクトをコピーします:
cd $OVSA_RUNTIME_ARTEFACTS/../ovms cp $OVSA_RUNTIME_ARTEFACTS/face_detection_model.dat model/fd/1/. cp $OVSA_RUNTIME_ARTEFACTS/face_detection_model.lic model/fd/1/. cp $OVSA_RUNTIME_ARTEFACTS/custkeystore model/fd/1/.
モデル開発者から受け取ったアクセス制御されたモデル・アーティファクト名を含めるように、
sample.jsonの名前を変更して編集します。ファイルは次のようになります:{ "custom_loader_config_list":[ { "config":{ "loader_name":"ovsa", "library_path": "/ovsa-runtime/lib/libovsaruntime.so" } } ], "model_config_list":[ { "config":{ "name":"controlled-access-model", "base_path":"/sampleloader/model/fd", "custom_loader_options": {"loader_name": "ovsa", "keystore": "custkeystore", "controlled_access_file": "face_detection_model"} } } ] }
ステップ 5: NGINX モデルサーバーの開始#
NGINX モデルサーバーは、アクセス制御されたモデルを公開します。
./start_secure_ovsa_model_server.shNGINX インターフェイスの詳細については、こちらを参照してください。
ステップ 6: 推論実行の準備#
別の端末からゲスト VM にログオンします。
セットアップ用の Python 依存関係をインストールします。例:
sudo apt install pip3 pip3 install cmake pip3 install scikit-build pip3 install opencv-python pip3 install futures==3.1.1 pip3 install tensorflow-serving-api==1.14.0
face_detection.pyを次の example_client からコピーします:/opt/ovsa/example_clientcd ~/OVSA/ovms cp /opt/ovsa/example_client/* .
推論用にサンプル画像をコピーします。推論用のサンプルイメージを含むイメージ・ディレクトリーが作成されます。
curl --create-dirs https://raw.githubusercontent.com/openvinotoolkit/model_server/master/example_client/images/people/people1.jpeg -o images/people1.jpeg
ステップ 7: 推論の実行#
face_detection.py スクリプトを実行します:
python3 face_detection.py --grpc_port 3335 --batch_size 1 --width 300 --height 300 --input_images_dir images --output_dir results --tls --server_cert /var/OVSA/Modelserver/server.pem --client_cert /var/OVSA/Modelserver/client.pem --client_key /var/OVSA/Modelserver/client.key --model_name controlled-access-modelまとめ#
ここでは以下のことを行いました:
マシンごとに 1 つの KVM を使用して 1 つ以上のコンピューター (ホストマシン) をセットアップし、ホストマシン上に 1 つ以上の仮想マシン (ゲスト VM) をセットアップしました
OpenVINO™ セキュリティー・アドオンをインストールしました
OpenVINO™ セキュリティー・アドオンと連携するために OpenVINO™ モデルサーバーを使用しました
モデル開発者または独立系ソフトウェア・ベンダーとして、管理されたモデルにアクセスし、モデルのライセンスを準備しました。
モデル開発者または独立系ソフトウェア・ベンダーは、ライセンスサーバーを準備して実行し、ユーザーがアクセス制御モデルを使用する有効なライセンスを持っているか確認しました。
-
ユーザーとして、アクセス制御されたモデルとそのモデルのライセンスを取得するため、モデル開発者または独立系ソフトウェア・ベンダーに情報を提供しました。
ユーザーとして、ライセンスを取得し、制御されたモデルを実行できるホストサーバーをセットアップして起動しました。
-
ユーザーとして、アクセス制御されたモデルをロードしてモデルのライセンスを検証し、そのモデルを使用して推論を実行しました。
関連情報#
詳細は、次のリンクを参照してください: