Administración de claves de cuenta de almacenamiento con Key Vault y la CLI de Azure (heredado)

Importante

Las claves de la cuenta de almacenamiento administradas por Key Vault (heredadas) se admiten tal cual, sin más actualizaciones planeadas. Solo se admiten SAS de cuenta con una versión del servicio de almacenamiento firmado para las definiciones de SAS que no sea posterior al 28 de marzo de 2018.

Importante

La compatibilidad con claves de cuenta de almacenamiento administradas en la CLI de Azure se quitó en la versión 2.54. Es necesario usar la versión 2.53.1 de la CLI de Azure o una anterior para los comandos de este tutorial.

Importante

Es recomendable usar la integración de Azure Storage con Microsoft Entra ID, el servicio de administración de acceso y de identidades basado en la nube de Microsoft. La integración de Microsoft Entra está disponible para blobs, colas y tablas de Azurey proporciona acceso basado en tokens de OAuth2 a Azure Storage (al igual que Azure Key Vault). Microsoft Entra ID le permite autenticar la aplicación cliente mediante una identidad de aplicación o usuario, en lugar de las credenciales de cuenta de almacenamiento. Puede usar una identidad administrada de Microsoft Entra cuando realice la ejecución en Azure. Las identidades administradas eliminan la necesidad de autenticación del cliente y de almacenar las credenciales en la aplicación o con ella. Use la siguiente solución solo cuando no sea posible la autenticación de Microsoft Entra.

Una cuenta de Azure Storage usa credenciales que constan de un nombre de cuenta y una clave. La clave se genera automáticamente y actúa como una contraseña y no como una clave criptográfica. Key Vault, para administrar las claves de la cuenta de almacenamiento, las regenera periódicamente en una cuenta de almacenamiento y proporciona tokens de firma de acceso compartido para el acceso delegado a los recursos de la cuenta de almacenamiento.

Puede usar la característica de clave de cuenta de almacenamiento administrada de Key Vault para mostrar (sincronizar) las claves con una cuenta de almacenamiento de Azure y volver a generar (girar) las claves periódicamente. Puede administrar claves para las cuentas de almacenamiento y las cuentas de almacenamiento clásicas.

Cuando use la característica de clave de cuenta de almacenamiento administrada, tenga en cuenta los puntos siguientes:

  • Los valores de clave nunca se devuelven como respuesta a un autor de la llamada.
  • Solo Key Vault debe administrar las claves de cuenta de almacenamiento. No administre las claves por su cuenta y evite interferir en los procesos de Key Vault.
  • Solo un único objeto de Key Vault debe administrar las claves de cuenta de almacenamiento. No permita la administración de claves desde varios objetos.
  • Regenere las claves solo con Key Vault. No regenere manualmente las claves de cuenta de almacenamiento.

Importante

La regeneración de la clave directamente en la cuenta de almacenamiento interrumpe la configuración de la cuenta de almacenamiento administrada y puede invalidar los tokens de SAS en uso y provocar una interrupción.

Id. de aplicación de la entidad de servicio

Un inquilino de Microsoft Entra proporciona a cada aplicación registrada una entidad de servicio. La entidad de servicio actúa como identificador de aplicación, que se utiliza durante la configuración de la autorización para acceder a otros recursos de Azure mediante control de acceso basado en roles (RBAC) de Azure.

Key Vault es una aplicación de Microsoft que previamente se ha registrado en todos los inquilinos de Microsoft Entra. Key Vault está registrado con el mismo identificador de aplicación en cada nube de Azure.

Inquilinos Nube Identificador de aplicación
Microsoft Entra ID Azure Government 7e7c393b-45d0-48b1-a35e-2905ddf8183c
Microsoft Entra ID Pública de Azure cfa8b339-82a2-471a-a3c9-0fc0be7a4093
Otros Any cfa8b339-82a2-471a-a3c9-0fc0be7a4093

Requisitos previos

Para completar esta guía, antes debe completar los pasos siguientes:

Administración de las claves de cuenta de almacenamiento

Conexión a la cuenta de Azure

Autentique la sesión de la CLI de Azure mediante los comandos az login.

az login

Proporcionar a Key Vault acceso a la cuenta de almacenamiento

Use el comando de la CLI de Azure az role assignment create para proporcionar acceso a Key Vault a la cuenta de almacenamiento. Proporcione al comando los siguientes valores de parámetro:

  • --role: Pase el rol de Azure "Rol de servicio del operador de claves de cuentas de almacenamiento". Este rol limita el ámbito de acceso a la cuenta de almacenamiento. Si se trata de una cuenta de almacenamiento clásica, pase el "Rol de servicio de operador de claves de cuentas de almacenamiento clásicas".
  • --assignee: pase el valor "https://vault.azure.net"", que es la URL de Key Vault en la nube pública de Azure. (Para la nube de Azure Government, use "--assignee-object-id" en su lugar; consulte Id. de aplicación de la entidad de servicio).
  • --scope: Pase el identificador del recurso de la cuenta de almacenamiento, que tiene el formato /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>. Busque el identificador de la suscripción mediante el comando az account list de la CLI de Azure. Busque el nombre y el grupo de recursos de la cuenta de almacenamiento mediante el comando az storage account list de la CLI de Azure.
az role assignment create --role "Storage Account Key Operator Service Role" --assignee "https://vault.azure.net" --scope "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

Concesión del permiso de cuenta de usuario a las cuentas de almacenamiento administradas

Use el cmdlet az keyvault-set-policy de la CLI de Azure para actualizar la directiva de acceso de Key Vault y conceder permisos de cuenta de almacenamiento a su cuenta de usuario.

# Give your user principal access to all storage account permissions, on your Key Vault instance

az keyvault set-policy --name <YourKeyVaultName> --upn user@domain.com --storage-permissions get list delete set update regeneratekey getsas listsas deletesas setsas recover backup restore purge

Los permisos para las cuentas de almacenamiento no están disponibles en la página "Directivas de acceso" de la cuenta de almacenamiento en Azure Portal.

Crear una cuenta de almacenamiento administrada de Key Vault

Cree una cuenta de almacenamiento administrada de Key Vault mediante el comando de la CLI de Azure az keyvault storage. Establezca un período de regeneración de 30 días. Cuando sea el momento de girar, KeyVault regenera la clave que no está activa y, después, establece la clave recién creada como activa. Solo una de las claves se usa para emitir tokens de SAS en cualquier momento, es decir, la clave activa. Proporcione al comando los siguientes valores de parámetro:

  • --vault-name: Pase el nombre del almacén de claves. Para buscar el nombre del almacén de claves, use el comando de la CLI de Azure az keyvault list.
  • -n: Pase el nombre de la cuenta de almacenamiento. Para buscar el nombre de la cuenta de almacenamiento, use el comando de la CLI de Azure az storage account list.
  • --resource-id: Pase el identificador del recurso de la cuenta de almacenamiento, que tiene el formato /subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>. Busque el identificador de la suscripción mediante el comando az account list de la CLI de Azure. Busque el nombre y el grupo de recursos de la cuenta de almacenamiento mediante el comando az storage account list de la CLI de Azure.
az keyvault storage add --vault-name <YourKeyVaultName> -n <YourStorageAccountName> --active-key-name key1 --auto-regenerate-key --regeneration-period P30D --resource-id "/subscriptions/<subscriptionID>/resourceGroups/<StorageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<YourStorageAccountName>"

Tokens de firma de acceso compartido

También puede pedir a Key Vault que genere tokens de firma de acceso compartido. Una firma de acceso compartido ofrece acceso delegado a recursos en la cuenta de almacenamiento. Puede conceder a los clientes acceso a los recursos de su cuenta de almacenamiento sin compartir las claves de la cuenta. Una firma de acceso compartido le proporciona una forma segura de compartir los recursos de almacenamiento sin poner en peligro las claves de cuenta.

Los comandos de esta sección completan las acciones siguientes:

  • Establecer una definición de firma de acceso compartido de cuenta <YourSASDefinitionName>. La definición se establece en una cuenta de almacenamiento administrada de Key Vault <YourStorageAccountName> en el almacén de claves <YourKeyVaultName>.
  • Establecer una definición de firma de acceso compartido de almacenamiento administrado de Key Vault en el almacén. La definición tiene el URI de plantilla del token de firma de acceso compartido que se creó. La definición tiene el tipo de firma de acceso compartido account y es válido durante N días.
  • Compruebe que la firma de acceso compartido se haya guardado en el almacén de claves como secreto.

Definir una plantilla de definición de firma de acceso compartido

Key Vault usa la plantilla de definición de SAS a fin de generar tokens para las aplicaciones cliente.

Ejemplo de plantilla de definición de SAS:

"sv=2018-03-28&ss=bfqt&srt=sco&sp=rw&spr=https"

La plantilla de definición de SAS se pasará al parámetro --template-uri en el paso siguiente.

Parámetros SAS de cuenta necesarios en la plantilla de definición de SAS para Key Vault

Parámetro de consulta SAS Descripción
SignedVersion (sv) Necesario. Especifica la versión del servicio de almacenamiento firmado que se va a usar para autorizar las solicitudes realizadas con esta SAS de cuenta. Debe establecerse en la versión del 5 de abril de 2015 o una posterior. Key Vault no admite versiones posteriores a la del 28 de marzo de 2018
SignedServices (ss) Necesario. Especifica los servicios firmados accesibles con la SAS de la cuenta. Los valores posibles son:

- Blob (b)
- Queue (q)
- Table (t)
- File (f)

Puede combinar valores para proporcionar acceso a más de un servicio. Por ejemplo, ss=bf especifica el acceso a los puntos de conexión de Blob y File.
SignedResourceTypes (srt) Necesario. Especifica los tipos de recursos firmados a los que se puede acceder con la SAS de cuenta.

- Servicio (s): acceso a las API de nivel de servicio (por ejemplo, Get/Set Service Properties, Get Service Stats, List Containers/Queues/Tables/Shares)
- Contenedor (c): acceso a las API de nivel de contenedor (por ejemplo, Create/Delete Container, Create/Delete Queue, Create/Delete Table, Create/Delete Share, List Blobs/Files and Directories)
- Objeto (o): acceso a las API de nivel de objeto para blobs, mensajes en cola, entidades de tabla y archivos (por ejemplo, Put Blob, Query Entity, Get Messages, Create File, etc.)

Puede combinar valores para proporcionar acceso a más de un tipo de recurso. Por ejemplo, srt=sc especifica el acceso a los recursos de servicio y contenedor.
SignedPermission (sp) Necesario. Especifica los permisos firmados para la SAS de cuenta. Los permisos solo son válidos si coinciden con el tipo de recurso firmado especificado; de lo contrario, se ignoran.

- Lectura (r): válido para todos los tipos de recursos firmados (Servicio, Contenedor y Objeto). Permite permisos de lectura para el tipo de recurso especificado.
- Escritura (w): válido para todos los tipos de recursos firmados (Servicio, Contenedor y Objeto). Admite permisos de escritura para el tipo de recurso especificado.
- Eliminación (d): válido para los tipos de recursos de contenedor y objeto, excepto para los mensajes de la cola.
- Eliminación permanente (y): válido solo para el tipo de recurso de objeto de Blob.
- Lista (l): válido solo para los tipos de recursos de servicio y contenedor.
- Adición (a): válido solo para los tipos de recursos de objeto siguientes: mensajes de cola, entidades de tabla y blobs en anexos.
- Creación (c): válido solo para los tipos de recursos de objeto siguientes: blobs y archivos. Los usuarios pueden crear blobs o archivos, pero no pueden sobrescribir los archivos o blobs existentes.
- Actualización (u): válido solo para los tipos de recursos de objeto siguientes: mensajes de cola y entidades de tabla.
- Proceso (p): válido solo para los tipos de recursos de objeto siguientes: mensajes de cola.
- Etiqueta (t): válido solo para el tipo de recurso de objeto siguiente: blobs. Permite operaciones de etiquetas de blob.
- Filtro (f): válido solo para el tipo de recurso de objeto siguiente: blob. Permite el filtrado por etiqueta de blob.
- Establecimiento de directiva de inmutabilidad (i): válido solo para el tipo de recurso de objeto siguiente: blob. Permite establecer o eliminar la directiva de inmutabilidad y la suspensión legal en un blob.
SignedProtocol (spr) Opcional. Especifica el protocolo que se permite para una solicitud realizada con la SAS de cuenta. Los valores posibles son tanto HTTPS como HTTP (https,http) o solo HTTPS (https). El valor predeterminado es https,http.

HTTP solo no es un valor permitido.

Para obtener más información sobre la SAS de cuenta, consulte Creación de una SAS de cuenta.

Nota:

Key Vault omite parámetros de duración como "Expiración firmada", "Inicio firmado" y parámetros introducidos después de la versión del 28 de marzo de 2018

Establecimiento de la definición de firma de acceso compartido en Key Vault

Use el comando az keyvault storage sas-definition create de la CLI de Azure para pasar la plantilla de definición de SAS del paso anterior al parámetro --template-uri a fin de crear una definición de firma de acceso compartido. Puede proporcionar el nombre que elija al parámetro -n.

az keyvault storage sas-definition create --vault-name <YourKeyVaultName> --account-name <YourStorageAccountName> -n <YourSASDefinitionName> --validity-period P2D --sas-type account --template-uri <sasDefinitionTemplate>

Comprobación de la definición de firma de acceso compartido

Puede comprobar que la definición de la firma de acceso compartido se ha almacenado en el almacén de claves mediante el comando az keyvault storage sas-definition show de la CLI de Azure.

Ahora puede usar el comando az keyvault storage sas-definition show y la propiedad id para ver el contenido del secreto.

az keyvault storage sas-definition show --id https://<YourKeyVaultName>.vault.azure.net/storage/<YourStorageAccountName>/sas/<YourSASDefinitionName>

Pasos siguientes