Cette rubrique explique comment mettre en place un environnement de calcul confidentiel basé sur Software Guard Extensions (SGX) sur une instance Elastic Compute Service (ECS) compatible Intel® SGX, également appelée instance vSGX. Elle détaille également la procédure de vérification de la fonctionnalité SGX sur l'instance.
Prérequis
Une instance vSGX doit être créée et vous devez y être connecté.
Seules les familles d'instances g7t, c7t, r7t et g9it prennent en charge la fonctionnalité SGX. Pour plus d'informations, consultez la section Présentation des familles d'instances.
Contexte
Intel® SGX établit un environnement de calcul confidentiel au niveau physique pour garantir la sécurité des données grâce à des protections matérielles plutôt que logicielles ou basées sur le micrologiciel. Intel® SGX utilise des extensions de jeu d'instructions et un mécanisme de contrôle d'accès pour isoler l'environnement d'exécution des programmes SGX. Cela protège la confidentialité et l'intégrité du code clé et des données contre les attaques malveillantes. Contrairement à d'autres technologies de sécurité, Intel® SGX s'appuie sur une racine de confiance purement matérielle. Cette approche prévient les défauts liés aux vulnérabilités logicielles dont dépendrait autrement la racine de confiance, renforçant ainsi la sécurité du système.
Les familles d'instances renforcées en matière de sécurité g7t, c7t, r7t et g9it offrent une mémoire confidentielle basée sur Intel® SGX et prennent en charge la technologie SGX pour les machines virtuelles. Vous pouvez développer et exécuter des programmes SGX sur des instances vSGX.
Si vous utilisez des clés liées au matériel (telles que les clés de scellement SGX) pour chiffrer les données d'une instance au sein d'un enclave Intel SGX, les données chiffrées ne pourront pas être déchiffrées après un changement d'hôte de l'instance. Nous vous recommandons de mettre en œuvre la redondance et la sauvegarde des données au niveau de la couche application afin de garantir la fiabilité de celle-ci.
Procédure
Étape 1 : Vérifier si SGX est activé
Avant de configurer un environnement de calcul confidentiel SGX, utilisez CPUID pour vérifier l'activation de SGX. Cette section décrit la marche à suivre. Les exemples ci-dessous s'appuient sur une image Alibaba Cloud Linux 2 (UEFI), Alibaba Cloud Linux 3 (UEFI) ou Ubuntu 22.04 (UEFI).
Image Alibaba Cloud Linux 2/3 (UEFI)
-
Installez CPUID.
sudo yum install -y cpuid -
Vérifiez si SGX est activé.
cpuid -1 -l 0x7 |grep SGXUn résultat similaire à celui ci-dessous indique que SGX est activé.
RemarqueL'exécution des programmes SGX nécessite le pilote SGX une fois la fonctionnalité activée. Les images dédiées fournies par Alibaba Cloud intègrent ce pilote. Si vous n'utilisez pas une image dédiée, installez le pilote SGX manuellement.
-
Vérifiez l'installation du pilote SGX.
ls -l /dev/{sgx_enclave,sgx_provision}Un résultat similaire à celui ci-dessous confirme l'installation du pilote SGX.

Image Ubuntu 22.04 (UEFI)
-
Installez CPUID.
sudo apt-get update && sudo apt-get install -y --no-install-recommends cpuid -
Vérifiez si SGX est activé.
cpuid -1 -l 0x7 |grep SGXUn résultat similaire à celui ci-dessous indique que SGX est activé.
RemarqueL'exécution des programmes SGX nécessite le pilote SGX une fois la fonctionnalité activée. Les images dédiées fournies par Alibaba Cloud intègrent ce pilote. Si vous n'utilisez pas une image dédiée, installez le pilote SGX manuellement.
-
Installez le pilote SGX :
-
Créez le script
install_sgx_dcap.sh:cat <<'EOF' > install_sgx_dcap.sh #!/bin/bash version_id=$(cat /etc/os-release|grep "VERSION_ID"|cut -d"=" -f2|tr -d "\"") version_codename=$(cat /etc/os-release|grep "VERSION_CODENAME"|cut -d"=" -f2) apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential dkms curl wget if [ ! -e /dev/sgx/enclave -a ! -e /dev/sgx_enclave ]; then dcap_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep dcap| sed -r 's/.*>(.*)<.*/\1/') dcap_files=$(curl -s https://download.01.org/intel-sgx/latest/dcap-latest/linux/SHA256SUM_dcap_${dcap_version}.cfg) echo "${dcap_files}" | grep "ubuntu${version_id}-server" |grep "sgx_linux_x64_driver" | awk '{print $2}' | xargs -I{} curl -O -J https://download.01.org/intel-sgx/latest/dcap-latest/linux/{} bash sgx_linux_x64_driver*.bin else echo "driver already installed" fi EOF -
Exécutez le script pour installer le pilote SGX :
sudo bash ./install_sgx_dcap.sh
-
-
Vérifiez l'installation du pilote SGX.
ls -l /dev/{sgx_enclave,sgx_provision}Un résultat similaire à celui ci-dessous confirme l'installation du pilote SGX.

Étape 2 : Configurer un environnement de calcul confidentiel SGX
Avant de développer des programmes SGX, installez le runtime et le SDK SGX sur une instance vSGX, puis configurez le service d'attestation distante. Pour une expérience utilisateur optimale, privilégiez les images dédiées d'Alibaba Cloud. Ces images intègrent le pilote SGX et fournissent le kit de développement TEE (Trusted Execution Environment), entièrement compatible avec le SDK Intel® SGX. Cette section détaille la configuration de l'environnement. Les exemples suivants utilisent une image Alibaba Cloud Linux 2 (UEFI), Alibaba Cloud Linux 3 (UEFI) ou Ubuntu 22.04 (UEFI). Si vous optez pour des distributions Linux telles que CentOS, installez le pilote SGX et le Platform SoftWare (PSW). Consultez le guide Intel® SGX SW Installation Guide for Linux pour plus de détails.
-
Installez les modules nécessaires à la configuration de l'environnement de calcul confidentiel SGX.
Image Alibaba Cloud Linux 2/3 (UEFI)
-
(Requis) Installez le runtime SGX d'Alibaba Cloud.
RemarqueLors de la création d'une instance vSGX via la console ECS, le runtime SGX d'Alibaba Cloud s'installe automatiquement. Vous pouvez ignorer cette étape et procéder directement à l'installation du SDK TEE d'Alibaba Cloud.
-
Importez le dépôt logiciel YUM (Yellowdog Updater Modified) dédié au calcul confidentiel d'Alibaba Cloud.
RemarqueRemplacez [Region-ID] dans les URL suivantes par l'ID de région de votre instance vSGX :
L'URL publique du dépôt suit ce format :
https://enclave-[Region-ID].oss-[Region-ID].aliyuncs.com/repo/alinux/enclave-expr.repo.L'URL interne du dépôt suit ce format :
https://enclave-[Region-ID].oss-[Region-ID]-internal.aliyuncs.com/repo/alinux/enclave-expr.repo.
Vous pouvez également créer et exécuter un script pour importer le dépôt YUM dédié au calcul confidentiel d'Alibaba Cloud.
-
Créez le script
install_sgx_repo.sh:cat <<'EOF' > install_sgx_repo.sh ID=$(grep -w '^ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"') VERSION_ID=$(grep -w '^VERSION_ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"') # Query the region of the instance. token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) # Enable the Alibaba Cloud experimental repository for the instance if an Alibaba Cloud Linux 2 (UEFI) image is used. if [ "$ID" = "alinux" -a "$VERSION_ID" = "2.1903" ]; then sudo rpmkeys --import http://mirrors.cloud.aliyuncs.com/epel/RPM-GPG-KEY-EPEL-7 sudo yum install -y alinux-release-experimentals fi yum install -y yum-utils && \ yum-config-manager --add-repo \ https://enclave-${region_id}.oss-${region_id}-internal.aliyuncs.com/repo/alinux/enclave-expr.repo EOF -
Importez le dépôt YUM dédié au calcul confidentiel d'Alibaba Cloud :
sudo bash ./install_sgx_repo.sh
-
Installez le runtime SGX d'Alibaba Cloud.
sudo yum install -y libsgx-ae-le libsgx-ae-pce libsgx-ae-qe3 libsgx-ae-qve \ libsgx-aesm-ecdsa-plugin libsgx-aesm-launch-plugin libsgx-aesm-pce-plugin \ libsgx-aesm-quote-ex-plugin libsgx-dcap-default-qpl libsgx-dcap-ql \ libsgx-dcap-quote-verify libsgx-enclave-common libsgx-launch libsgx-pce-logic \ libsgx-qe3-logic libsgx-quote-ex libsgx-ra-network libsgx-ra-uefi \ libsgx-uae-service libsgx-urts sgx-ra-service sgx-aesm-serviceRemarqueSGX Architectural Enclave Service Manager (AESM) gère des services tels que le démarrage des enclaves, la configuration des clés et l'attestation distante. Le chemin d'installation par défaut de SGX AESM est /opt/intel/sgx-aesm-service.
-
-
Installez le SDK TEE d'Alibaba Cloud.
sudo yum install -y sgxsdk
Le SDK TEE d'Alibaba Cloud est entièrement compatible avec le SDK Intel® SGX. Une fois installé, référez-vous au guide de référence pour développeurs Intel® SGX afin de concevoir vos programmes. Consultez la documentation Intel®SGX Developer Reference pour plus d'informations.
RemarqueLe chemin d'installation par défaut du SDK Intel® SGX au sein du SDK TEE d'Alibaba Cloud est /opt/alibaba/teesdk/intel/sgxsdk/.
Image Ubuntu 22.04 (UEFI)
-
Créez le script
install_sgx_sdk.sh:cat <<'EOF' > install_sgx_sdk.sh #!/bin/bash version_id=$(cat /etc/os-release|grep "VERSION_ID"|cut -d"=" -f2|tr -d "\"") version_codename=$(cat /etc/os-release|grep "VERSION_CODENAME"|cut -d"=" -f2) apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential dkms curl wget dcap_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep dcap| sed -r 's/.*>(.*)<.*/\1/') linux_version=$(curl -s https://download.01.org/intel-sgx/latest/version.xml |grep linux| sed -r 's/.*>(.*)<.*/\1/') dcap_files=$(curl -s https://download.01.org/intel-sgx/latest/dcap-latest/linux/SHA256SUM_dcap_${dcap_version}.cfg) echo "${dcap_files}" | grep "ubuntu${version_id}-server" | awk '{print $2}' | xargs -I{} curl -O -J https://download.01.org/intel-sgx/latest/dcap-latest/linux/{} # install sgx_sdk bash sgx_linux_x64_sdk*.bin --prefix /opt/intel source /opt/intel/sgxsdk/environment # install psw echo "deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu ${version_codename} main" | tee /etc/apt/sources.list.d/intelsgx.list wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | apt-key add - apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libsgx-launch libsgx-urts libsgx-epid libsgx-quote-ex libsgx-dcap-ql libsgx-dcap-ql-dev systemctl enable --now aesmd.service EOF -
Exécutez le script pour installer le SDK Intel® SGX et le PSW :
sudo bash ./install_sgx_sdk.sh
-
-
Configurez le service d'attestation distante SGX d'Alibaba Cloud.
Le service d'attestation distante SGX d'Alibaba Cloud est pleinement compatible avec le service d'attestation distante basé sur ECDSA (Elliptic Curve Digital Signature Algorithm) d'Intel® SGX ainsi qu'avec le SDK Intel® SGX. Les instances vSGX d'Alibaba Cloud permettent d'établir la confiance auprès des fournisseurs et producteurs distants via l'attestation distante. Pour en savoir plus, consultez la page Attestation & Provisioning Services.
Le service d'attestation distante SGX d'Alibaba Cloud fournit les éléments suivants pour le SDK SGX :
Certificats SGX : les certificats SGX.
Liste de révocation : liste des certificats SGX révoqués.
Informations sur la base de calcul de confiance : informations relatives à la racine de confiance.
RemarqueIntel Ice Lake prend uniquement en charge l'attestation distante basée sur Intel Software Guard Extensions Data Center Attestation Primitives (Intel SGX DCAP) et ne supporte pas celle basée sur Intel Enhanced Privacy ID (EPID). Adaptez vos applications avant d'utiliser la fonctionnalité d'attestation distante. Pour plus de détails, reportez-vous à la section Strengthen Enclave Trust with Attestation.
Le service d'attestation distante SGX d'Alibaba Cloud est déployé par région. Pour garantir une stabilité optimale, accédez au service situé dans la même région que votre instance vSGX. Après l'installation du SDK TEE d'Alibaba Cloud, le fichier de configuration par défaut /etc/sgx_default_qcnl.conf est généré automatiquement pour le service d'attestation distante. Adaptez ce fichier au service de la région où se trouve votre instance vSGX en suivant l'une des méthodes ci-dessous.
RemarqueLe tableau suivant répertorie les régions prenant en charge le service d'attestation distante SGX d'Alibaba Cloud.
Région prise en charge
ID de région
Chine (Qingdao)
cn-qingdao
Chine (Pékin)
cn-beijing
Chine (Zhangjiakou)
cn-zhangjiakou
Chine (Ulanqab)
cn-wulanchabu
Chine (Hangzhou)
cn-hangzhou
Chine (Shanghai)
cn-shanghai
Chine (Shenzhen)
cn-shenzhen
Chine (Heyuan)
cn-heyuan
Chine (Guangzhou)
cn-guangzhou
Chine (Chengdu)
cn-chengdu
Chine (Hong Kong)
cn-hongkong
Singapour
ap-southeast-1
Indonésie (Jakarta)
ap-southeast-5
-
(Méthode recommandée) Méthode 1 : Configurez automatiquement le fichier /etc/sgx_default_qcnl.conf.
Exécutez les commandes suivantes pour configurer automatiquement le fichier /etc/sgx_default_qcnl.conf. Pour plus d'informations, consultez la section Accéder aux métadonnées de l'instance.
# View the region of the instance. token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) # Specify the URL of Alibaba Cloud Provisioning Certificate Caching Service (PCCS) for the region in which the instance is deployed. PCCS_URL=https://sgx-dcap-server-vpc.${region_id}.aliyuncs.com/sgx/certification/v4/ sudo bash -c 'cat > /etc/sgx_default_qcnl.conf' << EOF # PCCS server address PCCS_URL=${PCCS_URL} # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE EOF -
Méthode 2 : Modifiez manuellement le fichier /etc/sgx_default_qcnl.conf.
-
Si l'instance vSGX dispose d'une adresse IP publique, remplacez la configuration du fichier /etc/sgx_default_qcnl.conf par le contenu suivant. Remplacez [Region-ID] par l'ID de région de l'instance vSGX.
# PCCS server address PCCS_URL=https://sgx-dcap-server.[Region-ID].aliyuncs.com/sgx/certification/v4/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE -
Si l'instance vSGX se trouve dans un VPC (Virtual Private Cloud) et ne possède que des adresses IP internes, remplacez la configuration du fichier /etc/sgx_default_qcnl.conf par le contenu suivant. Remplacez [Region-ID] par l'ID de région de l'instance vSGX.
# PCCS server address PCCS_URL=https://sgx-dcap-server-vpc.[Region-ID].aliyuncs.com/sgx/certification/v4/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE
-
Exemples de vérification de la fonctionnalité SGX
Cette section explique comment lancer un enclave pour valider le bon fonctionnement du SDK SGX installé. Un lancement réussi confirme que le SDK opère correctement. Les exemples ci-dessous utilisent le fichier de code d'exemple SampleEnclave.
Exemple 1 : Lancer un enclave
Image Alibaba Cloud Linux 2/3 (UEFI)
Le SDK TEE d'Alibaba Cloud fournit du code d'exemple SGX pour vérifier la fonctionnalité. Par défaut, ce code se trouve dans le répertoire /opt/alibaba/teesdk/intel/sgxsdk/SampleCode.
Installez un compilateur.
-
Configurez les variables d'environnement liées au SDK SGX.
if [ "$ID" = "alinux" -a "$VERSION_ID" = "2.1903" ]; then source /opt/rh/devtoolset-9/enable fi source /opt/alibaba/teesdk/intel/sgxsdk/environment -
Compilez le code d'exemple du fichier SampleEnclave.
-
Accédez au répertoire SampleEnclave :
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/SampleEnclave -
Compilez le code d'exemple de SampleEnclave :
sudo -E make
-
-
Exécutez le fichier exécutable compilé.
sudo ./appLe résultat suivant confirme le bon fonctionnement de SGX.

ID=$(grep -w '^ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
VERSION_ID=$(grep -w '^VERSION_ID' /etc/os-release | awk -F= '{print $2}' | tr -d '"')
if [ "$ID" = "alinux" ]; then
case "$VERSION_ID" in
"2.1903" )
sudo yum install -y devtoolset-9
;;
"3" )
sudo yum groupinstall -y "Development Tools"
;;
esac
fi
Image Ubuntu 22.04 (UEFI)
-
Mettez à jour la liste des paquets.
sudo apt update -
Installez le compilateur
build-essential.sudo apt install -y build-essential -
Compilez le code d'exemple du fichier SampleEnclave.
-
Accédez au répertoire SampleEnclave :
cd /opt/intel/sgxsdk/SampleCode/SampleEnclave/ -
Compilez le code d'exemple de SampleEnclave :
sudo make SGX_DEBUG=1
-
-
Exécutez le fichier exécutable compilé.
sudo ./appLe résultat suivant confirme le bon fonctionnement de SGX.

Exemple 2 : Utiliser le service d'attestation distante SGX
Le SDK TEE d'Alibaba Cloud propose du code d'exemple SGX pour vérifier la fonctionnalité. Par défaut, ce code se trouve dans le répertoire /opt/alibaba/teesdk/intel/sgxsdk/SampleCode. Cette section détaille l'utilisation du service d'attestation distante SGX. L'exemple suivant s'appuie sur une image Alibaba Cloud Linux 2 (UEFI) ou Alibaba Cloud Linux 3 (UEFI).
L'objectif est de générer un quote à l'aide du fichier QuoteGenerationSample, puis de le vérifier avec le fichier QuoteVerificationSample. Cet exemple implique deux parties : la partie défiée (programmes SGX exécutés sur l'instance vSGX) et la partie défieuse (entité souhaitant vérifier la confiance accordée aux programmes SGX). Ici, la partie défiée utilise le code d'exemple QuoteGenerationSample pour générer un quote, tandis que la partie défieuse utilise QuoteVerificationSample pour le valider.
-
Installez un compilateur.
-
Pour une image Alibaba Cloud Linux 2 (UEFI), installez devtoolset.
-
Installez devtoolset.
sudo yum install -y devtoolset-9 -
Configurez les variables d'environnement liées à devtoolset.
source /opt/rh/devtoolset-9/enable
-
-
Pour une image Alibaba Cloud Linux 3 (UEFI), installez Development Tools.
sudo yum groupinstall -y "Development Tools"
-
-
Configurez les variables d'environnement liées au SDK SGX.
source /opt/alibaba/teesdk/intel/sgxsdk/environment -
Installez le paquet de dépendances pour l'attestation distante SGX.
sudo yum install -y libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel libsgx-dcap-default-qpl-devel -
Compilez le code d'exemple du fichier QuoteGenerationSample utilisé par la partie défiée.
-
Accédez au répertoire QuoteGenerationSample.
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/QuoteGenerationSample -
Compilez le code d'exemple du fichier QuoteGenerationSample.
sudo -E make
-
-
Exécutez le fichier exécutable compilé pour générer un quote.
sudo ./appLe résultat suivant indique que la vérification du quote a réussi.

-
Compilez le code d'exemple du fichier QuoteVerificationSample utilisé par la partie défieuse.
-
Accédez au répertoire QuoteVerificationSample.
cd /opt/alibaba/teesdk/intel/sgxsdk/SampleCode/QuoteVerificationSample -
Compilez le code d'exemple du fichier QuoteVerificationSample.
sudo -E make
-
-
Signez l'enclave QuoteVerificationSample.
Pour publier une version officielle d'une enclave, vous devez fournir la clé de signature afin de signer l'enclave.
sudo sgx_sign sign -key Enclave/Enclave_private_sample.pem -enclave enclave.so -out enclave.signed.so -config Enclave/Enclave.config.xmlRemarqueSi le message d'erreur
Failed to open file "Enclave/Enclave_private_sample.pem"apparaît, exécutez la commande suivante pour resigner :sudo sgx_sign sign -key ../QuoteGenerationSample/Enclave/Enclave_private_sample.pem -enclave enclave.so -out enclave.signed.so -config Enclave/Enclave.config.xml -
Exécutez le fichier exécutable compilé pour vérifier le quote.
sudo ./appLe résultat suivant indique que la vérification du quote a réussi.

Mettre à jour le SDK SGX, le PSW et le logiciel DCAP
La pile logicielle Intel® SGX comprend le SDK SGX, le PSW SGX et les Primitives d'attestation du centre de données SGX (DCAP). Pour garantir une sécurité optimale, nous recommandons de mettre régulièrement à jour les versions logicielles. Cet exemple utilise une image Alibaba Cloud Linux 3 UEFI pour actualiser les packages SDK SGX, PSW SGX et DCAP SGX.
-
Mettez à jour le SDK SGX, le PSW SGX et le logiciel DCAP SGX.
sudo rpm -qa --qf "%{NAME}\n"|grep -E "sgxsdk|libsgx-|libtdx-|^sgx-|^tdx-"|sudo xargs bash -c '</dev/tty yum update "$@"' _ -
Consultez les versions du SDK SGX, du PSW SGX et du logiciel DCAP SGX.
-
Vérifiez les versions du SDK SGX et du PSW SGX.
sudo rpm -qa|grep -E "sgxsdk|sgx-aesm-service|libsgx-(ae-epid|ae-le|ae-pce|aesm|enclave|epid|headers|launch|quote-ex|uae-service|urts)"Le résultat suivant s'affiche.

-
Vérifiez la version du logiciel DCAP SGX.
sudo rpm -qa|grep -E "sgx-(dcap-pccs|pck|ra-service)|libsgx-(ae-id-enclave|ae-qe3|ae-qve|ae-tdqe|dcap|pce-logic|qe3-logic|ra-|tdx-)|libtdx-|^tdx-"Le résultat suivant s'affiche.

-
Problèmes connus
Des fuites de mémoire peuvent survenir avec le pilote SGX fourni avec Alibaba Cloud Linux 2 dont la version du noyau est 4.19.91-23.al7.x86_64. Ce problème est résolu dans la dernière version. Nous vous conseillons de mettre à jour le noyau vers la version la plus récente. Si vous souhaitez conserver cette version antérieure du noyau, installez les correctifs suivants pour éviter ce problème :
sudo yum install -y alinux-release-experimentals && \
sudo yum install -y kernel-hotfix-5577959-23.al7.x86_64