Biblioteca de administración de Azure Key Vault para Java
HSM administrado de Azure Key Vault es un servicio en la nube totalmente administrado, de alta disponibilidad, de un solo inquilino y compatible con estándares que le permite proteger las claves criptográficas de las aplicaciones en la nube mediante HSM validados por FIPS 140-2 nivel 3.
Los clientes de la biblioteca de administración de Azure Key Vault admiten tareas administrativas, como la copia de seguridad o restauración completa y el control de acceso basado en rol (RBAC) de nivel de clave.
Código fuente | Documentación de referencia de API | Documentación del producto | Ejemplos
Introducción
Inclusión del paquete
Inclusión del archivo BOM
Incluya al azure-sdk-bom
proyecto para que dependa de la versión de disponibilidad general (GA) de la biblioteca. En el fragmento de código siguiente, reemplace el marcador de posición {bom_version_to_target} por el número de versión. Para más información sobre la lista de materiales, consulte el archivo Léame bom del SDK de AZURE.
<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>
y, a continuación, incluya la dependencia directa en la sección de dependencias sin la etiqueta de versión, como se muestra a continuación.
<dependencies>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-administration</artifactId>
</dependency>
</dependencies>
Inclusión de dependencias directas
Si desea depender de una versión determinada de la biblioteca que no está presente en la lista de materiales, agregue la dependencia directa al proyecto como se indica a continuación.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-administration</artifactId>
<version>4.4.1</version>
</dependency>
Requisitos previos
- Un kit de desarrollo de Java (JDK), versión 8 o posterior.
- Una suscripción a Azure.
- Un HSM administrado de Azure Key Vault existente. Si necesita crear un HSM administrado, puede hacerlo mediante la CLI de Azure siguiendo los pasos descritos en este documento.
Autenticar el cliente
Para interactuar con el servicio Azure Key Vault, deberá crear una instancia de la KeyVaultAccessControlClient
clase o la KeyVaultBackupClient
clase , así como una dirección URL del almacén (que puede ver como "Nombre DNS" en Azure Portal) y un objeto de credencial. Los ejemplos que se muestran en este documento usan un objeto de credencial denominado DefaultAzureCredential
, que es adecuado para la mayoría de los escenarios, incluidos los entornos de desarrollo y producción locales. Además, se recomienda usar una identidad administrada para la autenticación en entornos de producción.
Puede encontrar más información sobre las distintas formas de autenticación y sus tipos de credenciales correspondientes en la documentación de Azure Identity.
Creación de un cliente de control de acceso
Una vez que realice la configuración de autenticación que mejor se adapte a su dirección URL administrada y reemplazada por la dirección URL del almacén de claves, puede crear :KeyVaultAccessControlClient
KeyVaultAccessControlClient keyVaultAccessControlClient = new KeyVaultAccessControlClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
NOTA: Para usar un cliente asincrónico, use
KeyVaultAccessControlAsyncClient
en lugar deKeyVaultAccessControlClient
y llame abuildAsyncClient()
.
Creación de un cliente de copia de seguridad
Una vez que realice la configuración de autenticación que mejor se adapte a su dirección URL administrada y reemplazada por la dirección URL del almacén de claves, puede crear :KeyVaultBackupClient
KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
NOTA: Para usar un cliente asincrónico, use
KeyVaultBackupAsyncClient
en lugar deKeyVaultBackupClient
y llame abuildAsyncClient()
.
Creación de un cliente de configuración
Una vez que realice la configuración de autenticación que mejor se adapte a su dirección URL administrada y reemplazada por la dirección URL del almacén de claves, puede crear :KeyVaultSettingsClient
KeyVaultBackupClient keyVaultBackupClient = new KeyVaultBackupClientBuilder()
.vaultUrl("<your-managed-hsm-url>")
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
NOTA: Para usar un cliente asincrónico, use
KeyVaultSettingsAsyncClient
en lugar deKeyVaultSettingsClient
y llame abuildAsyncClient()
.
Conceptos clave
cliente de Key Vault Access Control
El cliente Key Vault Access Control realiza las interacciones con el servicio Azure Key Vault para obtener, establecer, eliminar y enumerar asignaciones de roles, así como enumerar definiciones de roles. Los clientes asincrónicos (KeyVaultAccessControlAsyncClient
) y sincrónicos (KeyVaultAccessControlClient
) existen en el SDK, lo que permite seleccionar un cliente en función del caso de uso de una aplicación. Una vez que haya inicializado una asignación de roles, puede interactuar con los tipos de recursos principales en Key Vault.
Definición de roles
Una definición de roles es una colección de permisos. Define las operaciones que se pueden realizar, como lectura, escritura y eliminación. También puede definir las operaciones que se excluyen de las operaciones permitidas.
Las definiciones de roles se pueden enumerar y especificar como parte de una asignación de roles.
Asignación de roles
Una asignación de roles es la asociación de una definición de roles a una entidad de servicio. Se pueden crear, enumerar, capturar individualmente y eliminar.
cliente de copia de seguridad de Key Vault
El cliente de copia de seguridad de Key Vault proporciona operaciones sincrónicas y asincrónicas para realizar copias de seguridad de claves completas, restauraciones de claves completas y restauraciones selectivas de claves. Los clientes asincrónicos (KeyVaultBackupAsyncClient
) y sincrónicos (KeyVaultBackupClient
) existen en el SDK, lo que permite seleccionar un cliente en función del caso de uso de una aplicación.
NOTA: El almacén de respaldo para las copias de seguridad de claves es un contenedor de almacenamiento de blobs mediante la autenticación de firma de acceso compartido. Para más información sobre cómo crear un token de SAS mediante
BlobServiceClient
, consulte el archivo Léame del cliente de Blobs de Azure Storage. Como alternativa, es posible generar un token de SAS en Explorador de Storage.
Operación de copia de seguridad
Una operación de copia de seguridad representa una operación de ejecución prolongada para una copia de seguridad de clave completa.
Operación de restauración
Una operación de restauración representa una operación de larga duración para una restauración de clave completa y selectiva.
cliente de configuración de Key Vault
El cliente de Key Vault Access Control permite la manipulación de la configuración de una cuenta de Azure Key Vault, con operaciones como: obtener, actualizar y enumerar. Los clientes asincrónicos (KeyVaultSettingsAsyncClient
) y sincrónicos (KeyVaultSettingsClient
) existen en el SDK, lo que permite seleccionar un cliente en función del caso de uso de una aplicación.
Operaciones de control de acceso
Ejemplos
API de sincronización
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de servicio de Azure Key Vault Access Control más comunes, entre las que se incluyen:
- Lista de definiciones de roles
- Creación o actualización de una definición de roles
- Recuperación de una definición de roles
- Lista de asignaciones de roles
- Crear una asignación de rol
- Recuperación de una asignación de roles
- Eliminación de una asignación de roles
Lista de definiciones de roles
Enumere las definiciones de roles en el almacén de claves mediante una llamada a listRoleDefinitions()
.
PagedIterable<KeyVaultRoleDefinition> roleDefinitions =
keyVaultAccessControlClient.listRoleDefinitions(KeyVaultRoleScope.GLOBAL);
roleDefinitions.forEach(roleDefinition ->
System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName()));
Creación o actualización de una definición de roles
Cree o actualice una definición de rol en el almacén de claves. En el ejemplo siguiente se muestra cómo crear una definición de roles con un nombre generado aleatoriamente.
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());
Recuperación de una definición de roles
Obtiene una definición de rol existente. Para ello, se requieren el ámbito y la propiedad "name" de una definición de rol existente.
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());
Eliminación de una definición de roles
Elimina una definición de rol. Para ello, se requiere la propiedad de propiedad scope y 'name' de una definición de rol existente.
String roleDefinitionName = "<role-definition-name>";
keyVaultAccessControlClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName);
System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName);
Lista de asignaciones de roles
Enumere las asignaciones de roles en el almacén de claves mediante una llamada a listRoleAssignments()
.
PagedIterable<KeyVaultRoleAssignment> roleAssignments =
keyVaultAccessControlClient.listRoleAssignments(KeyVaultRoleScope.GLOBAL);
roleAssignments.forEach(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Crear una asignación de rol
Cree una asignación de roles en el almacén de claves. Para ello, se requiere un identificador de definición de rol y un identificador de objeto de entidad de servicio.
Se puede obtener un identificador de definición de rol de la propiedad 'id' de una de las definiciones de roles devueltas de listRoleDefinitions()
.
Consulte la sección Create/Get Credentials (Crear y obtener credenciales ) para obtener vínculos e instrucciones sobre cómo generar una nueva entidad de servicio y obtener su identificador de objeto. También puede obtener el identificador de objeto de la cuenta que ha iniciado sesión actualmente mediante la ejecución del siguiente comando de la CLI de Azure:
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());
Recuperación de una asignación de roles
Obtener una asignación de roles existente. Para ello, se requiere la propiedad "name" de una asignación de roles existente.
String roleAssignmentName = "<role-assignment-name>";
KeyVaultRoleAssignment roleAssignment =
keyVaultAccessControlClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName);
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName());
Eliminación de una asignación de roles
Para quitar una asignación de roles de una entidad de servicio, se debe eliminar la asignación de roles. Para ello, se requiere la propiedad "name" de una asignación de roles existente.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName);
System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName);
API asincrónica
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de servicio asincrónicas más comunes de Azure Key Vault Access Control, entre las que se incluyen:
- Enumerar definiciones de roles de forma asincrónica
- Crear o actualizar una definición de roles de forma asincrónica
- Recuperar una definición de rol de forma asincrónica
- Eliminar una definición de rol de forma asincrónica
- Enumeración de asignaciones de roles de forma asincrónica
- Creación de una asignación de roles de forma asincrónica
- Recuperar una asignación de roles de forma asincrónica
- Eliminar una asignación de roles de forma asincrónica
Nota: Debe agregar
System.in.read()
oThread.sleep()
después de las llamadas de función en la clase o subproceso principal para permitir que las funciones o operaciones asincrónicas se ejecuten y finalicen antes de que se cierre la aplicación o subproceso principal.
Enumerar definiciones de roles de forma asincrónica
Enumere las definiciones de roles en el almacén de claves mediante una llamada a listRoleDefinitions()
.
keyVaultAccessControlAsyncClient.listRoleDefinitions(KeyVaultRoleScope.GLOBAL)
.subscribe(roleDefinition ->
System.out.printf("Retrieved role definition with name '%s'.%n", roleDefinition.getName()));
Crear o actualizar una definición de rol de forma asincrónica
Cree o actualice una definición de rol en el almacén de claves. En el ejemplo siguiente se muestra cómo crear una definición de rol con un nombre generado aleatoriamente.
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()));
Recuperar una definición de rol de forma asincrónica
Obtenga una definición de rol existente. Para ello, se requiere la propiedad 'name' de una definición de rol existente.
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()));
Eliminar una definición de rol de forma asincrónica
Elimine una definición de rol. Para ello, se requiere la propiedad 'name' de una definición de rol existente.
String roleDefinitionName = "<role-definition-name>";
keyVaultAccessControlAsyncClient.deleteRoleDefinition(KeyVaultRoleScope.GLOBAL, roleDefinitionName)
.subscribe(unused -> System.out.printf("Deleted role definition with name '%s'.%n", roleDefinitionName));
Enumeración de asignaciones de roles de forma asincrónica
Enumere las asignaciones de roles en el almacén de claves mediante una llamada a listRoleAssignments()
.
keyVaultAccessControlAsyncClient.listRoleAssignments(KeyVaultRoleScope.GLOBAL)
.subscribe(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Creación de una asignación de roles de forma asincrónica
Cree una asignación de roles en el almacén de claves. Para ello, se requiere un identificador de definición de rol y un identificador de objeto de entidad de servicio.
Se puede obtener un identificador de definición de rol de la propiedad 'id' de una de las definiciones de roles devueltas de listRoleDefinitions()
.
Consulte la sección Create/Get Credentials (Crear/obtener credenciales ) para obtener vínculos e instrucciones sobre cómo generar una nueva entidad de servicio y obtener su identificador de objeto. También puede obtener el identificador de objeto de la cuenta que ha iniciado sesión actualmente ejecutando el siguiente comando de la CLI de Azure:
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()));
Recuperar una asignación de roles de forma asincrónica
Obtenga una asignación de roles existente. Para ello, se requiere la propiedad 'name' de una asignación de roles existente.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlAsyncClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName)
.subscribe(roleAssignment ->
System.out.printf("Retrieved role assignment with name '%s'.%n", roleAssignment.getName()));
Eliminar una asignación de roles de forma asincrónica
Para quitar una asignación de roles de una entidad de servicio, se debe eliminar la asignación de roles. Para ello, se requiere la propiedad 'name' de una asignación de roles existente.
String roleAssignmentName = "<role-assignment-name>";
keyVaultAccessControlAsyncClient.deleteRoleAssignment(KeyVaultRoleScope.GLOBAL, roleAssignmentName)
.subscribe(unused ->
System.out.printf("Deleted role assignment with name '%s'.%n", roleAssignmentName));
Operaciones de copia de seguridad y restauración
Ejemplos
API de sincronización
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de cliente de Azure Key Vault Backup más comunes, entre las que se incluyen:
Copia de seguridad de una colección de claves
Realice una copia de seguridad de toda una colección de claves mediante 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());
}
Restauración de una colección de claves
Restaure una colección completa de claves a partir de una copia de seguridad mediante 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());
}
Restauración selectiva de una clave
Restaure una clave específica desde una copia de seguridad mediante 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";
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());
}
API asincrónica
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de cliente asincrónicas más comunes de Azure Key Vault Backup, entre las que se incluyen:
- Copia de seguridad de un Key Vault de forma asincrónica
- Restaurar un Key Vault de forma asincrónica
- Restauración de una clave de forma asincrónica
Nota: Debe agregar
System.in.read()
oThread.sleep()
después de las llamadas de función en la clase o subproceso principal para permitir que las funciones o operaciones asincrónicas se ejecuten y finalicen antes de que se cierre la aplicación o subproceso principal.
Copia de seguridad de una colección de claves de forma asincrónica
Realice una copia de seguridad de toda una colección de claves mediante 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));
Restauración de una colección de claves de forma asincrónica
Restaure una colección completa de claves a partir de una copia de seguridad mediante 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"));
Restauración selectiva de una clave de forma asincrónica
Restaure una colección completa de claves a partir de una copia de seguridad mediante 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"));
Operaciones de configuración
Ejemplos
API de sincronización
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de cliente de Azure Key Vault Settings más comunes, entre las que se incluyen:
Obtener toda la configuración
Enumere toda la configuración de una cuenta de Key Vault.
KeyVaultGetSettingsResult getSettingsResult = keyVaultSettingsClient.getSettings();
for (KeyVaultSetting setting : getSettingsResult.getSettings()) {
System.out.printf("Retrieved setting '%s' with value '%s'.%n", setting.getName(), setting.asBoolean());
}
Recuperar una configuración específica
Recuperar una configuración específica.
String settingName = "<setting-to-get>";
KeyVaultSetting setting = keyVaultSettingsClient.getSetting(settingName);
System.out.printf("Retrieved setting '%s' with value '%s'.%n", setting.getName(),
setting.asBoolean());
Actualizar una configuración específica
Actualice una configuración específica.
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());
API asincrónica
En las secciones siguientes se proporcionan varios fragmentos de código que abarcan algunas de las tareas de cliente asincrónicas de Azure Key Vault Settings más comunes, entre las que se incluyen:
Obtener toda la configuración de forma asincrónica
Enumere toda la configuración de una cuenta de Key Vault.
keyVaultSettingsAsyncClient.getSettings()
.subscribe(settingsResult ->
settingsResult.getSettings().forEach(setting ->
System.out.printf("Retrieved setting with name '%s' and value '%s'.%n", setting.getName(),
setting.asBoolean())));
Recuperar una configuración específica de forma asincrónica
Recuperar una configuración específica.
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()));
Actualizar una configuración específica de forma asincrónica
Actualice una configuración específica.
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()));
Solución de problemas
Consulte nuestra guía de solución de problemas para obtener más información sobre cómo diagnosticar varios escenarios de error.
General
Los clientes de Azure Key Vault Access Control generan excepciones. Por ejemplo, si intenta recuperar una asignación de roles después de eliminarse, se devuelve un 404
error, lo que indica que no se encontró el recurso. En el siguiente fragmento, el error se controla correctamente al detectar la excepción y mostrar información adicional sobre el error.
try {
keyVaultAccessControlClient.getRoleAssignment(KeyVaultRoleScope.GLOBAL, "<role-assginment-name>");
} catch (HttpResponseException e) {
System.out.println(e.getMessage());
}
Cliente HTTP predeterminado
Todas las bibliotecas cliente usan de forma predeterminada el cliente HTTP de Netty. Al agregar la dependencia anterior, se configurará automáticamente la biblioteca cliente para usar el cliente HTTP de Netty. La configuración o el cambio del cliente HTTP se detalla en la wiki de clientes HTTP.
Biblioteca SSL predeterminada
De forma predeterminada, todas las bibliotecas cliente usan la biblioteca Boring SSL nativa de Tomcat para habilitar el rendimiento de nivel nativo para las operaciones SSL. La biblioteca SSL boring es un ARCHIVO JAR de Uber que contiene bibliotecas nativas para Linux / macOS / Windows, y proporciona un mejor rendimiento en comparación con la implementación SSL predeterminada dentro del JDK. Para obtener más información, incluido cómo reducir el tamaño de las dependencias, consulte la sección optimización del rendimiento de la wiki.
Pasos siguientes
Hay varios ejemplos de SDK de Java Key Vault disponibles en el repositorio de GitHub del SDK. Estos ejemplos proporcionan código de ejemplo para escenarios adicionales que se suelen encontrar al trabajar con Azure Key Vault.
Documentación adicional
Para obtener documentación más amplia sobre Azure Key Vault, consulte la documentación de referencia de API.
Contribuciones
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
El proyecto ha adoptado el Código de conducta de código abierto de Microsoft. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.