Mi a bizalmas virtuális gépek vendégigazolása?
A vendégigazolás segít meggyőződni arról, hogy a bizalmas virtuálisgép-környezetet egy valódi, hardveresen támogatott megbízható végrehajtási környezet (T Enterprise kiadás) védi az elkülönítéshez és integritáshoz engedélyezett biztonsági funkciókkal.
A vendégigazolást a következő célra használhatja:
- Győződjön meg arról, hogy a bizalmas virtuális gép a várt hardverplatformon fut
- Ellenőrizze, hogy a bizalmas virtuális gép biztonságos rendszerindítása engedélyezve van-e. Ez a beállítás védi a virtuális gép alsó rétegeit (belső vezérlőprogram, rendszertöltő, kernel) a kártevőktől (rootkits, bootkits).
- Bizonyíték lekérése egy függő entitás számára, hogy a bizalmas virtuális gép bizalmas hardveren fut
Megjegyzés:
Az Intel TDX által támogatott DCesv5 és ECesv5 virtuális gépek vendégigazolásának elvégzéséhez itt talál egy útmutatót. Az Intel megbízhatósági szolgáltató használatához regisztrálni kell az Intelt.
Forgatókönyvek
A vendégigazolás főbb összetevői és szolgáltatásai a következők:
- A számítási feladat
- A vendégigazolási kódtár
- Hardver (jelentéskészítéshez). Például AMD-Standard kiadás VSNP.
- A Microsoft Azure-igazolási szolgáltatás
- JSON webes jogkivonat válasza
A tipikus üzemeltetési forgatókönyvek magukban foglalják az ügyfélkódtárat az igazolási kérelmek benyújtásához az alábbiak szerint.
Forgatókönyv: kérés külön számítási feladatban
Ebben a példában az igazolási kérések külön számítási feladatban lesznek végrehajtva. A kérések meghatározzák, hogy a bizalmas virtuális gép a megfelelő hardverplatformon fut-e a számítási feladat elindítása előtt.
A számítási feladatnak (a diagram platform-ellenőrző ügyfélének ) integrálnia kell az igazolási kódtárat, és a bizalmas virtuális gépen kell futtatnia az igazolást. Miután a program kérést intéz az igazolási kódtárhoz, a számítási feladat elemzi a választ annak megállapításához, hogy a virtuális gép a megfelelő hardverplatformon és/vagy biztonságos rendszerindítási beállításon fut-e a bizalmas számítási feladat elindítása előtt.
Ez a forgatókönyv az alábbi forgatókönyvhöz hasonló. A fő különbség az, hogy az egyes forgatókönyvek hogyan érik el ugyanazt a célt a kérés helyétől függően.
Forgatókönyv: kérés a számítási feladaton belülről
Ebben a példaforgatókönyvben az igazolási kérelmek a program elején a számítási feladaton belülre kerülnek. A kérések ellenőrzik, hogy a bizalmas virtuális gép a megfelelő hardverplatformon fut-e a számítási feladat elindítása előtt.
Ez a forgatókönyv hasonló az előző forgatókönyvhöz. A fő különbség az, hogy az egyes forgatókönyvek hogyan érik el ugyanazt a célt a kérés helyétől függően.
Az ügyfél számítási feladatának integrálnia kell az igazolási kódtárat, és a bizalmas virtuális gépen kell futnia. Miután az ügyfél számítási feladatai kérést intéznek az igazolási kódtárhoz, az ügyfél számítási feladatai elemzik a választ annak megállapításához, hogy a virtuális gép a megfelelő hardverplatformon és/vagy biztonságos rendszerindítási beállításon fut-e a bizalmas számítási feladat teljes beállítása előtt.
Forgatókönyv: függő entitás kézfogása
Ebben a példában a bizalmas virtuális gépnek bizonyítania kell, hogy egy bizalmas platformon fut, mielőtt egy függő entitás bevonul. A bizalmas virtuális gép egy igazolási jogkivonatot mutat be a függő entitásnak az előjegyzés elindításához.
Néhány példa az előjegyzésekre:
- A bizalmas virtuális gép titkos kulcsokat szeretne egy titkos kezelési szolgáltatástól.
- Az ügyfél meg szeretné győződni arról, hogy a bizalmas virtuális gép egy bizalmas platformon fut, mielőtt személyes adatokat fed fel a bizalmas virtuális gép számára feldolgozás céljából.
Az alábbi ábrán a bizalmas virtuális gép és a függő entitás közötti kézfogás látható.
Az alábbi szekvenciadiagram további magyarázatot ad a függő entitások forgatókönyvére. Az érintett rendszerek közötti kérés/válasz a vendégigazolási kódtár API-jait használja. A bizalmas virtuális gép a titkos kódok kezelőjével együttműködve indítja el magát a kapott titkos kódok használatával.
APIs
A Microsoft API-kkal biztosítja a vendégigazolási kódtárat az igazolások végrehajtásához, valamint az adatok titkosításához és visszafejtéséhez. A memória visszanyeréséhez egy API is rendelkezésre áll.
Ezeket az API-kat a korábban ismertetett különböző forgatókönyvekhez használhatja.
Attest API
Az Attest API bemenetként veszi az ClientParameters
objektumot, és visszafejtett igazolási jogkivonatot ad vissza. Például:
AttestationResult Attest([in] ClientParameters client_params,
[out] buffer jwt_token);
Paraméter | Information |
---|---|
ClientParameters (típus: objektum) |
A verziót (típus: uint32_t ), igazolási bérlői URI-t (típus: aláíratlan karakter) és ügyfél hasznos adatait (típus: aláíratlan karakter) tartalmazó objektum. Az ügyfél hasznos adatai nulla vagy több kulcs-érték párok a válasz hasznos adataiban visszaadott ügyfél- vagy ügyfél-metaadatokhoz. A kulcs-érték pároknak JSON-sztringformátumban "{\"key1\":\"value1\",\"key2\":\"value2\"}" kell lenniük. Az igazolási frissesség kulcs értéke például a következőképpen {\”Nonce\”:\”011510062022\”} nézhet ki. |
buffer |
Az igazolási adatokat tartalmazó JSON webes jogkivonat . |
Az Attest API egy AttestationResult
(típus: struktúra) értéket ad vissza.
API titkosítása
A Titkosítási API adattitkosítást és JSON webes jogkivonatot vesz fel bemenetként. Az API a JSON webes jogkivonatban található nyilvános rövid élettartamú kulccsal titkosítja az adatokat. Például:
AttestationResult Encrypt(
[enum] encryption_type,
[in] const unsigned char* jwt_token,
[in] const unsigned char* data,
[in] uint32_t data_size,
[out] unsigned char** encrypted_data,
[out] uint32_t* encrypted_data_size,
[out] unsigned char** encryption_metadata,
[out] uint32_t encryption_metadata_size);
Paraméter | Magyarázat |
---|---|
encryption_type |
Nincs. |
const unsigned char* jwt_token |
Az igazolási adatokat tartalmazó JSON webes jogkivonat . |
const unsigned char* data |
Titkosítandó adatok |
uint32_t data_size |
A titkosítandó adatok mérete. |
unsigned char** encrypted_data |
Titkosított adatok. |
uint32_t* encrypted_data_size |
A titkosított adatok mérete. |
unsigned char** encryption_metadata |
Titkosítási metaadatok. |
uint32_t encryption_metadata_size |
A titkosítási metaadatok mérete. |
A Encrypt API egy AttestationResult
(típus: struktúra) értéket ad vissza.
API visszafejtése
A Decrypt API bemenetként kezeli a titkosított adatokat, és visszafejti az adatokat a megbízható platformmodulhoz (TPM) lezárt titkos kulcs használatával. Például:
AttestationResult Decrypt([enum] encryption_type,
[in] const unsigned char* encrypted_data,
[in] uint32_t encrypted_data_size,
[in] const unsigned char* encryption_metadata,
[in] unit32_t encryption_metadata_size,
[out] unsigned char** decrypted_data,
[out] unit32_t decrypted_data_size);
Paraméter | Magyarázat |
---|---|
encryption_type |
Nincs. |
const unsigned char* encrypted_data |
Visszafejtendő adatok. |
uint32_t encrypted_data_size |
A visszafejtendő adatok mérete. |
const unsigned char* encryption_metadata |
Titkosítási metaadatok. |
unit32_t encryption_metadata_size |
A titkosítási metaadatok mérete. |
unsigned char** decrypted_data |
Visszafejtett adatok. |
unit32_t decrypted_data_size |
A visszafejtött adatok mérete. |
A Visszafejtési API egy AttestationResult
(típus: struktúra) értéket ad vissza.
Ingyenes API
Az ingyenes API visszanyeri az adatok által tárolt memóriát. Például:
Free([in] buffer data);
Paraméter | Magyarázat |
---|---|
data |
Az adatok által tárolt memória visszaszerzése. |
Az ingyenes API nem ad vissza semmit.
Hibakódok
Az API-k a következő hibakódokat adhatják vissza:
Error code | Leírás |
---|---|
1 | Hiba a hiba inicializálása során. |
2 | Hiba a válasz elemzésekor. |
3 | Az Azure-erőforrások jogkivonatának felügyelt identitásai nem találhatók. |
4 | A kérés túllépte az újrapróbálkozásokat. |
5 | A kérés nem sikerült. |
6 | Az igazolás sikertelen volt. |
7 | A kérés küldése sikertelen volt. |
8 | Érvénytelen bemeneti paraméter. |
9 | Az igazolási paraméterek ellenőrzése nem sikerült. |
10 | A memóriafoglalás nem sikerült. |
11 | Nem sikerült lekérni az operációs rendszer (OS) adatait. |
12 | Belső TPM-hiba. |
13 | A TPM-művelet nem sikerült. |
14 | A JSON webes jogkivonat visszafejtése nem sikerült. |
15 | JSON webes jogkivonat visszafejtési TPM-hibája. |
16 | Érvénytelen JSON-válasz. |
17 | Üres verziójú chip-ellenőrzőkulcs (VCEK) tanúsítvány. |
18 | Üres válasz. |
19 | Üres kérelemtörzs. |
20 | Jelentéselemzési hiba. |
21 | Jelentés üres. |
22 | Hiba történt a JSON webes jogkivonat adatainak kinyerése során. |
23 | Hiba történt a JSON webes jogkivonat RSA nyilvános kulcssá alakításakor. |
24 | EVP_PKEY titkosítás inicializálása nem sikerült. |
25 | EVP_PKEY titkosítás sikertelen volt. |
26 | Adatvisszafejtési TPM-hiba. |
27 | Hiba történt a DNS-adatok elemzésekor. |
JSON webes jogkivonat
A JSON webes jogkivonatának különböző részeit kinyerheti a korábban ismertetett különböző API-forgatókönyvekhez . A vendégigazolási funkció fontos mezői a következők:
Jogcím | Attribútum | Példaérték |
---|---|---|
- | x-ms-azurevm-vmid |
2DEDC52A-6832-46CE-9910-E8C9980BF5A7 |
AMD Standard kiadás V-SNP hardver | x-ms-isolation-tee |
sevsnpvm |
AMD Standard kiadás V-SNP hardver | x-ms-compliance-status (alatt x-ms-isolation-tee ) |
azure-compliant-cvm |
Biztonságos rendszerindítás | secure-boot (alatt x-ms-runtime >vm-configuration ) |
true |
Virtuális TPM | tpm-enabled (alatt x-ms-runtime >vm-configuration ) |
true |
Virtuális TPM | kid (alatt x-ms-runtime >keys ) |
TpmEphemeralEncryptionKey |
{
"exp": 1653021894,
"iat": 1652993094,
"iss": "https://sharedeus.eus.test.attest.azure.net",
"jti": "<value>",
"nbf": 1652993094,
"secureboot": true,
"x-ms-attestation-type": "azurevm",
"x-ms-azurevm-attestation-protocol-ver": "2.0",
"x-ms-azurevm-attested-pcrs": [
0,
1,
2,
3,
4,
5,
6,
7,
11,
12,
13
],
"x-ms-azurevm-bootdebug-enabled": false,
"x-ms-azurevm-dbvalidated": true,
"x-ms-azurevm-dbxvalidated": true,
"x-ms-azurevm-debuggersdisabled": true,
"x-ms-azurevm-default-securebootkeysvalidated": true,
"x-ms-azurevm-elam-enabled": true,
"x-ms-azurevm-flightsigning-enabled": false,
"x-ms-azurevm-hvci-policy": 0,
"x-ms-azurevm-hypervisordebug-enabled": false,
"x-ms-azurevm-is-windows": true,
"x-ms-azurevm-kerneldebug-enabled": false,
"x-ms-azurevm-osbuild": "NotApplicable",
"x-ms-azurevm-osdistro": "Microsoft",
"x-ms-azurevm-ostype": "Windows",
"x-ms-azurevm-osversion-major": 10,
"x-ms-azurevm-osversion-minor": 0,
"x-ms-azurevm-signingdisabled": true,
"x-ms-azurevm-testsigning-enabled": false,
"x-ms-azurevm-vmid": "<value>",
"x-ms-isolation-tee": {
"x-ms-attestation-type": "sevsnpvm",
"x-ms-compliance-status": "azure-compliant-cvm",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "HCLAkPub",
"kty": "RSA",
"n": "<value>"
}
],
"vm-configuration": {
"console-enabled": true,
"current-time": 1652993091,
"secure-boot": true,
"tpm-enabled": true,
"vmUniqueId": "<value>"
}
},
"x-ms-sevsnpvm-authorkeydigest": "<value>",
"x-ms-sevsnpvm-bootloader-svn": 2,
"x-ms-sevsnpvm-familyId": "<value>",
"x-ms-sevsnpvm-guestsvn": 1,
"x-ms-sevsnpvm-hostdata": "<value>",
"x-ms-sevsnpvm-idkeydigest": "<value>",
"x-ms-sevsnpvm-imageId": "<value>",
"x-ms-sevsnpvm-is-debuggable": false,
"x-ms-sevsnpvm-launchmeasurement": "<value>",
"x-ms-sevsnpvm-microcode-svn": 55,
"x-ms-sevsnpvm-migration-allowed": false,
"x-ms-sevsnpvm-reportdata": "<value>",
"x-ms-sevsnpvm-reportid": "<value>",
"x-ms-sevsnpvm-smt-allowed": true,
"x-ms-sevsnpvm-snpfw-svn": 2,
"x-ms-sevsnpvm-tee-svn": 0,
"x-ms-sevsnpvm-vmpl": 0
},
"x-ms-policy-hash": "<value>",
"x-ms-runtime": {
"keys": [
{
"e": "AQAB",
"key_ops": [
"encrypt"
],
"kid": "TpmEphemeralEncryptionKey",
"kty": "RSA",
"n": "<value>"
}
]
},
"x-ms-ver": "1.0"
}
További lépések
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: