Tutorial: Armazenamento confiável dos Serviços de Mídia

Logotipo dos Serviços de Mídia v3


Aviso

Os Serviços de Mídia do Azure serão desativados em 30 de junho de 2024. Para obter mais informações, consulte o Guia de desativação do AMS.

Neste tutorial, você aprenderá:

  • Como habilitar o armazenamento confiável nos Serviços de Mídia do Azure
  • Como usar as Identidades Gerenciadas para o armazenamento confiável
  • Como conceder aos Serviços do Azure acesso a uma conta de armazenamento ao usar um controle de acesso à rede, como um firewall ou uma VPN

Com a API 2020-05-01, você pode habilitar o armazenamento confiável associando uma Identidade Gerenciada a uma conta de Serviços de Mídia.

Observação

O armazenamento confiável só está disponível na API e, no momento, não está habilitado no portal do Azure.

Os Serviços de Mídia podem acessar automaticamente a sua conta de armazenamento usando a autenticação do sistema. Os Serviços de Mídia validam se o usuário que está adicionando a associação tem acesso à conta de armazenamento com o RBAC do Azure Resource Manager.

Uso de contas de armazenamento entre assinaturas

Observação

Quando os Serviços de Mídia estão configurados para usar a Identidade Gerenciada para acessar o armazenamento, eles podem usar qualquer conta de armazenamento que a Identidade Gerenciada possa acessar.

Ao usar a autenticação do sistema para armazenamento, a conta de armazenamento deve estar na mesma assinatura que a conta dos Serviços de Mídia. Use contas de armazenamento na mesma região que a conta dos Serviços de Mídia para evitar custos adicionais da saída de dados.

Para ambos os tipos de autenticação, a entidade de segurança que cria ou atualiza a conta dos Serviços de Mídia deve ter a permissão 'Microsoft.Storage/storageAccounts/listkeys/action' para a conta de armazenamento.

Visão geral

Importante

Use a API 2020-05-01 em todas as solicitações para os Serviços de Mídia.

Estas são as etapas gerais para criar um armazenamento confiável para os Serviços de Mídia:

  1. Crie um grupos de recursos.
  2. Criar uma conta de armazenamento.
  3. Pesquise a conta de armazenamento até que ela esteja pronta. Quando a conta de armazenamento estiver pronta, a solicitação retornará a ID da entidade de serviço.
  4. Localize a ID da função Colaborador de Dados do Blob de Armazenamento.
  5. Chame o provedor de autorização e adicione uma atribuição de função.
  6. Atualize a conta dos serviços de mídia para se autenticar à conta de armazenamento usando a Identidade Gerenciada.
  7. Exclua os recursos se você não quiser continuar a usá-los nem ser cobrado por eles.

Pré-requisitos

É necessária uma assinatura do Azure para começar. Se você não tiver uma assinatura do Azure, crie uma conta de avaliação gratuita.

Obter a ID de locatário e a ID de assinatura

Se você não sabe como obter a ID de locatário e a ID de assinatura, confira Como localizar a ID da assinatura e a ID de locatário.

Criar uma entidade de serviço e um segredo

Se você não souber como criar uma entidade de serviço e um segredo, confira Obter credenciais para acessar a API dos Serviços de Mídia.

Usar um cliente REST

Esse script destina-se ao uso com um cliente REST, como o que está disponível nas extensões do Visual Studio Code. Adapte-o para o seu ambiente de desenvolvimento.

Definir variáveis iniciais

Esta parte do script foi projetada para uso em um cliente REST. Você pode usar as variáveis de modo diferente no seu ambiente de desenvolvimento.

### 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)

Obter um token para o 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

Obter um token para a API do Graph

Esta parte do script foi projetada para uso em um cliente REST. Você pode usar as variáveis de modo diferente no seu ambiente de desenvolvimento.

// @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

Obter os detalhes da entidade de serviço

// @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}}

Armazenar a ID da entidade de serviço

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

Criar um grupo de recursos

// @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}}"
}

Criar Conta de Armazenamento

// @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": {
    }
}

Obter o status da conta de armazenamento

A conta de armazenamento levará algum tempo para ficar pronta, portanto esta solicitação pesquisa o status dela. Repita esta solicitação até que a conta de armazenamento esteja pronta.

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

Obter os detalhes da conta de armazenamento

Quando a conta de armazenamento estiver pronta, obtenha as propriedades da conta de armazenamento.

// @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}}

Obter um token para o 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

Criar uma conta dos Serviços de Mídia com uma identidade gerenciada atribuída pelo sistema

// @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}}"
}

Obter a definição da função de Dados de Blob de Armazenamento do armazenamento

// @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}}

Definir a atribuição de função do armazenamento

A atribuição de função diz que a entidade de serviço da conta dos Serviços de Mídia tem a função de armazenamento Colaborador de Dados de Blob de Armazenamento. Isso pode demorar um pouco e é importante aguardar ou a conta dos Serviços de Mídia não será configurada corretamente.

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}}"
  }
}

Conceder o acesso de bypass da Identidade Gerenciada à conta de armazenamento

Essa ação altera o acesso da identidade gerenciada pelo sistema para a Identidade Gerenciada. Dessa forma, a conta de armazenamento pode acessar a conta de armazenamento por meio de um firewall, pois os serviços do Azure podem acessar a conta de armazenamento independentemente das regras de acesso de IP (ACLs).

Novamente, aguarde até que a função tenha sido atribuída na conta de armazenamento ou a conta dos Serviços de Mídia será configurada incorretamente.

// @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"
      }
    }
}

Atualizar a conta dos Serviços de Mídia para usar a Identidade Gerenciada

Essa solicitação pode precisar ser repetida algumas vezes, uma vez que a atribuição da função de armazenamento pode levar alguns minutos para ser propagada.

// @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}}"
}

Testar o acesso

Teste o acesso criando um ativo na conta de armazenamento.

// @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

{
}

Excluir recursos

Se você não quiser manter os recursos que criou e continuar a ser cobrado por eles, exclua-os.

### 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}}

Obter ajuda e suporte

Você pode entrar em contato com os Serviços de Mídia com dúvidas ou seguir nossas atualizações por um dos seguintes métodos: