クイックスタート: Azure CLI を使用して、コンフィデンシャル コンピューティング Intel SGX エージェント ノードを含む AKS クラスターをデプロイする
このクイックスタートでは、Azure CLI を使用して、エンクレーブ対応 (DCsv2/DCSv3) VM ノードを含む Azure Kubernetes Service (AKS) クラスターをデプロイします。 その後、シンプルな Hello World アプリケーションをエンクレーブで実行します。 クラスターのプロビジョニングとコンフィデンシャル コンピューティング ノードの追加は Azure portal から行うこともできますが、このクイックスタートでは、Azure CLI に焦点を絞って説明します。
AKS は、開発者またはクラスター オペレーターが迅速にクラスターをデプロイして管理できるようにするマネージド Kubernetes サービスです。 詳細については、AKS の概要に関するページと AKS のコンフィデンシャル ノードの概要に関するページを参照してください。
コンフィデンシャル コンピューティング ノードの特徴は次のとおりです。
- Linux コンテナーをサポートする Linux ワーカー ノード。
- 第 2 世代仮想マシン (VM) と Ubuntu 18.04 の VM ノード。
- Intel SGX 対応 CPU。EPC (Encrypted Page Cache) メモリを活用し、機密性が保護されたエンクレーブ内でコンテナーを実行するのに役立ちます。 詳細については、「Azure コンフィデンシャル コンピューティングについてよく寄せられる質問」を参照してください。
- コンフィデンシャル コンピューティング ノードと共にプレインストールされた Intel SGX DCAP ドライバー。 詳細については、「Azure コンフィデンシャル コンピューティングについてよく寄せられる質問」を参照してください。
注意
DCsv2/DCsv3 VM には、利用可能なリージョンが限られた特殊なハードウェアが使用されます。 詳細については、利用可能な SKU とサポートされるリージョンに関するページを参照してください。
前提条件
このクイック スタートでは以下が必要です。
自分のサブスクリプションで最低 8 つの DCsv2、DCSv3、DCdsv3 コアが利用できること。
既定では、Azure サブスクリプションの Intel SGX VM サイズに対して事前に割り当てられたクォータはありません。 サブスクリプションの VM コア クォータを要求するには、次の手順に従う必要があります。
エンクレーブ対応のコンフィデンシャル コンピューティング ノードと Intel SGX アドオンを使用して AKS クラスターを作成する
Intel SGX アドオンが有効になっている AKS クラスターを作成し、そのクラスターにノード プールを追加し、Hello World エンクレーブ アプリケーションを使用して作成した内容を確認するには、次の手順に従います。
システム ノード プールと AKS Intel SGX アドオンを使用して AKS クラスターを作成する
注意
前述の前提条件を満たす AKS クラスターが既にある場合は、次のセクションに進み、コンフィデンシャル コンピューティング ノード プールを追加してください。
Intel SGX AKS アドオン "confcom" では、Intel SGX デバイス ドライバーがご使用のコンテナーに公開されて、ポッド yaml に変更が追加されるのを防ぎます。
まず、az group create コマンドを使用して、このクラスター用のリソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを eastus2 リージョンに作成します。
az group create --name myResourceGroup --location eastus2
次に、az aks create コマンドを使用して、コンフィデンシャル コンピューティング アドオンが有効になっている AKS クラスターを作成します。
az aks create -g myResourceGroup --name myAKSCluster --generate-ssh-keys --enable-addons confcom
上記のコマンドを実行すると、コンフィデンシャル コンピューティングノード以外のシステム ノード プールを持つ新しい AKS クラスターがデプロイされます。 システム ノード プールには、コンフィデンシャル コンピューティング Intel SGX ノードをお勧めしません。
コンフィデンシャル コンピューティング機能を備えたユーザー ノード プールを AKS クラスターに追加する
次のコマンドを実行して、3 つのノードを含む Standard_DC4s_v3
サイズのユーザー ノード プールを AKS クラスターに追加します。 サポートされている DCsv2/DCsv3 SKU とリージョンの一覧から、大きいサイズの別の SKU を選択できます。
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-vm-size Standard_DC4s_v3 --node-count 2
このコマンドを実行すると、DCsv3 の新しいノード プールが、コンフィデンシャル コンピューティング アドオン デーモンセット (SGX デバイス プラグイン) と共に表示されます。
ノード プールとアドオンを確認する
az aks get-credentials コマンドを使用して、AKS クラスターの資格情報を取得します。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
ノードが正しく作成され、SGX 関連のデーモンセットが DCsv2 ノード プールで実行されていることを確認するには、kubectl get pods
コマンドを使用します。
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
出力内容が上記のコードと一致する場合は、AKS クラスターで機密性の高いアプリケーションを実行する準備ができています。
このクイックスタートの「分離されたエンクレーブ アプリケーションから Hello World をデプロイする」セクションに進んで、エンクレーブでアプリをテストすることができます。 または、次の手順に従って AKS にさらにノード プールを追加します (AKS は、SGX ノードプールと非 SGX ノードプールの混在をサポートしています。)
コンフィデンシャル コンピューティング ノード プールを既存の AKS クラスターに追加する
このセクションでは、このクイックスタートで前述した前提条件を満たす AKS クラスターが既に実行されていることを前提としています。
既存のクラスターでコンフィデンシャル コンピューティング AKS アドオンを有効にする
次のコマンドを実行して、コンフィデンシャル コンピューティング アドオンを有効にします。
az aks enable-addons --addons confcom --name MyManagedCluster --resource-group MyResourceGroup
DCsv3 ユーザー ノード プールをクラスターに追加する
注意
コンフィデンシャル コンピューティング機能を使用するには、既存の AKS クラスターに、DCsv2/DCsv3 VM SKU に基づくノード プールが少なくとも 1 つ必要です。 コンフィデンシャル コンピューティングに使用される DCs-v2/Dcs-v3 VM SKU の詳細については、利用可能な SKU とサポートされるリージョンに関するページを参照してください。
次のコマンドを実行して、ノード プールを作成します。
az aks nodepool add --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup --node-count 2 --node-vm-size Standard_DC4s_v3
confcompool1 という名前の新しいノード プールが作成されたことを確認します。
az aks nodepool list --cluster-name myAKSCluster --resource-group myResourceGroup
デーモンセットがコンフィデンシャル ノード プールで実行されていることを確認する
既存の AKS クラスターにサインインして、次の確認を実行します。
kubectl get nodes
出力内容に、AKS クラスターに新しく追加された confcompool1 プールが表示されます。 他のデーモンセットも表示される場合があります。
kubectl get pods --all-namespaces
kube-system sgx-device-plugin-xxxx 1/1 Running
出力内容が上記のコードと一致する場合は、AKS クラスターで機密性の高いアプリケーションを実行する準備ができています。
分離されたエンクレーブ アプリケーションから Hello World をデプロイする
これで、テスト アプリケーションをデプロイする準備ができました。
hello-world-enclave.yaml という名前のファイルを作成し、次の YAML マニフェストを貼り付けます。 このサンプル アプリケーション コードは、Open Enclave プロジェクトにあります。 このデプロイでは、confcom アドオンがデプロイ済みであることを前提としています。
Note
次の例では、パブリック コンテナー イメージを Docker Hub からプルします。 匿名の pull request を行うのではなく、Docker Hub アカウントを使用して認証するようにプル シークレットを設定することをお勧めします。 パブリック コンテンツを操作するときの信頼性を向上させるために、プライベートの Azure Container Registry にイメージをインポートして管理します。 パブリック イメージの操作に関する詳細を参照してください。
apiVersion: batch/v1
kind: Job
metadata:
name: oe-helloworld
namespace: default
spec:
template:
metadata:
labels:
app: oe-helloworld
spec:
containers:
- name: oe-helloworld
image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
resources:
limits:
sgx.intel.com/epc: "10Mi"
requests:
sgx.intel.com/epc: "10Mi"
volumeMounts:
- name: var-run-aesmd
mountPath: /var/run/aesmd
restartPolicy: "Never"
volumes:
- name: var-run-aesmd
hostPath:
path: /var/run/aesmd
backoffLimit: 0
または、次に示すように、コンテナーのデプロイに対してノード プール選択デプロイを実行することもできます。
apiVersion: batch/v1
kind: Job
metadata:
name: oe-helloworld
namespace: default
spec:
template:
metadata:
labels:
app: oe-helloworld
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: agentpool
operator: In
values:
- acc # this is the name of your confidential computing nodel pool
- acc_second # this is the name of your confidential computing nodel pool
containers:
- name: oe-helloworld
image: mcr.microsoft.com/acc/samples/oe-helloworld:latest
resources:
limits:
sgx.intel.com/epc: "10Mi"
requests:
sgx.intel.com/epc: "10Mi"
volumeMounts:
- name: var-run-aesmd
mountPath: /var/run/aesmd
restartPolicy: "Never"
volumes:
- name: var-run-aesmd
hostPath:
path: /var/run/aesmd
backoffLimit: 0
ここで、kubectl apply
コマンドを使用して、セキュア エンクレーブで開くサンプル ジョブを作成します (次の出力例を参照)。
kubectl apply -f hello-world-enclave.yaml
job "oe-helloworld" created
次のコマンドを実行すると、このワークロードによって高信頼実行環境 (エンクレーブ) が正常に作成されたことを確認できます。
kubectl get jobs -l app=oe-helloworld
NAME COMPLETIONS DURATION AGE
oe-helloworld 1/1 1s 23s
kubectl get pods -l app=oe-helloworld
NAME READY STATUS RESTARTS AGE
oe-helloworld-rchvg 0/1 Completed 0 25s
kubectl logs -l app=oe-helloworld
Hello world from the enclave
Enclave called into host to print: Hello World!
リソースをクリーンアップする
このクイックスタートで作成したコンフィデンシャル コンピューティング ノード プールを削除するには、次のコマンドを使用します。
az aks nodepool delete --cluster-name myAKSCluster --name confcompool1 --resource-group myResourceGroup
AKS クラスターを削除するには、次のコマンドを使用します。
az aks delete --resource-group myResourceGroup --cluster-name myAKSCluster
次の手順
ISV/OSS SGX ラッパー ソフトウェアを使用し、機密コンテナーを介して Python、ノード、またはその他のアプリケーションを実行します。 GitHub の機密コンテナーのクイック スタート サンプルを確認します。
GitHub のエンクレーブ対応 Azure コンテナー サンプルを使用して、エンクレーブ対応アプリケーションを実行します。