Share via


Tutorial: Armazenamento fidedigno dos Serviços de Multimédia

Logótipo dos Serviços de Multimédia v3


Aviso

Os Serviços de Multimédia do Azure serão descontinuados a 30 de junho de 2024. Para obter mais informações, veja o Guia de Extinção do AMS.

Neste tutorial, ficará a saber:

  • Como ativar o armazenamento fidedigno para os Serviços de Multimédia do Azure
  • Como utilizar identidades geridas para armazenamento fidedigno
  • Como conceder aos Serviços do Azure acesso a uma conta de armazenamento ao utilizar o controlo de acesso à rede, como uma firewall ou uma VPN

Com a API 2020-05-01, pode ativar o armazenamento fidedigno ao associar uma Identidade Gerida a uma conta dos Serviços de Multimédia.

Nota

O armazenamento fidedigno só está disponível na API e não está atualmente ativado no portal do Azure.

Os Serviços de Multimédia podem aceder automaticamente à sua conta de armazenamento através da autenticação do sistema. Os Serviços de Multimédia validam que o utilizador que está a adicionar a associação tem acesso à conta de armazenamento com o RBAC do Azure Resource Manager.

Utilização de contas de armazenamento entre subscrições

Nota

Quando os Serviços de Multimédia estão configurados para utilizar a Identidade Gerida para aceder ao armazenamento, os Serviços de Multimédia podem utilizar qualquer conta de armazenamento à qual a Identidade Gerida possa aceder.

Ao utilizar a Autenticação do sistema no armazenamento, a conta de armazenamento tem de estar na mesma subscrição que a conta dos Serviços de Multimédia. Utilize contas de armazenamento na mesma região que a conta dos Serviços de Multimédia para evitar custos adicionais de saída de dados.

Para ambos os tipos de autenticação, o principal que cria ou atualiza a conta dos Serviços de Multimédia tem de ter a permissão "Microsoft.Storage/storageAccounts/listkeys/action" na conta de armazenamento.

Descrição Geral

Importante

Utilize a API 2020-05-01 para todos os pedidos aos Serviços de Multimédia.

Estes são os passos gerais para criar armazenamento fidedigno para os Serviços de Multimédia:

  1. Crie um grupo de recursos.
  2. Criar uma conta de armazenamento.
  3. Consulte a conta de armazenamento até estar pronta. Quando a conta de armazenamento estiver pronta, o pedido devolverá o ID do principal de serviço.
  4. Localize o ID da função Contribuidor de Dados do Blob de Armazenamento .
  5. Chame o fornecedor de autorização e adicione uma atribuição de função.
  6. Atualize a conta dos serviços de multimédia para se autenticar na conta de armazenamento com a Identidade Gerida.
  7. Elimine os recursos se não quiser continuar a utilizá-los e ser-lhes-á cobrado.

Pré-requisitos

Precisa de uma subscrição do Azure para começar. Se não tiver uma subscrição do Azure, crie uma conta de avaliação gratuita.

Obter o ID do inquilino e o ID da subscrição

Se não souber como obter o ID do inquilino e o ID da subscrição, veja Como localizar a subscrição e o ID do inquilino.

Criar um principal de serviço e um segredo

Se não souber como criar um principal de serviço e um segredo, veja Obter credenciais para aceder à API dos Serviços de Multimédia.

Utilizar um cliente REST

Este script destina-se a ser utilizado com um cliente REST, como o que está disponível nas extensões de código do Visual Studio. Adapte-o para o seu ambiente de desenvolvimento.

Definir variáveis iniciais

Esta parte do script destina-se a ser utilizada num cliente REST. Pode utilizar variáveis de forma 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 Graph API

Esta parte do script destina-se a ser utilizada num cliente REST. Pode utilizar variáveis de forma 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 do principal 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 o ID do principal 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 estado da conta de armazenamento

A conta de armazenamento demorará algum tempo a estar pronta, pelo que este pedido consulta o respetivo estado. Repita este pedido até a conta de armazenamento estar 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 Multimédia com uma identidade gerida 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 Dados de Blob de Armazenamento de 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 da função de armazenamento

A atribuição de função diz que o principal de serviço da conta dos Serviços de Multimédia tem a função de armazenamento Contribuidor de Dados do Blob de Armazenamento. Isto pode demorar algum tempo e é importante aguardar ou a conta dos Serviços de Multimé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 acesso de ignorar a Identidade Gerida à conta de armazenamento

Esta ação altera o acesso da identidade gerida pelo sistema para a Identidade Gerida. Desta forma, a conta de armazenamento pode aceder à conta de armazenamento através de uma firewall, uma vez que os serviços do Azure podem aceder à conta de armazenamento, independentemente das regras de acesso ip (ACLs).

Novamente, aguarde até que a função tenha sido atribuída na conta de armazenamento ou a conta dos Serviços de Multimé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 Multimédia para utilizar a Identidade Gerida

Este pedido poderá ter de ser repetido algumas vezes, uma vez que a atribuição da função de armazenamento pode demorar alguns minutos a 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 ao criar um recurso 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

{
}

Eliminar recursos

Se não quiser manter os recursos que criou e continuar a ser cobrado por eles, elimine-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

Pode contactar os Serviços de Multimédia com perguntas ou seguir as nossas atualizações através de um dos seguintes métodos: