Configurare gli account con privilegi minimi in Azure Migrate

L'appliance Azure Migrate è uno strumento leggero che individua i server locali e invia i dati di configurazione e prestazioni ad Azure. Esegue anche l'inventario software, esegue l'analisi delle dipendenze senza agente e rileva carichi di lavoro come app Web e istanze di SQL Server o MySQL Server.

Per utilizzare queste funzionalità, è necessario aggiungere le credenziali del server e dell'utente ospite nel gestore di configurazione dell'appliance. Seguendo il principio dei privilegi minimi, è possibile mantenere la configurazione sicura ed efficiente.

Importante

Oltre a configurare le credenziali con privilegi minimi per l'appliance di Azure Migrate, assicurarsi che agli utenti vengano assegnati i ruoli predefiniti di Azure Migrate appropriati in Azure. Questi ruoli forniscono le autorizzazioni minime necessarie per le attività di individuazione, valutazione e migrazione. Ulteriori informazioni.

Individuazione del patrimonio VMware

Per individuare le impostazioni di base dei server in esecuzione in VMware estate, sono necessarie le autorizzazioni seguenti.

Autorizzazioni dell'account vCenter

Individuazione dei metadati del server

  • Per individuare le configurazioni server di base in un ambiente VMware, sono necessarie queste autorizzazioni:
    • Sola lettura: usare il ruolo di sola lettura predefinito o crearne una copia.
  • Per individuare i metadati del server e abilitare l'inventario software, l'analisi delle dipendenze e le valutazioni delle prestazioni, sono necessarie queste autorizzazioni:
    • Sola lettura: usare il ruolo di sola lettura predefinito o crearne una copia.
    • Operazioni guest: aggiungere privilegi di operazioni guest al ruolo di sola lettura.

Ricerca mirata dei server VMware

  • Per individuare macchine virtuali specifiche, assegnare le autorizzazioni di lettura alle singole macchine virtuali.
  • Per individuare tutte le VM in una cartella, assegnare le autorizzazioni di lettura al livello della cartella e attivare l'opzione Propaga ai figli.
  • Per abilitare l'inventario software, l'analisi delle dipendenze e le valutazioni delle prestazioni, assegnare le autorizzazioni per le operazioni guest all'account vCenter insieme alle autorizzazioni di lettura.
  • Concedere l'accesso in sola lettura a tutti gli oggetti padre che ospitano le macchine virtuali, ad esempio l'host, il cluster, la cartella host, la cartella del cluster e il data center. Non è necessario applicare queste autorizzazioni a tutti gli oggetti figlio.
  • Nel client vSphere verificare che le autorizzazioni di lettura siano impostate per gli oggetti padre nella visualizzazione Host e Cluster e nella visualizzazione VM e Modelli .

Migrazione senza agente

Per eseguire la migrazione senza agente, assicurarsi che l'account vCenter usato dall'appliance Azure Migrate disponga di autorizzazioni a tutti i livelli necessari: data center, cluster, host, vm e archivio dati. Applicare le autorizzazioni a ogni livello per evitare errori di replica.

Nome dei privilegi di vSphere Scopo dei privilegi Obbligatorio Nome del privilegio API
Sfoglia archivio dati Consentire agli utenti di esplorare i file di log delle macchine virtuali per risolvere i problemi di creazione ed eliminazione degli snapshot Archivi dati Datastore.Browse
Operazioni di file di basso livello Consentire azioni di lettura, scrittura, eliminazione e ridenominazione nel browser dell'archivio dati per risolvere i problemi di creazione ed eliminazione degli snapshot Archivi dati Datastore.FileManagement
Modifica configurazione - Attiva/Disattiva rilevamento modifiche disco Consentire agli utenti di abilitare o disabilitare il rilevamento delle modifiche dei dischi delle macchine virtuali per eseguire il pull dei blocchi di dati modificati tra snapshot Macchine virtuali VirtualMachine.Config.ChangeTracking
Modificare la configurazione - Acquisire il lease del disco Consentire alle operazioni di lease del disco in una macchina virtuale di leggere il disco usando VMware vSphere Virtual Disk Development Kit (VDDK) Macchine virtuali VirtualMachine.Config.DiskLease
Provisioning: consentire l'accesso al disco di sola lettura Consenti l'accesso al disco di sola lettura: apertura di un disco in una macchina virtuale per leggere il disco tramite VDDK Macchine virtuali VirtualMachine.Provisioning.DiskRandomRead
Provisioning: consentire l'accesso al disco Consentire l'apertura di un disco in una macchina virtuale per leggere il disco usando VDDK Macchine virtuali VirtualMachine.Provisioning.DiskRandomAccess
Approvvigionamento - Consenti il download delle macchine virtuali Consentire il download della macchina virtuale per leggere i file di macchina virtuale, ottenere i log e risolvere gli errori Host radice o server vCenter VirtualMachine.Provisioning.GetVmFiles
Gestione degli snapshot Consentire l'individuazione, l'inventario software e il mapping delle dipendenze nelle macchine virtuali Macchine virtuali VirtualMachine.State.*
Operazioni guest Consentire la creazione e la gestione degli snapshot delle macchine virtuali per la replica Macchine virtuali VirtualMachine.GuestOperations.*
Accensione interazione spenta Consentire la disattivazione della macchina virtuale durante la migrazione ad Azure Macchine virtuali VirtualMachine.Interact.PowerOff

Individuazione guest di software, dipendenze e carichi di lavoro installati

Per individuare in modo efficace software, dipendenze dell'applicazione e carichi di lavoro nei server di destinazione, l'appliance Azure Migrate richiede credenziali del sistema operativo guest. Queste credenziali consentono all'appliance di connettersi in modo sicuro ai server e raccogliere dati dettagliati sull'inventario e sulle prestazioni.

Riconoscimento rapido degli ospiti

Per l'individuazione rapida dell'inventario software, delle dipendenze del server e delle istanze di database, sono necessarie le autorizzazioni seguenti:

Caso d'uso Metadati individuati Tipo di credenziali Autorizzazioni sicure
Riconoscimento rapido degli ospiti Inventario software

Dipendenze del server (dati limitati)

Inventario delle istanze del database
Windows

Linux
Account utente guest locale

Qualsiasi account utente guest non Sudo

Annotazioni

Per ottenere i dati del mapping delle dipendenze, è possibile utilizzare un account guest su Windows o un account utente Linux senza privilegi Sudo. Ma con account con privilegi minimi, è possibile che non vengano raccolte informazioni sul processo (ad esempio nome processo o nome dell'app) per alcuni processi eseguiti con privilegi più elevati. Questi processi vengono visualizzati come Sconosciuti nel computer nella visualizzazione a server singolo.

Individuazione guest approfondita

Per l'individuazione approfondita dell'inventario software, delle dipendenze del server e delle app Web, ad esempio .NET e Java Tomcat, sono necessarie le autorizzazioni seguenti:

Caso d'uso Metadati individuati Tipo di credenziali Autorizzazioni necessarie
Individuazione guest approfondita Inventario software

Dipendenze del server (dati completi)

Inventario delle istanze del database

Applicazioni web come .NET e Java Tomcat
Windows Amministratore
Individuazione guest approfondita Inventario software

Dipendenze del server (dati completi)

Inventario delle istanze del database

Applicazioni web come .NET e Java Tomcat
Linux Per identificare le dipendenze del server sono necessarie le autorizzazioni Sudo seguenti: /usr/bin/netstat e /usr/bin/ls.

Se netstat non è disponibile, sono necessarie le autorizzazioni Sudo per ss .

Per l'individuazione di app Web Java (server Tomcat), l'utente deve disporre delle autorizzazioni di lettura ed esecuzione (r-x) per tutte le directory Catalina.

Usare il comando seguente per trovare tutte le case Catalina: ps -ef \| grep catalina.home.

Ecco un comando di esempio per configurare un utente con privilegi minimi: setfacl -m u:<username>:rx <catalina/home/path>.

Scoperta della tenuta Hyper-V

Per trovare le impostazioni di base dei server in esecuzione nel Hyper-V estate, sono necessarie determinate autorizzazioni. In tutti gli host Hyper-V creare un utente locale che fa parte di questi tre gruppi:

  • amministratori di Hyper-V
  • Utenti di Performance Monitor
  • Utenti di gestione remota

Utilizzare lo script per preparare gli host Hyper-V.

Per l'individuazione approfondita dell'infrastruttura di Hyper-V e per eseguire l'inventario software e l'analisi delle dipendenze, sono necessarie le credenziali dell'account guest.

Individuazione di server fisici e cloud

Per individuare e valutare server fisici o server ospitati in altri cloud pubblici, l'appliance Azure Migrate richiede credenziali con accesso con privilegi minimi. Queste credenziali consentono all'appliance di connettersi e raccogliere i dati necessari senza esporre autorizzazioni di sistema sensibili.

Individuazione rapida del server

Per l'individuazione rapida dell'inventario software, delle dipendenze del server e delle istanze di database, sono necessarie le autorizzazioni seguenti:

Caso d'uso Metadati individuati Tipo di credenziali Dettagli
Individuazione rapida del server Inventario software

Analisi delle dipendenze senza agente (dati limitati)

Inventario del carico di lavoro di database e app Web
Windows Seguire questa procedura
Individuazione rapida del server Inventario software

Analisi delle dipendenze senza agente (dati completi)

Inventario del carico di lavoro di database e app Web
Linux Seguire questa procedura

Server Windows

Per l'individuazione rapida dei server Windows, creare un account utente di Windows appartenente ai gruppi di utenti seguenti:

  • Utenti di gestione remota
  • Utenti di Performance Monitor
  • Utenti di log delle prestazioni

L'account utente guest deve disporre dell'autorizzazione per accedere allo spazio dei nomi CIMV2 e ai relativi spazi dei nomi secondari nell'elemento controllo WMI nel Pannello di controllo. Per impostare l'accesso, seguire questa procedura:

  1. Nel server Windows di destinazione passare al menu Start , cercare Esegui e quindi selezionarlo.

  2. Nella finestra di dialogo Esegui digitare wmimgmt.msc e quindi premere INVIO.

  3. Nella console wmimgmt fare clic con il pulsante destro del mouse su Controllo WMI (locale) e quindi scegliere Proprietà.

  4. Nella finestra di dialogo Proprietà controllo WMI (locale) selezionare la scheda Sicurezza .

  5. Espandere la cartella Radice nell'albero dello spazio dei nomi e quindi selezionare lo spazio dei nomi CIMV2 .

  6. Selezionare Sicurezza per aprire la finestra di dialogo Sicurezza per ROOT\CIMV2 .

  7. Nella sezione Gruppi o nomi utente selezionare Aggiungi per aprire la finestra di dialogo Seleziona utenti o gruppi .

  8. Cercare l'account utente, selezionarlo e quindi selezionare OK per tornare alla finestra di dialogo Sicurezza per ROOT\CIMV2 .

  9. Nella sezione Nomi di gruppo o utente selezionare l'account utente ospite. Verificare che siano consentite le autorizzazioni seguenti:

    • Abilitare l'account
    • Abilitazione remota

    Screenshot che mostra i permessi utente ospite.

  10. Selezionare Applica per abilitare le autorizzazioni impostate nell'account utente.

  11. Riavviare il servizio WinRM dopo aver aggiunto il nuovo utente guest.

Server Linux

Per l'individuazione rapida dei server Linux:

  1. Creare un account utente; ad esempio . AzMigrateLeastprivuser

  2. Concedere privilegi Sudo all'utente solo per i comandi necessari aggiungendo la riga seguente nel /etc/sudoers file:

    AzMigrateLeastprivuser ALL=(ALL) NOPASSWD: /usr/sbin/dmidecode, /usr/sbin/fdisk -l, /usr/sbin/fdisk -l *, /usr/bin/ls -l /proc/*/exe, /usr/bin/netstat -atnp, /usr/sbin/lvdisplay ""
    Defaults:AzMigrateLeastprivuser !requiretty
    
    

Individuazione approfondita del server

Per l'individuazione approfondita dell'inventario software, delle dipendenze del server e delle app Web, ad esempio .NET e Java Tomcat, sono necessarie le autorizzazioni seguenti:

Caso d'uso Metadati individuati Tipo di credenziali Comandi per la configurazione
Individuazione approfondita del server Individuazione approfondita delle app Web, ad esempio .NET e Java Tomcat

Analisi delle dipendenze senza agente (dati completi)
Windows

Linux
Sono necessarie autorizzazioni di amministratore.

Per individuare le app Web Java nei server Tomcat, l'account utente deve disporre delle autorizzazioni di lettura e di esecuzione (r-x) per tutte le directory Catalina Home.

Usare il comando seguente per trovare tutte le case Catalina: ps -ef \| grep catalina.home.

Ecco un comando di esempio per configurare un utente con privilegi minimi: setfacl -m u:<username>:rx <catalina/home/path>.

Individuazione database

L'inventario software è necessario per avviare l'individuazione del carico di lavoro. Per abilitarla, assicurarsi che vengano aggiunte le credenziali dell'ospite. Le autorizzazioni per individuare i database SQL e MySQL sono uguali per tutti i tipi di appliance: VMware, Hyper-V e server fisici.

Individua database e istanze di SQL Server

Creare account con privilegi minimi in singole istanze di SQL Server. Usare l'autenticazione di Windows e assegnare solo le autorizzazioni necessarie.

Autenticazione di Windows

-- Create a login to run the assessment.
use master;
DECLARE @SID NVARCHAR(MAX) = N'';
CREATE LOGIN [MYDOMAIN\MYACCOUNT] FROM WINDOWS;
SELECT @SID = N'0x'+CONVERT(NVARCHAR, sid, 2) FROM sys.syslogins where name = 'MYDOMAIN\MYACCOUNT'
IF (ISNULL(@SID,'') != '')
  PRINT N'Created login [MYDOMAIN\MYACCOUNT] with SID = ' + @SID
ELSE
  PRINT N'Login creation failed'
GO    

-- Create a user in every database other than tempdb, model, and secondary AG databases (with connection_type = ALL) and provide minimal read-only permissions.
USE master;
EXECUTE sp_MSforeachdb '
  USE [?];
  IF (''?'' NOT IN (''tempdb'',''model''))
  BEGIN
    DECLARE @is_secondary_replica BIT = 0;
    IF CAST(PARSENAME(CAST(SERVERPROPERTY(''ProductVersion'') AS VARCHAR), 4) AS INT) >= 11
    BEGIN
      DECLARE @innersql NVARCHAR(MAX);
      SET @innersql = N''
        SELECT @is_secondary_replica = IIF(
          EXISTS (
              SELECT 1
              FROM sys.availability_replicas a
              INNER JOIN sys.dm_hadr_database_replica_states b
              ON a.replica_id = b.replica_id
              WHERE b.is_local = 1
              AND b.is_primary_replica = 0
              AND a.secondary_role_allow_connections = 2
              AND b.database_id = DB_ID()
          ), 1, 0
        );
      '';
      EXEC sp_executesql @innersql, N''@is_secondary_replica BIT OUTPUT'', @is_secondary_replica OUTPUT;
    END
    IF (@is_secondary_replica = 0)
    BEGIN
      CREATE USER [MYDOMAIN\MYACCOUNT] FOR LOGIN [MYDOMAIN\MYACCOUNT];
      GRANT SELECT ON sys.sql_expression_dependencies TO [MYDOMAIN\MYACCOUNT];
      GRANT VIEW DATABASE STATE TO [MYDOMAIN\MYACCOUNT];
    END
  END'
GO

-- Provide server-level read-only permissions.
use master;
GRANT SELECT ON sys.sql_expression_dependencies TO [MYDOMAIN\MYACCOUNT];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [MYDOMAIN\MYACCOUNT];
GRANT EXECUTE ON OBJECT::sys.xp_instance_regread TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW DATABASE STATE TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW SERVER STATE TO [MYDOMAIN\MYACCOUNT];
GRANT VIEW ANY DEFINITION TO [MYDOMAIN\MYACCOUNT];
GO

-- Provide msdb-specific permissions.
use msdb;
GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [MYDOMAIN\MYACCOUNT];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [MYDOMAIN\MYACCOUNT];
GO
  
-- Clean up
--use master;
-- EXECUTE sp_MSforeachdb 'USE [?]; DROP USER [MYDOMAIN\MYACCOUNT]'
-- DROP LOGIN [MYDOMAIN\MYACCOUNT];
--GO

Autenticazione di SQL Server

--- Create a login to run the assessment.
use master;
-- NOTE: SQL Server instances that host replicas of Always On availability groups must use the same SID for the SQL Server login.
  -- After the account is created in one of the members, copy the SID output from the script and include this value when executing against the remaining replicas.
  -- When the SID needs to be specified, add the value to the following @SID variable definition.
DECLARE @SID NVARCHAR(MAX) = N'';
IF (@SID = N'')
BEGIN
  CREATE LOGIN [evaluator]
      WITH PASSWORD = '<provide a strong password>'
END
ELSE
BEGIN
  DECLARE @SQLString NVARCHAR(500) = 'CREATE LOGIN [evaluator]
    WITH PASSWORD = ''<provide a strong password>''
    , SID = ' + @SID
  EXEC SP_EXECUTESQL @SQLString
END
SELECT @SID = N'0x'+CONVERT(NVARCHAR(100), sid, 2) FROM sys.syslogins where name = 'evaluator'
IF (ISNULL(@SID,'') != '')
  PRINT N'Created login [evaluator] with SID = '''+ @SID +'''. If this instance hosts any Always On Availability Group replica, use this SID value when executing the script against the instances hosting the other replicas'
ELSE
  PRINT N'Login creation failed'
GO
  
-- Create a user in every database other than tempdb, model, and secondary AG databases (with connection_type = ALL) and provide minimal read-only permissions.
USE master;
EXECUTE sp_MSforeachdb '
  USE [?];
  IF (''?'' NOT IN (''tempdb'',''model''))
  BEGIN
    DECLARE @is_secondary_replica BIT = 0;
    IF CAST(PARSENAME(CAST(SERVERPROPERTY(''ProductVersion'') AS VARCHAR), 4) AS INT) >= 11
    BEGIN
      DECLARE @innersql NVARCHAR(MAX);
      SET @innersql = N''
        SELECT @is_secondary_replica = IIF(
          EXISTS (
            SELECT 1
            FROM sys.availability_replicas a
            INNER JOIN sys.dm_hadr_database_replica_states b
              ON a.replica_id = b.replica_id
            WHERE b.is_local = 1
              AND b.is_primary_replica = 0
              AND a.secondary_role_allow_connections = 2
              AND b.database_id = DB_ID()
          ), 1, 0
        );
      '';
      EXEC sp_executesql @innersql, N''@is_secondary_replica BIT OUTPUT'', @is_secondary_replica OUTPUT;
    END

    IF (@is_secondary_replica = 0)
    BEGIN
        CREATE USER [evaluator] FOR LOGIN [evaluator];
        GRANT SELECT ON sys.sql_expression_dependencies TO [evaluator];
        GRANT VIEW DATABASE STATE TO [evaluator];
    END
  END'
GO
  
-- Provide server-level read-only permissions.
USE master;
GRANT SELECT ON sys.sql_expression_dependencies TO [evaluator];
GRANT EXECUTE ON OBJECT::sys.xp_regenumkeys TO [evaluator];
GRANT EXECUTE ON OBJECT::sys.xp_instance_regread TO [evaluator];
GRANT VIEW DATABASE STATE TO [evaluator];
GRANT VIEW SERVER STATE TO [evaluator];
GRANT VIEW ANY DEFINITION TO [evaluator];
GO
  
-- Provide msdb-specific permissions.
USE msdb;
GRANT EXECUTE ON [msdb].[dbo].[agent_datetime] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobsteps] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syssubsystems] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobhistory] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syscategories] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysjobs] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmaintplan_plans] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[syscollector_collection_sets] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_profile] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_profileaccount] TO [evaluator];
GRANT SELECT ON [msdb].[dbo].[sysmail_account] TO [evaluator];
GO
  
-- Clean up
--use master;
-- EXECUTE sp_MSforeachdb 'USE [?]; BEGIN TRY DROP USER [evaluator] END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH;'
-- BEGIN TRY DROP LOGIN [evaluator] END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH;
--GO

Per informazioni su come configurare account SQL personalizzati con privilegi minimi su larga scala, vedere Effettuare il provisioning di account personalizzati con privilegi minimi per l'individuazione e la valutazione di SQL Server.

Individuazione di database e istanze del server MySQL

Per individuare i database MySQL, aggiungere le credenziali del database MySQL all'appliance.

Assicurarsi che l'utente che corrisponde alle credenziali MySQL aggiunte disponga dei privilegi seguenti:

  • Selezionare l'autorizzazione sulle tabelle information_schema
  • Selezionare l'autorizzazione sulle tabelle mysql.users

Per l'individuazione di MySQL, verificare che l'indirizzo IP o il dominio dell'appliance siano consentiti configurando le regole del firewall necessarie e i privilegi utente mySQL. Il bind-address in my.cnf deve essere impostato anche per consentire le connessioni esterne, se necessario.

Usare i comandi seguenti per concedere i privilegi necessari all'utente MySQL:

GRANT USAGE ON *.* TO 'username'@'ip';
GRANT PROCESS ON *.* TO 'username'@'ip';
GRANT SELECT (User, Host, Super_priv, File_priv, Create_tablespace_priv, Shutdown_priv) ON mysql.user TO 'username'@'ip';
GRANT SELECT ON information_schema.* TO 'username'@'ip';
GRANT SELECT ON performance_schema.* TO 'username'@'ip';  

Ulteriori informazioni.