Tutorial: Uso de una clave de Key Vault para cifrar los datos en una cuenta de Media Services

Logotipo de Media Services v3


Advertencia

Azure Media Services se retirará el 30 de junio de 2024. Para obtener más información, consulte la Guía de retirada de AMS.

Nota

Las identidades administradas solo están disponibles para las cuentas de Media Services creadas mediante la API v3. Si usa la API v2 y quiere usar identidades administradas, migre de v2 a v3: Introducción a la migración de Media Services v2 a v3.

Si desea que Media Services cifre los datos con una clave de la instancia de Key Vault, se debe conceder acceso a la cuenta de Media Services al almacén de claves. Siga los pasos que se indican a continuación para crear una identidad administrada para la cuenta de Media Services y conceder a esta identidad acceso al almacén de claves mediante la CLI de Media Services.

La cuenta de Media Services usa Key Vault con una identidad administrada.

En este tutorial se utiliza la API de Media Services 2020-05-01.

Inicio de sesión en Azure

Para usar cualquiera de los comandos de este artículo, primero debe haber iniciado sesión en la suscripción que quiere usar.

Inicie sesión en Azure. Cuando use este comando, se le pedirá la suscripción que desea usar.

az login

Definir la suscripción

Utilice este comando para establecer la suscripción con la que quiere trabajar.

Establecimiento de la suscripción de Azure con la CLI

En el siguiente comando, proporcione el identificador de suscripción de Azure que quiere usar para la cuenta de Media Services.

az account set --subscription <subscriptionName>

Nombres de recurso

Antes de empezar, decida los nombres de los recursos que va a crear. Estos deben identificarse fácilmente como un conjunto, especialmente si no planea usarlos una vez que haya terminado las pruebas. Las reglas de nomenclatura son diferentes para muchos tipos de recursos, por lo que es mejor mantener las minúsculas. Por ejemplo, "mediatest1rg" como nombre del grupo de recursos y "mediatest1stor" como nombre de la cuenta de almacenamiento. Use los mismos nombres en cada paso de este artículo.

Verá que se hace referencia a ellos en los comandos siguientes. Los nombres de los recursos que necesitará son:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • myKeyVault
  • myKey
  • ubicación

Nota

Los guiones anteriores solo se usan para separar las palabras de guía. Debido a la incoherencia de asignar nombres a los recursos en los servicios de Azure, no use guiones al asignar un nombre a los recursos. Además, no cree el nombre de la región. Azure es quien lo determina.

Enumeración de regiones de Azure

Si no está seguro del nombre real de la región que se va a usar, utilice este comando para obtener una lista:

Use este comando para enumerar las regiones disponibles para la cuenta.

az account list-locations --query "[].{DisplayName:displayName, Name:name}" -o table

Secuencia

Cada uno de los pasos siguientes se realiza en un orden determinado porque uno o varios valores de las respuestas JSON se usan en el paso siguiente de la secuencia.

Creación de una cuenta de Storage

La cuenta de Media Services que va a crear debe tener una cuenta de almacenamiento asociada. Cree primero la cuenta de almacenamiento para la cuenta de Media Services. Usará your-storage-account-name en los pasos posteriores.

Creación de una cuenta de Azure Storage con la CLI

Use los siguientes comandos para crear una cuenta de Azure Storage.

Para crear una cuenta de almacenamiento, primero debe crear un grupo de recursos dentro de una ubicación.

Para enumerar las ubicaciones disponibles, use el siguiente comando:

Enumeración de ubicaciones disponibles con la CLI

Para enumerar las ubicaciones disponibles, use el siguiente comando:

az account list-locations

Creación de un grupo de recursos con la CLI

Para crear un grupo de recursos, ejecute el comando siguiente:

az group create -n <resourceGroupName> --location chooseLocation

Elección de una SKU

También debe elegir una SKU para la cuenta de almacenamiento. Puede enumerar cuentas de almacenamiento.

Elija una SKU de la lista siguiente: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Cambie myStorageAccount por un nombre único con una longitud inferior a 24 caracteres.
  • Cambie chooseLocation a la región desde la que desea trabajar.
  • Cambie chooseSKU a la SKU que prefiera.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Creación de una cuenta de Media Services con una entidad de servicio (identidad administrada)

Ahora cree la cuenta de Media Services con una entidad de servicio, también conocida como identidad administrada.

Importante

Es importante que recuerde usar la marca --mi en el comando. De lo contrario, no podrá encontrar el elemento principalId en un paso posterior.

El siguiente comando de la CLI de Azure crea una nueva cuenta de Media Services. Reemplace los siguientes valores: your-media-services-account-nameyour-storage-account-name y your-resource-group-name por los nombres que quiere usar. El comando supone que ya ha creado un grupo de recursos y una cuenta de almacenamiento.

Proporciona a la cuenta de Media Services una identidad administrada asignada por el sistema con la marca --mi-system-assigned.


az ams account create --name <your-media-services-account-name> --resource-group <your-resource-group-name> --mi-system-assigned --storage-account <your-storage-account-name>

Ejemplo de respuesta JSON:

{
  "encryption": {
    "keyVaultProperties": null,
    "type": "SystemKey"
  },
  "id": "/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/your-resource-group/providers/Microsoft.Media/mediaservices/your-media-services-account-name",
  "identity": {
    "principalId": "00000000-0000-0000-0000-00000000",
    "tenantId": "00000000-0000-0000-0000-00000000",
    "type": "SystemAssigned"
  },
  "location": "your-region",
  "mediaServiceId": "00000000-0000-0000-0000-00000000",
  "name": "your-media-services-account-name",
  "resourceGroup": "your-resource-group",
  "storageAccounts": [
    {
      "id": "/subscriptions/00000000-0000-0000-0000-00000000/resourceGroups/mediatest1rg/providers/Microsoft.Storage/storageAccounts/your-storage-account-name",
      "resourceGroup": "your-resource-group",
      "type": "Primary"
    }
  ],
  "storageAuthentication": "System",
  "systemData": {
    "createdAt": "2021-05-14T21:25:12.3492071Z",
    "createdBy": "you@example.com",
    "createdByType": "User",
    "lastModifiedAt": "2021-05-14T21:25:12.3492071Z",
    "lastModifiedBy": "you@example.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "type": "Microsoft.Media/mediaservices"
}

Creación de un almacén de claves

Cree el almacén de claves. El almacén de claves se usa para cifrar los datos multimedia. Usará your-keyvault-name para crear la clave y para pasos posteriores.

Use los siguientes comandos para crear una instancia de Key Vault y una clave. Cambie your-resource-group-name, your-keyvault-name y your-key-name por los valores que desea usar. El comando supone que ya ha creado un grupo de recursos.

Nota

El elemento --bypass AzureServices permite que Media Services (y otros servicios de Azure) accedan al Key Vault cuando normalmente las ACL de red de Key Vault bloquearían ese acceso. Si --enable-purge-protection no está establecido, no podrá usar la clave.

Creación del almacén de claves


az keyvault create --resource-group <your-resource-group-name> --bypass AzureServices --enable-purge-protection --name <your-keyvault-name>

Ejemplo de respuesta JSON:

{
  "id": "/subscriptions/the-subscription-id/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "the-tenant-id"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "the-tenant-id",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

Creación de la clave

az keyvault key create --kty RSA --name your-key-name --vault-name your-keyvault-name

Ejemplo de respuesta JSON:


{
  "attributes": {
    "created": "2021-05-12T22:41:29+00:00",
    "enabled": true,
    "expires": null,
    "notBefore": null,
    "recoveryLevel": "Recoverable",
    "updated": "2021-05-12T22:41:29+00:00"
  },
  "key": {
    "crv": null,
    "d": null,
    "dp": null,
    "dq": null,
    "e": "AQAB",
    "k": null,
    "keyOps": [
      "encrypt",
      "decrypt",
      "sign",
      "verify",
      "wrapKey",
      "unwrapKey"
    ],
    "kid": "https://your-keyvault-name.vault.azure.net/keys/your-key-name/your-subsription-id",
    "kty": "RSA",
    "n": "THISISTHEKEY51V9thvU7KsBUo/q1mEOcuxqt0qUcnx0IRO9YCL32fPjD/nnS8hKS5qkgUKfe2NRAtzVQ+elQAha65l7OsHu+TXmH/n/RPCgstpqSdCfiUR1JTmFYFRWdxCPwoKJMYaqlCEhn2Dkon3StTN0Id0sjRSA/YOLjgWU7YnVbntg5/048HgcTKn3PCWCuJc+P8hI/8Os5EAIpun62PffYwPX0/NIA1PY8wIB+sYEY0zxVGwWrCu7VgCo9xeqbMQEq5OenYmYpc+cjLozU/ohGhfWTpQU8d7fFypTHQraENDOFKEY",
    "p": null,
    "q": null,
    "qi": null,
    "t": null,
    "x": null,
    "y": null
  },
  "managed": null,
  "tags": null
}

Concesión de acceso a la identidad administrada asignada por el sistema de Media Services al almacén de claves

Conceda acceso a la identidad administrada de Media Services al almacén de claves. Hay dos comandos:

Obtener (mostrar) la identidad administrada de la cuenta de Media Services

El primer comando muestra la identidad administrada de la cuenta de Media Services, que es el valor de principalId enumerado en el código JSON devuelto por el comando.

Este comando muestra todas las propiedades de una cuenta de Media Services.

az ams account show --name <your-media-services-account-name> --resource-group <your-resource-group>

Nota

Si ha asignado roles de acceso a la cuenta de Media Services, esta línea devolverá "storageAuthentication": "ManagedIdentity".

Ejemplo de respuesta JSON:

{
  "encryption": {
    "keyVaultProperties": null,
    "type": "SystemKey"
  },
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.Media/mediaservices/your-media-services-account",
  "identity": {
    "principalId": "00000000-0000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "type": "SystemAssigned"  //Type will show "Managed Identity" if you have assigned a role to the Media Services account.
  },
  "location": "your-region",
  "mediaServiceId": "00000000-0000-0000-0000-000000000000",
  "name": "your-media-services-account",
  "resourceGroup": "your-resource-group-name",
  "storageAccounts": [
    {
      "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.Storage/storageAccounts/your-storage-account-name",
      "resourceGroup": "your-resource-group-name",
      "type": "Primary"
    }
  ],
  "storageAuthentication": "System", //If you have assigned access roles to the account, this line will return storageAuthentication": "ManagedIdentity"
  "systemData": {
    "createdAt": "2021-05-14T21:25:12.3492071Z",
    "createdBy": "you@example.com",
    "createdByType": "User",
    "lastModifiedAt": "2021-05-14T21:25:12.3492071Z",
    "lastModifiedBy": "you@example.com",
    "lastModifiedByType": "User"
  },
  "tags": null,
  "type": "Microsoft.Media/mediaservices"
}

Establecimiento de la directiva de Key Vault

El segundo comando concede al identificador de la entidad de seguridad acceso al almacén de claves. Establezca object-id en el valor de principalId que obtuvo en el paso anterior.

Para usar este comando, debe incluir el valor de principalId de Media Services como valor de object-id. Si aún no lo ha hecho, use az ams account show --name <your-media-services-account-name> --resource-group <your-resource-group> para obtener este identificador.

az keyvault set-policy --name <your-keyvault-name> --object-id <principalId> --key-permissions decrypt encrypt get list unwrapKey wrapKey

Ejemplo de respuesta JSON:

{
  "id": "/subscriptions/00000000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "00000000-0000-0000-000000000000"
      },
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": null,
          "keys": [
            "encrypt",
            "get",
            "list",
            "wrapKey",
            "decrypt",
            "unwrapKey"
          ],
          "secrets": null,
          "storage": null
        },
        "tenantId": "00000000-0000-0000-000000000000"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "00000000-0000-0000-000000000000",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

Establecimiento de Media Services para usar la clave de Key Vault

Establezca Media Services para usar la clave que ha creado. El valor de la propiedad key-identifier procede de la salida cuando se creó la clave. Este comando puede producir un error debido al tiempo que se tardan en propagar los cambios de control de acceso. Si esto sucede, vuelva a intentarlo después de unos minutos.

Para usar este comando, ya debe haber creado un almacén de claves y una clave.

az ams account encryption set --account-name <your-media-services-account-name> --resource-group <your-resource-group> --key-type CustomerKey --key-identifier https://<your-keyvault-name>.vault.azure.net/keys/<your-key-name>

Ejemplo de respuesta JSON:

{
  "id": "/subscriptions/00000000-0000-0000-000000000000/resourceGroups/your-resource-group-name/providers/Microsoft.KeyVault/vaults/your-keyvault-name",
  "location": "your-region",
  "name": "your-keyvault-name",
  "properties": {
    "accessPolicies": [
      {
        "applicationId": null,
        "objectId": "00000000-0000-0000-000000000000",
        "permissions": {
          "certificates": [
            "get",
            "list",
            "delete",
            "create",
            "import",
            "update",
            "managecontacts",
            "getissuers",
            "listissuers",
            "setissuers",
            "deleteissuers",
            "manageissuers",
            "recover"
          ],
          "keys": [
            "get",
            "create",
            "delete",
            "list",
            "update",
            "import",
            "backup",
            "restore",
            "recover"
          ],
          "secrets": [
            "get",
            "list",
            "set",
            "delete",
            "backup",
            "restore",
            "recover"
          ],
          "storage": [
            "get",
            "list",
            "delete",
            "set",
            "update",
            "regeneratekey",
            "setsas",
            "listsas",
            "getsas",
            "deletesas"
          ]
        },
        "tenantId": "the-tenant-id"
      },
      {
        "applicationId": null,
        "objectId": "the-media-services-account-id",
        "permissions": {
          "certificates": null,
          "keys": [
            "encrypt",
            "get",
            "list",
            "wrapKey",
            "decrypt",
            "unwrapKey"
          ],
          "secrets": null,
          "storage": null
        },
        "tenantId": "the-tenant-id"
      }
    ],
    "createMode": null,
    "enablePurgeProtection": true,
    "enableRbacAuthorization": null,
    "enableSoftDelete": true,
    "enabledForDeployment": false,
    "enabledForDiskEncryption": null,
    "enabledForTemplateDeployment": null,
    "networkAcls": null,
    "privateEndpointConnections": null,
    "provisioningState": "Succeeded",
    "sku": {
      "name": "standard"
    },
    "softDeleteRetentionInDays": 90,
    "tenantId": "the-tenant-id",
    "vaultUri": "https://your-keyvault-name.vault.azure.net/"
  },
  "resourceGroup": "your-resource-group-name",
  "tags": {},
  "type": "Microsoft.KeyVault/vaults"
}

Validación

Para comprobar que la cuenta está cifrada mediante una clave administrada por el cliente, vea las propiedades de cifrado de la cuenta:

Visualización del cifrado de la cuenta con la CLI

Para más información sobre este comando, consulte la referencia de la CLI de Media Services.

La propiedad type debe mostrar CustomerKey y currentKeyIdentifier se debe establecer en la ruta de acceso de una clave del almacén de claves del cliente.

Limpieza de recursos

Si no tiene previsto usar los recursos que ha creado, elimine el grupo de recursos.

Eliminación de un grupo de recursos con la CLI

az group delete --name <your-resource-group-name>

Obtener ayuda y soporte técnico

Puede ponerse en contacto con Media Services con preguntas o seguir nuestras actualizaciones mediante uno de los métodos siguientes: