Azure Attestation Clientbibliothek für Java – Version 1.1.18
Microsoft Azure Attestation (Vorschau) ist eine einheitliche Lösung zur Remoteüberprüfung der Vertrauenswürdigkeit einer Plattform und der Integrität der darin ausgeführten Binärdateien. Der Dienst unterstützt den Nachweis der TPM-basierten (Trusted Platform Module) Plattformen sowie den Nachweis des Zustands vertrauenswürdiger Ausführungsumgebungen (Trusted Execution Environments, TEEs), wozu beispielsweise SGX-Enclaves (Intel® Software Guard Extensions) und VBS-Enclaves (virtualisierungsbasierte Sicherheit) zählen.
Der Nachweis ist ein Prozess, um zu veranschaulichen, dass Softwarebinärdateien auf einer vertrauenswürdigen Plattform ordnungsgemäß instanziiert wurden. Vertrauende Remoteseiten können dann sicher sein, dass nur die vorgesehene Software auf vertrauenswürdiger Hardware ausgeführt wird. Azure Attestation ist ein einheitlicher Service für die Kunden und ein Framework für den Nachweis.
Azure Attestation ermöglicht innovative Sicherheitsparadigmen wie Confidential Computing unter Azure und Intelligent Edge-Schutz. Kunden haben die Möglichkeit angefordert, den Standort eines Computers, die Stellung eines virtuellen Computers (VM) auf diesem Computer und die Umgebung, in der die Enclaves auf diesem virtuellen Computer ausgeführt werden, einzeln zu überprüfen. Azure Attestation ermöglicht diese und viele zusätzliche Kundenanforderungen.
Azure Attestation erhält Beweise von Compute-Entitäten, wandelt sie in einen Satz von Ansprüchen um, überprüft sie anhand konfigurierbarer Richtlinien und erzeugt kryptografische Nachweise für anspruchsbasierte Anwendungen (z. B. vertrauende Seiten und Überwachungsbehörden).
HINWEIS: Dies ist ein vorläufiges SDK für den Microsoft Azure Attestation-Dienst. Es bietet alle wichtigen Funktionen für den Zugriff auf den Azure Attestation-Dienst, erfordert jedoch eine erhebliche Menge an Infrastruktur, um ordnungsgemäß zu funktionieren.
Erste Schritte
Einschließen des Pakets
BOM-Datei einfügen
Fügen Sie das azure-sdk-bom in Ihr Projekt ein, um die Abhängigkeit von der General Availability (GA)-Version der Bibliothek zu übernehmen. Ersetzen Sie im folgenden Codeausschnitt den Platzhalter {bom_version_to_target} durch die Versionsnummer. Weitere Informationen zur Stückliste finden Sie in der AZURE SDK-BOM-INFODATEI.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-sdk-bom</artifactId>
<version>{bom_version_to_target}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
und fügen Sie dann die direkte Abhängigkeit in den Abschnitt abhängigkeiten ohne das Versionstag ein, wie unten gezeigt.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-attestation</artifactId>
</dependency>
</dependencies>
Direkte Abhängigkeiten einfügen
Wenn Sie abhängigkeiten von einer bestimmten Version der Bibliothek übernehmen möchten, die in der Stückliste nicht vorhanden ist, fügen Sie die direkte Abhängigkeit wie folgt zu Ihrem Projekt hinzu.
<!-- Install the Azure Attestation SDK -->
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-attestation</artifactId>
<version>1.1.18</version>
</dependency>
Voraussetzungen
- Java Development Kit (JDK), Version 8 oder höher.
- Azure-Abonnement
- Eine vorhandene Azure Attestation instance. Wenn Sie einen Nachweis instance erstellen müssen, können Sie den Azure-Cloud Shell verwenden, um mit diesem Azure CLI-Befehl einen Nachweis zu erstellen. Ersetzen Sie
<your-resource-group-name>
und<your-instance-name>
durch Ihre eigenen eindeutigen Namen:
az attestation create --resource-group <your-resource-group-name> --name <your-instance-name>
Authentifizieren des Clients
Um mit dem Azure Attestation-Dienst zu interagieren, muss Ihr Client dem Dienst ein Azure Active Directory-Bearertoken vorlegen.
Die einfachste Möglichkeit zum Bereitstellen eines Bearertokens besteht darin, die DefaultAzureCredential
Authentifizierungsmethode zu verwenden, indem Sie anmeldeinformationen für geheime Clientschlüssel angeben, die in diesem Abschnitt mit den ersten Schritten verwendet werden. Sie finden jedoch weitere Möglichkeiten zur Authentifizierung mit azure-identity.
Wichtige Begriffe
Der Microsoft Azure Attestation-Dienst wird in zwei separaten Modi ausgeführt: "Isoliert" und "AAD". Wenn der Dienst im Modus "Isoliert" ausgeführt wird, muss der Kunde zusätzliche Informationen über seine Authentifizierungsanmeldeinformationen hinaus bereitstellen, um zu überprüfen, ob er autorisiert ist, den Status eines Nachweises instance zu ändern.
Es gibt vier Hauptclienttypen, die in diesem Vorschau-SDK bereitgestellt werden:
- SGX- und TPM-Enclave-Nachweis.
- MAA-Nachweistoken: Signaturzertifikatermittlung und -validierung.
- Verwaltung von Nachweisrichtlinien.
- Zertifikatverwaltung für Nachweisrichtlinienverwaltung (ja, Richtlinienverwaltung).
Jede Nachweis-instance wird in einem von zwei separaten Betriebsmodi ausgeführt:
- AAD-Modus.
- Isolierter Modus
Im "AAD"-Modus wird der Zugriff auf den Dienst ausschließlich von Azure Role Based Access Control gesteuert. Im Modus "Isoliert" wird erwartet, dass der Client zusätzliche Beweise bereitstellt, um zu beweisen, dass der Client zum Ändern des Diensts autorisiert ist.
Schließlich unterstützt jede Region, in der der Microsoft Azure Attestation-Dienst verfügbar ist, eine "freigegebene" instance, die verwendet werden kann, um SGX-Enklaven zu bestätigen, die nur mit der Azure-Baseline überprüft werden müssen (es gibt keine Richtlinien, die auf die freigegebene instance angewendet werden). Der TPM-Nachweis ist im freigegebenen instance nicht verfügbar. Die freigegebene instance erfordert zwar die AAD-Authentifizierung, verfügt jedoch über keine RBAC-Richtlinien. Jeder Kunde mit einem gültigen AAD-Bearertoken kann dies mithilfe des freigegebenen instance nachweisen.
Nachweis
SGX- oder TPM-Nachweis ist der Prozess der Überprüfung von Beweisen, die aus einer vertrauenswürdigen Ausführungsumgebung gesammelt wurden, um sicherzustellen, dass sie sowohl die Azure-Baseline für diese Umgebung als auch kundendefinierte Richtlinien erfüllt, die auf diese Umgebung angewendet werden.
Ermittlung und Überprüfung des Zertifikats für die Signatur des Nachweistokens
Die meisten Antworten des MAA-Diensts werden in Form eines JSON-Webtokens ausgedrückt. Dieses Token wird von einem Signaturzertifikat signiert, das vom MAA-Dienst für die angegebene instance ausgestellt wurde. Wenn der MAA-Dienst instance in einer Region ausgeführt wird, in der der Dienst in einer SGX-Enclave ausgeführt wird, kann das vom Server ausgestellte Zertifikat mithilfe der oe_verify_attestation_certificate()-API überprüft werden.
Richtlinienverwaltung
Für jeden Nachweisdienst instance wird eine Richtlinie angewendet, die zusätzliche Kriterien definiert, die der Kunde definiert hat.
Weitere Informationen zu Nachweisrichtlinien finden Sie unter Nachweisrichtlinie.
Zertifikatverwaltung der Richtlinienverwaltung
Wenn ein Nachweis instance im Modus "Isoliert" ausgeführt wird, hat der Kunde, der die instance erstellt hat, zum Zeitpunkt der Erstellung des instance ein Richtlinienverwaltungszertifikat bereitgestellt. Für alle Richtlinienänderungsvorgänge muss der Kunde die Richtliniendaten mit einem der vorhandenen Richtlinienverwaltungszertifikate signieren. Mit den Zertifikatverwaltungs-APIs für die Richtlinienverwaltung können Clients die Richtlinienverwaltungszertifikate hinzufügen, entfernen oder aufzählen.
Beispiele
- Instanziieren eines synchronen Nachweisclients
- Abrufen von Tokenvalidierungszertifikaten
- Nachweis einer SGX-Enklave
- Instanziieren eines synchronen Administratorclients
- Abrufen der Nachweisrichtlinie
- Festlegen einer Richtlinie für nicht signierte Nachweise
- Festlegen einer Richtlinie für signierte Nachweise
- Auflisten von Richtlinienverwaltungszertifikaten
- Hinzufügen eines Richtlinienverwaltungszertifikats
- Zertifikat für die Nachweissignatur entfernen
Instanziieren eines synchronen Nachweisclients
Die AttestationClientBuilder
-Klasse wird verwendet, um Instanzen des Nachweisclients zu erstellen:
AttestationClientBuilder attestationBuilder = new AttestationClientBuilder();
// Note that the "attest" calls do not require authentication.
AttestationClient client = attestationBuilder
.endpoint(endpoint)
.buildClient();
Abrufen von Tokenvalidierungszertifikaten
Verwenden Sie listAttestationSigners
, um den Satz von Zertifikaten abzurufen, mit dem das vom Nachweisdienst zurückgegebene Token überprüft werden kann.
Normalerweise sind diese Informationen nicht erforderlich, da das Nachweis-SDK die Validierung im Rahmen der Interaktion mit dem Nachweisdienst durchführt. Die APIs werden jedoch zur Vollständigkeit und zur Erleichterung der unabhängigen Überprüfung der Nachweisergebnisse des Kunden bereitgestellt.
AttestationSignerCollection certs = client.listAttestationSigners();
certs.getAttestationSigners().forEach(cert -> {
System.out.println("Found certificate.");
if (cert.getKeyId() != null) {
System.out.println(" Certificate Key ID: " + cert.getKeyId());
} else {
System.out.println(" Signer does not have a Key ID");
}
cert.getCertificates().forEach(chainElement -> {
System.out.println(" Cert Subject: " + chainElement.getSubjectDN().getName());
System.out.println(" Cert Issuer: " + chainElement.getIssuerDN().getName());
});
});
Nachweis einer SGX-Enclave
Verwenden Sie die attestSgxEnclave
-Methode, um eine SGX-Enklave zu bestätigen.
BinaryData decodedRuntimeData = BinaryData.fromBytes(SampleCollateral.getRunTimeData());
BinaryData sgxQuote = BinaryData.fromBytes(SampleCollateral.getSgxEnclaveQuote());
// Attest evidence from an OpenEnclave enclave specifying runtime data which should be
// interpreted as binary data.
AttestationResult result = client.attestSgxEnclave(new AttestationOptions(sgxQuote)
.setRunTimeData(
new AttestationData(decodedRuntimeData, AttestationDataInterpretation.BINARY)));
String issuer = result.getIssuer();
System.out.println("Attest Sgx Enclave completed. Issuer: " + issuer);
System.out.printf("Runtime Data Length: %d\n", result.getEnclaveHeldData().getLength());
Instanziieren eines synchronen Administratorclients
Alle administrativen Clients werden authentifiziert.
AttestationAdministrationClientBuilder attestationBuilder = new AttestationAdministrationClientBuilder();
// Note that the "policy" calls require authentication.
AttestationAdministrationClient client = attestationBuilder
.endpoint(endpoint)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Abrufen der Nachweisrichtlinie
Verwenden Sie die getAttestationPolicy
API, um die aktuelle Nachweisrichtlinie für eine bestimmte TEE abzurufen.
String currentPolicy = client.getAttestationPolicy(AttestationType.OPEN_ENCLAVE);
System.out.printf("Current policy for OpenEnclave is: %s\n", currentPolicy);
Festlegen einer Richtlinie für nicht signierte Nachweise
Wenn sich ein Nachweis instance im AAD-Modus befindet, kann der Aufrufer eine Komfortmethode verwenden, um eine Nachweisrichtlinie ohne Vorzeichen auf dem instance festzulegen.
// Set the listed policy on an attestation instance. Please note that this particular policy will deny all
// attestation requests and should not be used in production.
PolicyResult policyResult = client.setAttestationPolicy(AttestationType.OPEN_ENCLAVE,
"version=1.0; authorizationrules{=> deny();}; issuancerules{};");
System.out.printf("Policy set for OpenEnclave result: %s\n", policyResult.getPolicyResolution());
Festlegen einer Richtlinie für signierte Nachweise
Bei Nachweisinstanzen im isolierten Modus muss die Set- oder Reset-Richtlinienanforderung mit dem Schlüssel signiert werden, der den Zertifikaten für die Nachweissignatur zugeordnet ist, die für den Nachweis instance konfiguriert sind.
// Set the listed policy on an attestation instance using a signed policy token.
PolicyResult policyResult = client.setAttestationPolicy(AttestationType.SGX_ENCLAVE,
new AttestationPolicySetOptions()
.setAttestationPolicy("version=1.0; authorizationrules{=> permit();}; issuancerules{};")
.setAttestationSigner(new AttestationSigningKey(certificate, privateKey)));
System.out.printf("Policy set for Sgx result: %s\n", policyResult.getPolicyResolution());
Auflisten von Richtlinienverwaltungszertifikaten
Wenn sich ein Nachweis instance im Isolated
Modus befindet, benötigen die Richtlinien-APIs einen zusätzlichen Autorisierungsnachweis. Dieser Nachweis wird über den Parameter bereitgestellt, der AttestationSigningKey
an die Set- und Zurücksetzungsrichtlinien-APIs übergeben wird.
Jeder Isolated
Modus instance verfügt über eine Gruppe von Zertifikaten, die bestimmen, ob ein Aufrufer über die Berechtigung zum Festlegen einer Nachweisrichtlinie verfügt. Wenn eine Nachweisrichtlinie festgelegt wird, stellt der Client dem Dienst ein signiertes "Token" vor, das vom Schlüssel in AttestationSigningKey
signiert ist. Das signierte Token, einschließlich des Zertifikats in, AttestationSigningKey
wird an den Nachweisdienst gesendet, der überprüft, ob das Token mit dem privaten Schlüssel signiert wurde, der dem öffentlichen Schlüssel im Token entspricht. Der Vorgang zum Festlegen oder Zurücksetzen der Richtlinie ist nur erfolgreich, wenn das Zertifikat im Token eines der Richtlinienverwaltungstoken ist. Durch diese Interaktion wird sichergestellt, dass der Client im Besitz des privaten Schlüssels ist, der einem der Richtlinienverwaltungszertifikate zugeordnet ist und somit zum Ausführen des Vorgangs autorisiert ist.
AttestationSignerCollection signers = client.listPolicyManagementCertificates();
System.out.printf("Instance %s contains %d signers.\n", endpoint, signers.getAttestationSigners().size());
for (AttestationSigner signer : signers.getAttestationSigners()) {
System.out.printf("Certificate Subject: %s", signer.getCertificates().get(0).getSubjectDN().toString());
}
Hinzufügen eines Richtlinienverwaltungszertifikats
Fügt dem Satz der Richtlinienverwaltungszertifikate ein neues Zertifikat hinzu. Die Anforderung zum Hinzufügen des Richtlinienverwaltungszertifikats muss mit dem privaten Schlüssel signiert werden, der einem der vorhandenen Richtlinienverwaltungszertifikate zugeordnet ist (dadurch wird sichergestellt, dass der Aufrufer autorisiert ist, den Satz von Richtlinienzertifikaten zu aktualisieren).
Hinweis: Zweimaliges Hinzufügen desselben Zertifikats wird nicht als Fehler betrachtet. Wenn das Zertifikat bereits vorhanden ist, wird die Ergänzung ignoriert (dieses möglicherweise überraschende Verhalten ist vorhanden, da Wiederholungen dazu führen können, dass die Ergänzung mehrmals ausgeführt wird).
System.out.printf("Adding new certificate %s\n", certificateToAdd.getSubjectDN().toString());
PolicyCertificatesModificationResult modificationResult = client.addPolicyManagementCertificate(
new PolicyManagementCertificateOptions(certificateToAdd,
new AttestationSigningKey(isolatedCertificate, isolatedKey)));
System.out.printf("Updated policy certificate, certificate add result: %s\n",
modificationResult.getCertificateResolution());
System.out.printf("Added certificate thumbprint: %s\n", modificationResult.getCertificateThumbprint());
Zertifikat für die Nachweissignatur entfernen
Entfernt ein Zertifikat aus dem Satz von Richtlinienverwaltungszertifikaten. Die Anforderung zum Entfernen des Richtlinienverwaltungszertifikats muss mit dem privaten Schlüssel signiert werden, der einem der vorhandenen Richtlinienverwaltungszertifikate zugeordnet ist (dadurch wird sichergestellt, dass der Aufrufer autorisiert ist, den Satz der Richtlinienzertifikate zu aktualisieren).
Hinweis: Das Entfernen eines nicht vorhandenen Zertifikats wird nicht als Fehler betrachtet. Wenn das Zertifikat nicht vorhanden ist, wird die Entfernung ignoriert (dieses möglicherweise überraschende Verhalten ist vorhanden, da Wiederholungen dazu führen können, dass die Entfernung mehrmals ausgeführt wird).
System.out.printf("Removing existing certificate %s\n", certificateToRemove.getSubjectDN().toString());
PolicyCertificatesModificationResult modificationResult = client.deletePolicyManagementCertificate(
new PolicyManagementCertificateOptions(certificateToRemove,
new AttestationSigningKey(isolatedCertificate, isolatedKey)));
System.out.printf("Updated policy certificate, certificate remove result: %s\n",
modificationResult.getCertificateResolution());
System.out.printf("Removed certificate thumbprint: %s\n", modificationResult.getCertificateThumbprint());
Problembehandlung
Informationen zur Problembehandlung für den MAA-Dienst finden Sie hier.
Nächste Schritte
Weitere Informationen zum Microsoft Azure Attestation-Dienst finden Sie auf unserer Dokumentationsseite.
Mitwirken
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Ausführliche Informationen finden Sie unter https://cla.microsoft.com.
Wenn Sie einen Pull Request (PR) übermitteln, überprüft ein CLA-Bot automatisch, ob Sie eine Lizenzvereinbarung bereitstellen und den PR entsprechend ergänzen müssen (z.B. mit einer Bezeichnung oder einem Kommentar). Führen Sie einfach die Anweisungen des Bots aus. Sie müssen dies nur einmal für alle Repositorys ausführen, die unsere CLA verwenden.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den FAQ zum Verhaltenskodex, oder wenden Sie sich mit weiteren Fragen oder Kommentaren an opencode@microsoft.com.