Funções personalizadas para migrações online do SQL Server para a Instância Gerenciada SQL do Azure

O Serviço de Migração de Banco de Dados do Azure usa uma ID de APP para interagir com os Serviços do Azure. A ID do APP requer a função de Colaborador no nível de Assinatura (que muitos departamentos de segurança corporativa não permitem) ou a criação de funções personalizadas que concedem as permissões específicas exigidas pelo Serviço de Migração de Banco de Dados do Azure. Como há um limite de 2.000 funções personalizadas na ID do Microsoft Entra, convém combinar todas as permissões exigidas especificamente pela ID do APP em uma ou duas funções personalizadas e, em seguida, conceder à ID do APP a função personalizada em objetos ou grupos de recursos específicos (em vez de no nível da assinatura). Se o número de funções personalizadas não for uma preocupação, você poderá dividi-las por tipo de recurso, para criar três funções personalizadas no total, conforme descrito abaixo.

A seção AssignableScopes da cadeia de caracteres json de definição de função permite controlar onde as permissões aparecem na interface do usuário Adicionar Atribuição de Função no portal. Você provavelmente desejará definir a função no grupo de recursos ou até mesmo no nível do recurso para evitar sobrecarregar a interface do usuário com funções extras. Observe que isso não executa a atribuição de função real.

Número mínimo de funções

Atualmente, recomendamos a criação de um mínimo de duas funções personalizadas para a ID do APP, uma no nível do recurso e outra no nível da assinatura.

Nota

O último requisito de função personalizada pode eventualmente ser removido, à medida que o novo código da Instância Gerenciada do SQL é implantado no Azure.

Função personalizada para o ID do APP. Essa função é necessária para a migração do Serviço de Migração de Banco de Dados do Azure no nível de recurso ou grupo de recursos que hospeda o Serviço de Migração de Banco de Dados do Azure (para obter mais informações sobre a ID do APP, consulte o artigo Usar o portal para criar um aplicativo e entidade de serviço do Microsoft Entra que possa acessar recursos).

{
  "Name": "DMS Role - App ID",
  "IsCustom": true,
  "Description": "DMS App ID access to complete MI migrations",
  "Actions": [
        "Microsoft.Storage/storageAccounts/read",
        "Microsoft.Storage/storageAccounts/listKeys/action",
        "Microsoft.Storage/storageaccounts/blobservices/read",
        "Microsoft.Storage/storageaccounts/blobservices/write",
        "Microsoft.Sql/managedInstances/read",
        "Microsoft.Sql/managedInstances/write",
        "Microsoft.Sql/managedInstances/databases/read",
        "Microsoft.Sql/managedInstances/databases/write",
        "Microsoft.Sql/managedInstances/databases/delete",
        "Microsoft.Sql/managedInstances/metrics/read",
        "Microsoft.DataMigration/locations/*",
        "Microsoft.DataMigration/services/*"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/ResourceGroups/<StorageAccount_rg_name>",
    "/subscriptions/<subscription_id>/ResourceGroups/<ManagedInstance_rg_name>",
    "/subscriptions/<subscription_id>/ResourceGroups/<DMS_rg_name>",
  ]
}

Função personalizada para o ID do APP - assinatura. Essa função é necessária para a migração do Serviço de Migração de Banco de Dados do Azure no nível de assinatura que hospeda a Instância Gerenciada SQL.

{
  "Name": "DMS Role - App ID - Sub",
  "IsCustom": true,
  "Description": "DMS App ID access at subscription level to complete MI migrations",
  "Actions": [
        "Microsoft.Sql/locations/managedDatabaseRestoreAzureAsyncOperation/*"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>"
  ]
}

O json acima deve ser armazenado em dois arquivos de texto e você pode usar os cmdlets AzureRM, AZ PowerShell ou Azure CLI para criar as funções usando New-AzureRmRoleDefinition (AzureRM) ou New-AzRoleDefinition (AZ).

Para obter mais informações, consulte o artigo Funções personalizadas do Azure.

Depois de criar essas funções personalizadas, você deve adicionar atribuições de função aos usuários e ID(s) do APP aos recursos ou grupos de recursos apropriados:

  • A função "Função DMS - ID do Aplicativo" deve ser concedida à ID do APP que será usada para as migrações e também nos níveis de recursos Conta de Armazenamento, Serviço de Migração de Banco de Dados do Azure e Instância Gerenciada SQL. Ele é concedido no nível de recurso ou grupo de recursos que hospeda o Serviço de Migração de Banco de Dados do Azure.
  • A função "Função DMS - ID do Aplicativo - Sub" deve ser concedida à ID do APP no nível de assinatura que hospeda a Instância Gerenciada SQL (a concessão no recurso ou grupo de recursos falhará). Esse requisito é temporário até que uma atualização de código seja implantada.

Número expandido de funções

Se o número de funções personalizadas na sua ID do Microsoft Entra não for uma preocupação, recomendamos que crie um total de três funções. Você ainda precisará da função "Função DMS - ID do aplicativo – Sub", mas a função "Função DMS - ID do aplicativo" acima é dividida por tipo de recurso em duas funções diferentes.

Função personalizada para a ID do APP para Instância Gerenciada SQL

{
  "Name": "DMS Role - App ID - SQL MI",
  "IsCustom": true,
  "Description": "DMS App ID access to complete MI migrations",
  "Actions": [
        "Microsoft.Sql/managedInstances/read",
        "Microsoft.Sql/managedInstances/write",
        "Microsoft.Sql/managedInstances/databases/read",
        "Microsoft.Sql/managedInstances/databases/write",
        "Microsoft.Sql/managedInstances/databases/delete",
        "Microsoft.Sql/managedInstances/metrics/read"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/resourceGroups/<ManagedInstance_rg_name>"
  ]
}

Função personalizada para o ID do APP para armazenamento

{
  "Name": "DMS Role - App ID - Storage",
  "IsCustom": true,
  "Description": "DMS App ID storage access to complete MI migrations",
  "Actions": [
"Microsoft.Storage/storageAccounts/read",
        "Microsoft.Storage/storageAccounts/listKeys/action",
        "Microsoft.Storage/storageaccounts/blobservices/read",
        "Microsoft.Storage/storageaccounts/blobservices/write"
  ],
  "NotActions": [
  ],
  "AssignableScopes": [
    "/subscriptions/<subscription_id>/resourceGroups/<StorageAccount_rg_name>"
  ]
}

Atribuição de função

Para atribuir uma função aos usuários/ID do APP, abra o portal do Azure, execute as seguintes etapas:

  1. Navegue até o grupo de recursos ou recurso (exceto para a função que precisa ser concedida na assinatura), vá para Controle de Acesso e role para localizar as funções personalizadas que você acabou de criar.

  2. Selecione a função apropriada, selecione o ID do APP e salve as alterações.

O(s) seu(s) ID(s) de APP agora aparece(m) listado na guia Atribuições de função.

Próximos passos

  • Analise as diretrizes de migração para seu cenário no Guia de Migração de Banco de Dados da Microsoft.