Azure Key Vault-Verwaltungsbibliothek für Java
Azure Key Vault Managed HSM ist ein vollständig verwalteter, hochverfügbarer, standardkonformer Clouddienst mit nur einem Mandanten, mit dem Sie kryptografische Schlüssel für Ihre Cloudanwendungen mit FIPS 140-2 Level 3-validierten HSMs schützen können.
Die Clients der Azure Key Vault Administration-Bibliothek unterstützen administrative Aufgaben wie vollständige Sicherung/Wiederherstellung und rollenbasierte Zugriffssteuerung (Role-Based Access Control, RBAC) auf Schlüsselebene.
Quellcode | API-Referenzdokumentation | Produktdokumentation | Beispiele
Erste Schritte
Einschließen des Pakets
BOM-Datei einfügen
Fügen Sie die azure-sdk-bom
in Ihr Projekt ein, um von der Allgemeinverfügbarkeitsversion der Bibliothek abhängig zu sein. Ersetzen Sie im folgenden Codeausschnitt den Platzhalter {bom_version_to_target} durch die Versionsnummer. Weitere Informationen zur BOM finden Sie in der INFODATEI FÜR AZURE SDK-STÜCKLISTEN.
<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 wie unten dargestellt ohne das Versionstag in den Abschnitt abhängigkeiten ein.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-administration</artifactId>
</dependency>
</dependencies>
Direkte Abhängigkeiten einfügen
Wenn Sie eine Abhängigkeit von einer bestimmten Version der Bibliothek annehmen möchten, die nicht in der BoM vorhanden ist, fügen Sie die direkte Abhängigkeit wie folgt zu Ihrem Projekt hinzu.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-administration</artifactId>
<version>4.4.1</version>
</dependency>
Voraussetzungen
- Java Development Kit (JDK), Version 8 oder höher.
- Ein Azure-Abonnement.
- Ein vorhandenes azure Key Vault Managed HSM. Wenn Sie ein verwaltetes HSM erstellen müssen, können Sie dies mithilfe der Azure CLI tun, indem Sie die Schritte in diesem Dokument ausführen.
Authentifizieren des Clients
Um mit dem Azure Key Vault-Dienst zu interagieren, müssen Sie eine instance der KeyVaultAccessControlClient
-Klasse oder -KeyVaultBackupClient
Klasse sowie eine Tresor-URL (die im Azure-Portal möglicherweise als "DNS-Name" angezeigt wird) und ein Anmeldeinformationsobjekt erstellen. Die in diesem Dokument gezeigten Beispiele verwenden ein Anmeldeinformationsobjekt namens DefaultAzureCredential
, das für die meisten Szenarien geeignet ist, einschließlich lokaler Entwicklungs- und Produktionsumgebungen. Darüber hinaus wird die Verwendung einer verwalteten Identität für die Authentifizierung in Produktionsumgebungen empfohlen.
Weitere Informationen zu verschiedenen Authentifizierungsmethoden und den entsprechenden Anmeldeinformationstypen finden Sie in der Dokumentation zu Azure Identity.
Erstellen eines Zugriffssteuerungsclients
Nachdem Sie die für Sie am besten geeignete Authentifizierung eingerichtet und Ihre verwaltete hsm-url durch die URL für Ihren Schlüsseltresor ersetzt haben, können Sie erstellen KeyVaultAccessControlClient
:
KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
HINWEIS: Für die Verwendung eines asynchronen Clients verwenden Sie
KeyVaultAccessControlAsyncClient
anstelle vonKeyVaultAccessControlClient
und rufen SiebuildAsyncClient()
auf.
Erstellen eines Sicherungsclients
Nachdem Sie die für Sie am besten geeignete Authentifizierung eingerichtet und Ihre verwaltete hsm-url durch die URL für Ihren Schlüsseltresor ersetzt haben, können Sie erstellen KeyVaultBackupClient
:
KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
HINWEIS: Für die Verwendung eines asynchronen Clients verwenden Sie
KeyVaultBackupAsyncClient
anstelle vonKeyVaultBackupClient
und rufen SiebuildAsyncClient()
auf.
Erstellen eines Einstellungsclients
Nachdem Sie die für Sie am besten geeignete Authentifizierung eingerichtet und Ihre verwaltete hsm-url durch die URL für Ihren Schlüsseltresor ersetzt haben, können Sie erstellen KeyVaultSettingsClient
:
KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
HINWEIS: Für die Verwendung eines asynchronen Clients verwenden Sie
KeyVaultSettingsAsyncClient
anstelle vonKeyVaultSettingsClient
und rufen SiebuildAsyncClient()
auf.
Wichtige Begriffe
Key Vault Access Control Client
Der Key Vault Access Control-Client führt die Interaktionen mit dem Azure Key Vault-Dienst zum Abrufen, Festlegen, Löschen und Auflisten von Rollenzuweisungen sowie zum Auflisten von Rollendefinitionen aus. Asynchrone (KeyVaultAccessControlAsyncClient
) und synchrone (KeyVaultAccessControlClient
) Clients sind im SDK vorhanden, sodass ein Client basierend auf dem Anwendungsfall einer Anwendung ausgewählt werden kann. Nachdem Sie eine Rollenzuweisung initialisiert haben, können Sie mit den primären Ressourcentypen in Key Vault interagieren.
Rollendefinition
Eine Rollendefinition ist eine Sammlung von Berechtigungen. Es definiert die Vorgänge, die ausgeführt werden können, z. B. Lesen, Schreiben und Löschen. Es kann auch die Vorgänge definieren, die von zulässigen Vorgängen ausgeschlossen sind.
Rollendefinitionen können im Rahmen einer Rollenzuweisung aufgelistet und angegeben werden.
Rollenzuweisung
Eine Rollenzuweisung ist die Zuordnung einer Rollendefinition zu einem Dienstprinzipal. Sie können erstellt, aufgelistet, einzeln abgerufen und gelöscht werden.
Key Vault Backup-Client
Der Key Vault Backup Client bietet sowohl synchrone als auch asynchrone Vorgänge für vollständige Schlüsselsicherungen, Vollständige Schlüsselwiederherstellungen und selektive Schlüsselwiederherstellungen. Asynchrone (KeyVaultBackupAsyncClient
) und synchrone (KeyVaultBackupClient
) Clients sind im SDK vorhanden, sodass ein Client basierend auf dem Anwendungsfall einer Anwendung ausgewählt werden kann.
HINWEIS: Der Sicherungsspeicher für Schlüsselsicherungen ist ein Blobspeichercontainer mit Shared Access Signature-Authentifizierung. Weitere Informationen zum Erstellen eines SAS-Tokens mithilfe von
BlobServiceClient
finden Sie in der Infodatei zum Azure Storage Blobs-Client. Alternativ ist es möglich, ein SAS-Token in Storage-Explorer zu generieren.
Sicherungsvorgang
Ein Sicherungsvorgang stellt einen zeitintensiven Vorgang für eine vollständige Schlüsselsicherung dar.
Wiederherstellungsvorgang
Ein Wiederherstellungsvorgang stellt einen zeitintensiven Vorgang sowohl für die Wiederherstellung des vollständigen Schlüssels als auch für die selektive Schlüsselwiederherstellung dar.
client für Key Vault einstellungen
Der Key Vault Access Control-Client ermöglicht die Bearbeitung der Einstellungen eines Azure Key Vault-Kontos mit Vorgängen wie Abrufen, Aktualisieren und Auflisten. Asynchrone (KeyVaultSettingsAsyncClient
) und synchrone (KeyVaultSettingsClient
) Clients sind im SDK vorhanden, sodass ein Client basierend auf dem Anwendungsfall einer Anwendung ausgewählt werden kann.
Zugriffssteuerungsvorgänge
Beispiele
Synchronisierungs-API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der häufigsten Azure Key Vault Access Control-Dienstaufgaben behandeln, einschließlich:
- Auflisten der Rollendefinitionen
- Erstellen oder Aktualisieren einer Rollendefinition
- Abrufen einer Rollendefinition
- Auflisten von Rollenzuweisungen
- Erstellen einer Rollenzuweisung
- Abrufen einer Rollenzuweisung
- Löschen einer Rollenzuweisung
Auflisten der Rollendefinitionen
Listen Sie die Rollendefinitionen im Schlüsseltresor auf, indem Sie aufrufen listRoleDefinitions()
.
PagedIterable<KeyVaultRoleDefinition> roleDefinitions =
keyVaultAccessControlClient.listRoleDefinitions(KeyVaultRoleScope.GLOBAL);
roleDefinitions.forEach(roleDefinition ->
System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName()));
Erstellen oder Aktualisieren einer Rollendefinition
Erstellen oder aktualisieren Sie eine Rollendefinition im Schlüsseltresor. Das folgende Beispiel zeigt, wie Sie eine Rollendefinition mit einem zufällig generierten Namen erstellen.
KeyVaultRoleDefinition roleDefinition = keyVaultAccessControlClient.setRoleDefinition(KeyVaultRoleScope.GLOBAL);
System.out.printf("Created role definition with randomly generated name '%s' and role name '%s'.%n",
roleDefinition.getName(), roleDefinition.getRoleName());
Abrufen einer Rollendefinition
Rufen Sie eine vorhandene Rollendefinition ab. Dazu sind der Bereich und die Eigenschaft "name" aus einer vorhandenen Rollendefinition erforderlich.
String roleDefinitionName = "<role-definition-name>";
KeyVaultRoleDefinition roleDefinition =
keyVaultAccessControlClient.getRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName);
System.out.printf("Retrieved role definition with name '%s' and role name '%s'.%n", roleDefinition.getName(),
roleDefinition.getRoleName());
Löschen einer Rollendefinition
Löschen sie eine Rollendefinition. Dazu sind die Eigenschaft "scope" und "name" aus einer vorhandenen Rollendefinition erforderlich.
String roleDefinitionName = "<role-definition-name>";
keyVaultAccessControlClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName);
System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName);
Auflisten der Rollenzuweisungen
Listen Sie die Rollenzuweisungen im Schlüsseltresor auf, indem Sie aufrufen listRoleAssignments()
.
PagedIterable<KeyVaultRoleAssignment> roleAssignments =
keyVaultAccessControlClient.listRoleAssignments(KeyVaultRoleScope.GLOBAL);
roleAssignments.forEach(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Erstellen einer Rollenzuweisung
Erstellen Sie eine Rollenzuweisung im Schlüsseltresor. Dazu sind eine Rollendefinitions-ID und eine Dienstprinzipalobjekt-ID erforderlich.
Eine Rollendefinitions-ID kann aus der Id-Eigenschaft einer der rollendefinitionen abgerufen werden, die von listRoleDefinitions()
zurückgegeben werden.
Im Abschnitt Erstellen/Abrufen von Anmeldeinformationen finden Sie Links und Anweisungen zum Generieren eines neuen Dienstprinzipals und zum Abrufen der Objekt-ID. Sie können auch die Objekt-ID für Ihr aktuell angemeldetes Konto abrufen, indem Sie den folgenden Azure CLI-Befehl ausführen:
az ad signed-in-user show --query objectId
String roleDefinitionId = "<role-definition-id>";
String servicePrincipalId = "<service-principal-id>";
KeyVaultRoleAssignment roleAssignment =
keyVaultAccessControlClient.createRoleAssignment(KeyVaultRoleScope.GLOBAL, roleDefinitionId,
servicePrincipalId);
System.out.printf("Created role assignment with randomly generated name '%s' for principal with id '%s'.%n",
roleAssignment.getName(), roleAssignment.getProperties().getPrincipalId());
Abrufen einer Rollenzuweisung
Rufen Sie eine vorhandene Rollenzuweisung ab. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollenzuweisung erforderlich.
String roleAssignmentName = "<role-assignment-name>";
KeyVaultRoleAssignment roleAssignment =
keyVaultAccessControlClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName);
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName());
Löschen einer Rollenzuweisung
Um eine Rollenzuweisung aus einem Dienstprinzipal zu entfernen, muss die Rollenzuweisung gelöscht werden. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollenzuweisung erforderlich.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName);
System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName);
Asynchrone API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der häufigsten asynchronen Azure Key Vault Access Control-Dienstaufgaben behandeln, einschließlich:
- Asynchrones Auflisten von Rollendefinitionen
- Asynchrones Erstellen oder Aktualisieren einer Rollendefinition
- Asynchrones Abrufen einer Rollendefinition
- Asynchrones Löschen einer Rollendefinition
- Asynchrones Auflisten von Rollenzuweisungen
- Asynchrones Erstellen einer Rollenzuweisung
- Asynchrones Abrufen einer Rollenzuweisung
- Asynchrones Löschen einer Rollenzuweisung
Hinweis: Sie sollten oder
Thread.sleep()
nach den Funktionsaufrufen im Standard Klasse/Thread hinzufügenSystem.in.read()
, damit asynchrone Funktionen/Vorgänge ausgeführt und abgeschlossen werden können, bevor die Standard Anwendung/Thread beendet wird.
Asynchrones Auflisten von Rollendefinitionen
Listen Sie die Rollendefinitionen im Schlüsseltresor auf, indem Sie aufrufen listRoleDefinitions()
.
keyVaultAccessControlAsyncClient.listRoleDefinitions(KeyVaultRoleScope.GLOBAL)
.subscribe(roleDefinition ->
System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName()));
Asynchrones Erstellen oder Aktualisieren einer Rollendefinition
Erstellen oder aktualisieren Sie eine Rollendefinition im Schlüsseltresor. Das folgende Beispiel zeigt, wie Sie eine Rollendefinition mit einem zufällig generierten Namen erstellen.
keyVaultAccessControlAsyncClient.setRoleDefinition(KeyVaultRoleScope.GLOBAL)
.subscribe(roleDefinition ->
System.out.printf("Created role definition with randomly generated name '%s' and role name '%s'.%n",
roleDefinition.getName(), roleDefinition.getRoleName()));
Asynchrones Abrufen einer Rollendefinition
Rufen Sie eine vorhandene Rollendefinition ab. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollendefinition erforderlich.
String roleDefinitionName = "<role-definition-name>";
keyVaultAccessControlAsyncClient.getRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName)
.subscribe(roleDefinition ->
System.out.printf("Retrieved role definition with name '%s' and role name '%s'.%n",
roleDefinition.getName(), roleDefinition.getRoleName()));
Asynchrones Löschen einer Rollendefinition
Löschen sie eine Rollendefinition. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollendefinition erforderlich.
String roleDefinitionName = "<role-definition-name>";
keyVaultAccessControlAsyncClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName)
.subscribe(unused -> System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName));
Asynchrones Auflisten von Rollenzuweisungen
Listen Sie die Rollenzuweisungen im Schlüsseltresor auf, indem Sie aufrufen listRoleAssignments()
.
keyVaultAccessControlAsyncClient.listRoleAssignments(KeyVaultRoleScope.GLOBAL)
.subscribe(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Asynchrones Erstellen einer Rollenzuweisung
Erstellen Sie eine Rollenzuweisung im Schlüsseltresor. Dazu sind eine Rollendefinitions-ID und eine Dienstprinzipalobjekt-ID erforderlich.
Eine Rollendefinitions-ID kann aus der Id-Eigenschaft einer der rollendefinitionen abgerufen werden, die von listRoleDefinitions()
zurückgegeben werden.
Im Abschnitt Erstellen/Abrufen von Anmeldeinformationen finden Sie Links und Anweisungen zum Generieren eines neuen Dienstprinzipals und zum Abrufen der Objekt-ID. Sie können auch die Objekt-ID für Ihr aktuell angemeldetes Konto abrufen, indem Sie den folgenden Azure CLI-Befehl ausführen:
az ad signed-in-user show --query objectId
String roleDefinitionId = "<role-definition-id>";
String servicePrincipalId = "<service-principal-id>";
keyVaultAccessControlAsyncClient.createRoleAssignment(KeyVaultRoleScope.GLOBAL, roleDefinitionId,
servicePrincipalId).subscribe(roleAssignment ->
System.out.printf("Created role assignment with randomly generated name '%s' for principal with id"
+ "'%s'.%n", roleAssignment.getName(), roleAssignment.getProperties().getPrincipalId()));
Asynchrones Abrufen einer Rollenzuweisung
Rufen Sie eine vorhandene Rollenzuweisung ab. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollenzuweisung erforderlich.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlAsyncClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName)
.subscribe(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Asynchrones Löschen einer Rollenzuweisung
Um eine Rollenzuweisung aus einem Dienstprinzipal zu entfernen, muss die Rollenzuweisung gelöscht werden. Dazu ist die Eigenschaft "name" aus einer vorhandenen Rollenzuweisung erforderlich.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlAsyncClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName)
.subscribe(unused ->
System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName));
Sicherungs- und Wiederherstellungsvorgänge
Beispiele
Synchronisierungs-API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der häufigsten Azure Key Vault Backup-Clientaufgaben abdecken, einschließlich:
Sichern einer Sammlung von Schlüsseln
Sichern Sie eine gesamte Sammlung von Schlüsseln mit beginBackup()
.
String blobStorageUrl = "https://myaccount.blob.core.windows.net/myContainer";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
SyncPoller<KeyVaultBackupOperation, String> backupPoller =
keyVaultBackupClient.beginBackup(blobStorageUrl, sasToken);
PollResponse<KeyVaultBackupOperation> pollResponse = backupPoller.poll();
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus());
PollResponse<KeyVaultBackupOperation> finalPollResponse = backupPoller.waitForCompletion();
if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED) {
String folderUrl = backupPoller.getFinalResult();
System.out.printf("Backup completed. The storage location of this backup is: %s.%n", folderUrl);
} else {
KeyVaultBackupOperation operation = backupPoller.poll().getValue();
System.out.printf("Backup failed with error: %s.%n", operation.getError().getMessage());
}
Wiederherstellen einer Sammlung von Schlüsseln
Stellen Sie mit eine gesamte Sammlung von Schlüsseln aus einer Sicherung wieder her beginRestore()
.
String folderUrl = "https://myaccount.blob.core.windows.net/myContainer/mhsm-myaccount-2020090117323313";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
SyncPoller<KeyVaultRestoreOperation, KeyVaultRestoreResult> backupPoller =
keyVaultBackupClient.beginRestore(folderUrl, sasToken);
PollResponse<KeyVaultRestoreOperation> pollResponse = backupPoller.poll();
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus());
PollResponse<KeyVaultRestoreOperation> finalPollResponse = backupPoller.waitForCompletion();
if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED) {
System.out.printf("Backup restored successfully.%n");
} else {
KeyVaultRestoreOperation operation = backupPoller.poll().getValue();
System.out.printf("Restore failed with error: %s.%n", operation.getError().getMessage());
}
Selektives Wiederherstellen eines Schlüssels
Stellen Sie einen bestimmten Schlüssel aus einer Sicherung mithilfe beginSelectiveRestore()
von wieder her.
String folderUrl = "https://myaccount.blob.core.windows.net/myContainer/mhsm-myaccount-2020090117323313";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
String keyName = "myKey";
SyncPoller<KeyVaultSelectiveKeyRestoreOperation, KeyVaultSelectiveKeyRestoreResult> backupPoller =
keyVaultBackupClient.beginSelectiveKeyRestore(folderUrl, sasToken, keyName);
PollResponse<KeyVaultSelectiveKeyRestoreOperation> pollResponse = backupPoller.poll();
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus());
PollResponse<KeyVaultSelectiveKeyRestoreOperation> finalPollResponse = backupPoller.waitForCompletion();
if (finalPollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED) {
System.out.printf("Key restored successfully.%n");
} else {
KeyVaultSelectiveKeyRestoreOperation operation = backupPoller.poll().getValue();
System.out.printf("Key restore failed with error: %s.%n", operation.getError().getMessage());
}
Asynchrone API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der häufigsten asynchronen Azure Key Vault Backup-Clientaufgaben abdecken, einschließlich:
- asynchrones Sichern eines Key Vault
- asynchrones Wiederherstellen eines Key Vault
- Asynchrones Wiederherstellen eines Schlüssels
Hinweis: Sie sollten oder
Thread.sleep()
nach den Funktionsaufrufen im Standard Klasse/Thread hinzufügenSystem.in.read()
, damit asynchrone Funktionen/Vorgänge ausgeführt und abgeschlossen werden können, bevor die Standard Anwendung/Thread beendet wird.
asynchrones Sichern einer Schlüsselsammlung
Sichern Sie eine gesamte Sammlung von Schlüsseln mit beginBackup()
.
String blobStorageUrl = "https://myaccount.blob.core.windows.net/myContainer";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
keyVaultBackupAsyncClient.beginBackup(blobStorageUrl, sasToken)
.setPollInterval(Duration.ofSeconds(1)) // You can set a custom polling interval.
.doOnError(e -> System.out.printf("Backup failed with error: %s.%n", e.getMessage()))
.doOnNext(pollResponse ->
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus()))
.filter(pollResponse -> pollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED)
.flatMap(AsyncPollResponse::getFinalResult)
.subscribe(folderUrl ->
System.out.printf("Backup completed. The storage location of this backup is: %s.%n", folderUrl));
asynchrones Wiederherstellen einer Schlüsselsammlung
Stellen Sie mit eine gesamte Sammlung von Schlüsseln aus einer Sicherung wieder her beginRestore()
.
String folderUrl = "https://myaccount.blob.core.windows.net/myContainer/mhsm-myaccount-2020090117323313";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
keyVaultBackupAsyncClient.beginRestore(folderUrl, sasToken)
.setPollInterval(Duration.ofSeconds(1)) // You can set a custom polling interval.
.doOnError(e -> System.out.printf("Restore failed with error: %s.%n", e.getMessage()))
.doOnNext(pollResponse ->
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus()))
.filter(pollResponse -> pollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED)
.flatMap(AsyncPollResponse::getFinalResult)
.subscribe(unused -> System.out.printf("Backup restored successfully.%n"));
Selektives Wiederherstellen eines Schlüssels asynchron
Stellen Sie mit eine gesamte Sammlung von Schlüsseln aus einer Sicherung wieder her beginSelectiveRestore()
.
String folderUrl = "https://myaccount.blob.core.windows.net/myContainer/mhsm-myaccount-2020090117323313";
String sasToken = "sv=2020-02-10&ss=b&srt=o&sp=rwdlactfx&se=2021-06-17T07:13:07Z&st=2021-06-16T23:13:07Z&spr=https&sig=n5V6fnlkViEF9b7ij%2FttTHNwO2BdFIHKHppRxGAyJdc%3D";
String keyName = "myKey";
keyVaultBackupAsyncClient.beginSelectiveKeyRestore(folderUrl, sasToken, keyName)
.setPollInterval(Duration.ofSeconds(1)) // You can set a custom polling interval.
.doOnError(e -> System.out.printf("Key restoration failed with error: %s.%n", e.getMessage()))
.doOnNext(pollResponse ->
System.out.printf("The current status of the operation is: %s.%n", pollResponse.getStatus()))
.filter(pollResponse -> pollResponse.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED)
.flatMap(AsyncPollResponse::getFinalResult)
.subscribe(unused -> System.out.printf("Key restored successfully.%n"));
Einstellungsvorgänge
Beispiele
Synchronisierungs-API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der gängigsten Clientaufgaben von Azure Key Vault Settings behandeln, einschließlich:
Abrufen aller Einstellungen
Listet alle Einstellungen für ein Key Vault-Konto auf.
KeyVaultGetSettingsResult getSettingsResult = keyVaultSettingsClient.getSettings();
for (KeyVaultSetting setting : getSettingsResult.getSettings()) {
System.out.printf("Retrieved setting '%s' with value '%s'.%n", setting.getName(), setting.asBoolean());
}
Abrufen einer bestimmten Einstellung
Rufen Sie eine bestimmte Einstellung ab.
String settingName = "<setting-to-get>";
KeyVaultSetting setting = keyVaultSettingsClient.getSetting(settingName);
System.out.printf("Retrieved setting '%s' with value '%s'.%n", setting.getName(),
setting.asBoolean());
Aktualisieren einer bestimmten Einstellung
Aktualisieren Sie eine bestimmte Einstellung.
String settingName = "<setting-to-update>";
KeyVaultSetting settingToUpdate = new KeyVaultSetting(settingName, true);
KeyVaultSetting updatedSetting = keyVaultSettingsClient.updateSetting(settingToUpdate);
System.out.printf("Updated setting '%s' to '%s'.%n", updatedSetting.getName(), updatedSetting.asBoolean());
Asynchrone API
Die folgenden Abschnitte enthalten mehrere Codeausschnitte, die einige der häufigsten asynchronen Clientaufgaben für Azure Key Vault-Einstellungen behandeln, einschließlich:
Asynchrones Abrufen aller Einstellungen
Listet alle Einstellungen für ein Key Vault-Konto auf.
keyVaultSettingsAsyncClient.getSettings()
.subscribe(settingsResult ->
settingsResult.getSettings().forEach(setting ->
System.out.printf("Retrieved setting with name '%s' and value '%s'.%n", setting.getName(),
setting.asBoolean())));
asynchrones Abrufen einer bestimmten Einstellung
Rufen Sie eine bestimmte Einstellung ab.
String settingName = "<setting-to-get>";
keyVaultSettingsAsyncClient.getSetting(settingName)
.subscribe(setting ->
System.out.printf("Retrieved setting with name '%s' and value '%s'.%n", setting.getName(),
setting.asBoolean()));
Asynchrones Aktualisieren einer bestimmten Einstellung
Aktualisieren Sie eine bestimmte Einstellung.
String settingName = "<setting-to-update>";
KeyVaultSetting settingToUpdate = new KeyVaultSetting(settingName, true);
keyVaultSettingsAsyncClient.updateSetting(settingToUpdate)
.subscribe(updatedSetting ->
System.out.printf("Updated setting with name '%s' and value '%s'.%n", updatedSetting.getName(),
updatedSetting.asBoolean()));
Problembehandlung
Weitere Informationen zur Diagnose verschiedener Fehlerszenarien finden Sie in unserem Leitfaden zur Problembehandlung .
Allgemein
Azure Key Vault Access Control-Clients lösen Ausnahmen aus. Wenn Sie beispielsweise versuchen, eine Rollenzuweisung abzurufen, nachdem sie gelöscht wurde, wird ein 404
Fehler zurückgegeben, der angibt, dass die Ressource nicht gefunden wurde. Im folgenden Codeausschnitt wird der Fehler ordnungsgemäß behandelt, indem die Ausnahme abgefangen wird und zusätzliche Fehlerinformationen angezeigt werden.
try {
keyVaultAccessControlClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, "<role-assginment-name>");
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
}
HTTP-Standardclient
Alle Clientbibliotheken verwenden standardmäßig den Netty-HTTP-Client. Durch Hinzufügen der obigen Abhängigkeit wird die Clientbibliothek automatisch für die Verwendung des Netty-HTTP-Clients konfiguriert. Das Konfigurieren oder Ändern des HTTP-Clients wird detailliert im Wiki zu HTTP-Clients beschrieben.
SSL-Standardbibliothek
Alle Clientbibliotheken verwenden standardmäßig die Tomcat-native Boring-SSL-Bibliothek, um die Leistung auf nativer Ebene für SSL-Vorgänge zu ermöglichen. Die Boring SSL-Bibliothek ist eine Uber JAR-Datei mit nativen Bibliotheken für Linux/macOS/Windows und bietet eine bessere Leistung im Vergleich zur SSL-Standardimplementierung innerhalb des JDK. Weitere Informationen, einschließlich zur Reduzierung der Abhängigkeitsgröße, finden Sie im Abschnitt Leistungsoptimierung des Wikis.
Nächste Schritte
Mehrere Key Vault Java SDK-Beispiele stehen Ihnen im GitHub-Repository des SDK zur Verfügung. Diese Beispiele enthalten Beispielcode für zusätzliche Szenarien, die häufig bei der Arbeit mit Azure Key Vault auftreten.
Zusätzliche Dokumentation
Eine ausführlichere Dokumentation zu Azure Key Vault finden Sie in der API-Referenzdokumentation.
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 häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.