Поделиться через


Руководство. Использование ключа Key Vault для шифрования данных в учетной записи служб мультимедиа

логотип служб мультимедиа версии 3


Предупреждение

Службы мультимедиа Azure будут прекращены 30 июня 2024 г. Дополнительные сведения см. в руководстве по выходу на пенсию AMS.

Заметка

Управляемые удостоверения доступны только для учетных записей служб мультимедиа, созданных с помощью API версии 3. Если вы используете API версии 2 и хотите использовать управляемые удостоверения, перейдите из версии 2 в версию 3 Миграция из служб мультимедиа версии 2 в введениеверсии 3.

Если вы хотите, чтобы службы мультимедиа шифруют данные с помощью ключа из Key Vault, учетная запись служб мультимедиа должна быть предоставлена доступ к Key Vault. Выполните приведенные ниже действия, чтобы создать управляемое удостоверение для учетной записи служб мультимедиа и предоставить этому удостоверению доступ к Key Vault с помощью интерфейса командной строки служб мультимедиа.

учетная запись служб мультимедиа использует Key Vault с управляемым удостоверением

В этом руководстве используется API служб мультимедиа 2020-05-01.

Вход в Azure

Чтобы использовать любую из команд в этой статье, сначала необходимо войти в подписку, которую вы хотите использовать.

Войдите в Azure. При использовании этой команды вам будет предложено использовать подписку.

az login

Настройка подписки

Используйте эту команду, чтобы задать подписку, с которой вы хотите работать.

Настройка подписки Azure с помощью интерфейса командной строки

В следующей команде укажите идентификатор подписки Azure, который вы хотите использовать для учетной записи служб мультимедиа.

az account set --subscription <subscriptionName>

Имена ресурсов

Прежде чем приступить к работе, определите имена создаваемых ресурсов. Они должны быть легко идентифицируются как набор, особенно если вы не планируете использовать их после завершения тестирования. Правила именования отличаются для многих типов ресурсов, поэтому рекомендуется придерживаться всего нижнего регистра. Например, mediatest1rg для имени группы ресурсов и mediatest1stor для имени учетной записи хранения. Используйте одинаковые имена для каждого шага в этой статье.

Эти имена отображаются в приведенных ниже командах. Имена необходимых ресурсов:

  • myRG
  • myStorageAccount
  • myAmsAccount
  • myKeyVault
  • myKey
  • местоположение

Заметка

Приведенные выше дефисы используются только для разделения слов руководства. Из-за несоответствия именования ресурсов в службах Azure не используйте дефисы при именовании ресурсов. Кроме того, вы не создаете имя региона. Имя региона определяется Azure.

Перечисление регионов Azure

Если вы не уверены в фактическом имени региона, используйте эту команду, чтобы получить список:

Используйте эту команду для перечисления регионов, доступных для вашей учетной записи.

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

Последовательность

Каждый из приведенных ниже шагов выполняется в определенном порядке, так как одно или несколько значений из ответов JSON используются на следующем шаге в последовательности.

Создание учетной записи хранения

Созданная учетная запись служб мультимедиа должна быть связана с ней учетной записью хранения. Сначала создайте учетную запись хранения для учетной записи служб мультимедиа. Для последующих шагов вы будете использовать your-storage-account-name.

Создание учетной записи хранения Azure с помощью интерфейса командной строки

Чтобы создать учетную запись хранения Azure, используйте следующие команды.

Чтобы создать учетную запись хранения, необходимо сначала создать группу ресурсов в расположении.

Чтобы получить список доступных расположений, используйте следующую команду:

Список доступных расположений с помощью интерфейса командной строки

Чтобы получить список доступных расположений, используйте следующую команду:

az account list-locations

Создание группы ресурсов с помощью интерфейса командной строки

Чтобы создать группу ресурсов, используйте следующую команду:

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

Выбор номера SKU

Кроме того, необходимо выбрать номер SKU для учетной записи хранения. Вы можете перечислить учетные записи хранения.

Выберите номер SKU из следующего списка: Standard_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_LRS, Premium_ZRS, Standard_GZRS, Standard_RAGZRS.

  • Измените myStorageAccount на уникальное имя с длиной менее 24 символов.
  • Измените chooseLocation в регион, в который вы хотите работать.
  • Измените chooseSKU на предпочитаемый номер SKU.
az storage account create -n <myStorageAccount> -g <resourceGroup>  --location <chooseLocation> --sku <chooseSKU>

Создание учетной записи служб мультимедиа с субъектом-службой (управляемым удостоверением)

Теперь создайте учетную запись служб мультимедиа с субъектом-службой, в противном случае называется управляемым удостоверением.

Важный

Важно, чтобы в команде использовался флаг --mi. В противном случае вы не сможете найти principalId для последующего шага.

Следующая команда Azure CLI создает новую учетную запись служб мультимедиа. Замените следующие значения: your-media-services-account-nameyour-storage-account-nameи your-resource-group-name именами, которые вы хотите использовать. Команда предполагает, что вы уже создали группу ресурсов и учетную запись хранения.

Она предоставляет учетной записи служб мультимедиа управляемое удостоверение, назначенное системой, с флагом --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>

Пример ответа 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"
}

Создание Хранилища ключей

Создайте Key Vault. Хранилище ключей используется для шифрования данных мультимедиа. Вы будете использовать your-keyvault-name для создания ключа и дальнейших действий.

Используйте следующие команды, чтобы создать Key Vault и ключ. Измените your-resource-group-name, your-keyvault-name и your-key-name значения, которые необходимо использовать. Команда предполагает, что вы уже создали группу ресурсов.

Заметка

--bypass AzureServices позволяет службам мультимедиа (и другим службам Azure) получить доступ к Key Vault, если этот доступ обычно блокируется сетевыми списками ACL Key Vault, --enable-purge-protection Если он не задан, вы не сможете использовать ключ.

Создание Key Vault


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

Пример ответа 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": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
        "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"
}

Создание ключа

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

Пример ответа 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
}

Предоставление управляемому удостоверению назначаемого системой мультимедиа доступа к Key Vault

Предоставьте управляемому удостоверению служб мультимедиа доступ к Key Vault. Существует две команды:

Получение (показать) управляемое удостоверение учетной записи служб мультимедиа

Первая команда ниже показывает управляемое удостоверение учетной записи служб мультимедиа, которая является principalId, указанной в JSON, возвращаемой командой.

Эта команда отображает все свойства учетной записи служб мультимедиа.

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

Заметка

Если у вас назначены роли доступа к учетной записи служб мультимедиа, эта строка вернет "storageAuthentication": "ManagedIdentity".

Пример ответа JSON:

{
  "encryption": {
    "keyVaultProperties": null,
    "type": "SystemKey"
  },
  "id": "/subscriptions/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/resourceGroups/your-resource-group-name/providers/Microsoft.Media/mediaservices/your-media-services-account",
  "identity": {
    "principalId": "ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0",
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "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/ffffffff-eeee-dddd-cccc-bbbbbbbbbbb0/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"
}

Настройка политики Key Vault

Вторая команда предоставляет идентификатор субъекта к Key Vault. Задайте object-id значение principalId, полученное на предыдущем шаге.

Чтобы использовать эту команду, необходимо включить principalId служб мультимедиа в качестве object-id. Если вы еще не сделали этого, используйте az ams account show --name <your-media-services-account-name> --resource-group <your-resource-group> для получения этого идентификатора.

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

Пример ответа 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"
}

Настройка служб мультимедиа для использования ключа из Key Vault

Задайте службам мультимедиа использование созданного ключа. Значение свойства key-identifier происходит из выходных данных при создании ключа. Эта команда может завершиться ошибкой из-за времени распространения изменений управления доступом. Если это произойдет, повторите попытку через несколько минут.

Чтобы использовать эту команду, необходимо уже создать Key Vault и ключ.

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>

Пример ответа 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"
}

Ратификация

Чтобы убедиться, что учетная запись зашифрована с помощью управляемого клиентом ключа, просмотрите свойства шифрования учетной записи:

Отображение шифрования учетной записи с помощью интерфейса командной строки

Дополнительные сведения об этой команде см. всправочнике по интерфейсу командной строки служб мультимедиа .

Свойство type должно отображать CustomerKey, а currentKeyIdentifier следует задать путь ключа в Key Vault клиента.

Очистка ресурсов

Если вы не планируете использовать созданные ресурсы, удалите группу ресурсов.

Удаление группы ресурсов с помощью интерфейса командной строки

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

Получение справки и поддержки

Вы можете обратиться к службам мультимедиа с вопросами или следовать нашим обновлениям одним из следующих методов: