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


Руководство. Доверенное хранилище Служб мультимедиа

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


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

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

В этом учебнике вы узнаете следующее:

  • как включить доверенное хранилище для Служб мультимедиа Azure;
  • как использовать управляемые удостоверения для доверенного хранилища;
  • как предоставить службам Azure доступ к учетной записи хранения при использовании таких средств управления доступом к сети, как брандмауэр или VPN.

С помощью API 2020-05-01, можно включить доверенное хранилище, связав управляемое удостоверение с учетной записью Служб мультимедиа.

Примечание

Доверенное хранилище доступно только в API и в настоящее время не включено на портале Azure.

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

Использование учетных записей хранения для нескольких подписок

Примечание

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

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

Для обоих типов проверки подлинности субъект, создающий или обновляющий учетную запись Служб мультимедиа, должен иметь разрешение Microsoft.Storage/storageAccounts/listkeys/action для учетной записи хранения.

Обзор

Важно!

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

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

  1. Создайте группу ресурсов.
  2. Создайте учетную запись хранения.
  3. Опрашивайте учетную запись хранения, пока она не будет готова. Когда учетная запись хранения будет готова, запрос вернет идентификатор субъекта-службы.
  4. Найдите идентификатор роли Участник данных BLOB-объектов хранилища.
  5. Вызовите поставщик авторизации и добавьте назначение роли.
  6. Обновите учетную запись Служб мультимедиа для аутентификации в учетной записи хранения с помощью управляемого удостоверения.
  7. Удалите ресурсы, если вы не хотите продолжать их использовать и оплачивать.

Предварительные условия

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

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

Если вы не знаете, как получить идентификаторы клиента и подписки, см. статью Как найти идентификатор подписки и клиента.

Создание субъекта-службы и секрета

Если вы не знаете, как создать субъект-службу и секрет, см. статью Получение учетных данных для доступа к API Служб мультимедиа.

Использование клиента REST

Этот скрипт предназначен для использования с клиентом REST, например, с клиентом, доступным в расширениях Visual Studio Code. Адаптируйте свою среду разработки.

Установка начальных переменных

Эта часть скрипта предназначена для использования в клиенте REST. Переменные можно по-разному использовать в среде разработки.

### AAD details
@tenantId = your tenant ID
@servicePrincipalId = the service principal ID
@servicePrincipalSecret = the service principal secret

### AAD resources
@armResource = https%3A%2F%2Fmanagement.core.windows.net%2F
@graphResource = https%3A%2F%2Fgraph.windows.net%2F
@storageResource = https%3A%2F%2Fstorage.azure.com%2F

### Service endpoints
@armEndpoint = management.azure.com
@graphEndpoint = graph.windows.net
@aadEndpoint = login.microsoftonline.com

### ARM details
@subscription = your subscription id
@resourceGroup = the resource group you'll be creating
@storageName = the name of the storage you'll be creating
@accountName = the name of the account you'll be creating
@resourceLocation = East US (or the location that works best for your region)

Получение маркера для Azure Resource Manager

// @name getArmToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{armResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

Получение маркера для API Graph

Эта часть скрипта предназначена для использования в клиенте REST. Переменные можно по-разному использовать в среде разработки.

// @name getGraphToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{graphResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

Получение сведений о субъекте-службе

// @name getServicePrincipals
GET https://{{graphEndpoint}}/{{tenantId}}/servicePrincipals?$filter=appId%20eq%20'{{servicePrincipalId}}'&api-version=1.6
x-ms-client-request-id: cae3e4f7-17a0-476a-a05a-0dab934ba959
Authorization:  Bearer {{getGraphToken.response.body.access_token}}

Хранение идентификатора субъекта-службы

@servicePrincipalObjectId = {{getServicePrincipals.response.body.value[0].objectId}}

Создание группы ресурсов

// @name createResourceGroup
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}
    ?api-version=2016-09-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "location": "{{resourceLocation}}"
}

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

// @name createStorageAccount
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "sku": {
    "name": "Standard_GRS"
    },
    "kind": "StorageV2",
    "location": "{{resourceLocation}}",
    "properties": {
    }
}

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

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

// @name getStorageAccountStatus
GET {{createStorageAccount.response.headers.Location}}
Authorization: Bearer {{getArmToken.response.body.access_token}}

Получение сведений об учетной записи хранения

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

// @name getStorageAccount
GET https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

Получение маркера для ARM

// @name getStorageToken
POST https://{{aadEndpoint}}/{{tenantId}}/oauth2/token
Accept: application/json
Content-Type: application/x-www-form-urlencoded

resource={{storageResource}}&client_id={{servicePrincipalId}}&client_secret={{servicePrincipalSecret}}&grant_type=client_credentials

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

// @name createMediaServicesAccount
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "identity": {
      "type": "SystemAssigned"
  },
  "properties": {
    "storageAccounts": [
      {
        "id": "{{getStorageAccountStatus.response.body.id}}"
      }
    ],
    "encryption": {
      "type": "SystemKey"
    }
  },
  "location": "{{resourceLocation}}"
}

Получение определения роли данных большого двоичного объекта хранилища

// @name getStorageBlobDataContributorRoleDefinition
GET https://management.azure.com/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20%27Storage%20Blob%20Data%20Contributor%27&api-version=2015-07-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

Установка назначения роли хранилища

Назначение роли говорит о том, что субъекту-службе для учетной записи Служб мультимедиа назначена роль хранилища Участник хранилища для больших двоичных объектов. Это может занять некоторое время. Важно дождаться завершения процесса, иначе учетная запись Служб мультимедиа не будет правильно настроена.

PUT https://management.azure.com/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleAssignments/{{$guid}}?api-version=2020-04-01-preview
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "properties": {
    "roleDefinitionId": "/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}/providers/Microsoft.Authorization/roleDefinitions/{{getStorageBlobDataContributorRoleDefinition.response.body.value[0].name}}",
    "principalId": "{{createMediaServicesAccount.response.body.identity.principalId}}"
  }
}

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

Это действие позволяет перевести доступ с использования удостоверения, управляемого системой, на использование управляемого удостоверения. Таким образом учетная запись хранения может получить доступ к учетной записи хранения через брандмауэр, так как службы Azure могут получить доступ к учетной записи хранения независимо от правил доступа по IP-адресам (ACL).

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

// @name setStorageAccountFirewall
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
    "sku": {
    "name": "Standard_GRS"
    },
    "kind": "StorageV2",
    "location": "{{resourceLocation}}",
    "properties": {
      "minimumTlsVersion": "TLS1_2",
      "networkAcls": {
        "bypass": "AzureServices",
        "virtualNetworkRules": [],
        "ipRules": [],
        "defaultAction": "Deny"
      }
    }
}

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

Возможно, потребуется повторить этот запрос несколько раз, так как распространение назначения роли хранилища может занять некоторое время.

// @name updateMediaServicesAccountWithManagedStorageAuth
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
  "identity": {
      "type": "SystemAssigned"
  },
  "properties": {
    "storageAccounts": [
      {
        "id": "{{getStorageAccountStatus.response.body.id}}"
      }
    ],
    "storageAuthentication": "ManagedIdentity",
    "encryption": {
      "type": "SystemKey"
    }
  },
  "location": "{{resourceLocation}}"
}

Проверка доступа

Проверьте доступ, создав ресурс в учетной записи хранения.

// @name createAsset
PUT https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}/assets/testasset{{index}}withoutmi?api-version=2018-07-01
Authorization: Bearer {{getArmToken.response.body.access_token}}
Content-Type: application/json; charset=utf-8

{
}

Удаление ресурсов

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

### Clean up the Storage account
DELETE https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Storage/storageAccounts/{{storageName}}
    ?api-version=2019-06-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

### Clean up the Media Services account
DELETE https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

### Clean up the Media Services account
GET https://{{armEndpoint}}/subscriptions/{{subscription}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Media/mediaservices/{{accountName}}?api-version=2020-05-01
Authorization: Bearer {{getArmToken.response.body.access_token}}

Справка и поддержка

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