Megosztás a következőn keresztül:


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:

Diagram of guest attestation scenario for a confidential VM.

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.

Diagram of an attestation request being made in a separate workload.

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.

Diagram of an attestation request being made from within a workload inside a confidential VM.

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ó.

Diagram of an attestation request being made in a relying party scenario.

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.

Diagram of the relying party VM with a secrets manager service.

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