Tutorial: Armazenamento fidedigno dos Serviços de Multimédia
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:
- Crie um grupo de recursos.
- Criar uma conta de armazenamento.
- 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.
- Localize o ID da função Contribuidor de Dados do Blob de Armazenamento .
- Chame o fornecedor de autorização e adicione uma atribuição de função.
- Atualize a conta dos serviços de multimédia para se autenticar na conta de armazenamento com a Identidade Gerida.
- 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:
- Q & A
-
Stack Overflow. Perguntas sobre etiquetas com
azure-media-services
. - @MSFTAzureMedia ou utilize @AzureSupport para pedir suporte.
- Abra um pedido de suporte através do portal do Azure.