Compartir a través de


Creación de una cuenta de PostgreSQL con privilegios mínimos para la detección y evaluación de Azure Migrate (versión preliminar)

En este artículo se explica cómo crear una cuenta de PostgreSQL personalizada con los permisos mínimos necesarios para la detección y evaluación en Azure Migrate.

Antes de iniciar la detección, configure el dispositivo de Azure Migrate con cuentas de PostgreSQL para conectarse a las instancias de PostgreSQL. Para evitar el uso de cuentas de superusuario, puede crear una cuenta personalizada con solo los permisos necesarios para recopilar metadatos para la detección y la evaluación. Agregue esta cuenta personalizada en la configuración del dispositivo para la detección y evaluación de PostgreSQL. Puede usar la utilidad de aprovisionamiento de cuentas con privilegios mínimos proporcionada en esta documentación para simplificar la configuración.

Prerrequisitos

  • Un servidor postgreSQL en ejecución y accesible.
  • Acceso de superusuario a la instancia de PostgreSQL.
  • Configuración de un proyecto de Azure Migrate.

Privilegios mínimos necesarios

Para garantizar la seguridad y el cumplimiento en Azure Migrate, cree un usuario de PostgreSQL con solo los permisos necesarios, lo que minimiza los riesgos de acceso no autorizado o cambios no deseados.

En función de los requisitos de Azure Migrate, los privilegios mínimos necesarios son:

Permisos de nivel de base de datos

  • CONNECT: acceso a bases de datos
  • pg_read_all_settings: lee los parámetros de configuración del servidor.
  • pg_read_all_stats: acceso a las estadísticas de base de datos
  • pg_monitor: Supervisión de las métricas de rendimiento de la base de datos

Implementación del script SQL

Guarde el siguiente contenido como CreateUser.sql:

-- PostgreSQL Script to Create a Least-Privilege User for Azure Migrate
-- Usage: Replace :username and :password with actual values when executing.
-- Parameters:
--   :username - The username for the new user
--   :password - The password for the new user

-- Check if the user already exists
SELECT CASE
    WHEN EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username')
        THEN 'User ' || :'username' || ' already exists, skipping creation'
    ELSE
        'User ' || :'username' || ' does not exist, proceeding with creation'
END AS user_check;

-- Only proceed if user doesn't exist
SELECT NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username') AS should_create \gset
\if :should_create

BEGIN;

-- Create the user with minimal privileges
CREATE USER :"username" WITH PASSWORD :'password' LOGIN
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS;

-- Grant CONNECT privilege on all non-template databases
SELECT 'GRANT CONNECT ON DATABASE ' || quote_ident(datname) || ' TO ' || :'username' || ';'
FROM pg_database WHERE datistemplate = false; \gexec

-- Grant required monitoring and read permissions
GRANT pg_read_all_settings TO :"username";
GRANT pg_read_all_stats TO :"username";
GRANT pg_monitor TO :"username";

-- Log the user creation
SELECT 'Azure Migrate user ' || :'username' || ' created successfully with least privileges.' AS result;

COMMIT;

\endif

-- Usage instructions:
--   Replace :username and :password with actual values using psql variables:
--   psql -v username=myuser -v password=mypassword -f CreateUser.sql

Nota:

Este usuario solo tiene los privilegios mínimos necesarios para la detección y evaluación de Azure Migrate.

  • El usuario no puede crear bases de datos, roles ni replicar.
  • Use siempre contraseñas seguras y siga las directivas de seguridad de su organización.

Instrucciones de uso

Siga estos pasos para usar el script SQL proporcionado:

  1. Guarde el script como CreateUser.sql.
  2. Reemplace los marcadores de posición de nombre de usuario y contraseña por los valores deseados usando las variables psql.

Ejecución del script

Ejecute el script mediante la herramienta de línea de comandos de PostgreSQL (psql) con privilegios de superusuario. Reemplace los marcadores de posición por sus valores reales.

psql -h <hostname> -p <port> -d <database> -U <superuser> \
    -v username=<<Az Migrate username>> \
    -v password='your_secure_password' \
    -f CreateUser.sql

Comprobación de la creación de usuarios

Para confirmar que el usuario se creó y asignó los privilegios correctos, ejecute las siguientes consultas:

-- Check if the user exists and review key attributes
SELECT usename, usecreatedb, usesuper, userepl
FROM pg_catalog.pg_user
WHERE usename = '<<Az Migrate username>>';

El resultado debe mostrarse false para usecreatedb, usesupery userepl.

Comprobación de los privilegios basados en roles concedidos

Compruebe que el usuario tiene los roles de supervisión necesarios mediante la ejecución de las siguientes consultas. Esto garantiza que la cuenta solo tenga los permisos necesarios para las operaciones de Azure Migrate.

-- Verify the user exists
SELECT rolname
FROM pg_roles
WHERE rolname = '<<Az Migrate username>>';
-- Check membership in monitoring roles
SELECT r.rolname AS granted_role
FROM pg_auth_members m
JOIN pg_roles r ON m.roleid = r.oid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<<Az Migrate username>>');

Después de ejecutar estas consultas, debería ver que el usuario existe y solo tiene los permisos necesarios para la detección y evaluación de Azure Migrate.

Consideraciones

Use una cuenta de PostgreSQL con privilegios mínimos exclusivamente para Azure Migrate, revise periódicamente los permisos, gire las credenciales, supervise la actividad y deshabilite la cuenta cuando ya no sea necesario.

  • Reemplace <<Az Migrate username>> y <PASSWORD> por el nombre de usuario elegido y una contraseña segura para el usuario con privilegios mínimos.
  • Ejecute el script con privilegios de superusuario, ya que la creación de usuarios y la asignación de roles requiere acceso elevado.
  • Confirme que la instancia de PostgreSQL se está ejecutando y accesible antes de ejecutar el script.
  • Pruebe el script en un entorno de desarrollo o ensayo antes de su uso en producción.
  • Siga los procedimientos recomendados de seguridad de su organización para la complejidad y administración de contraseñas.
  • Después de la ejecución del script, revise los permisos concedidos para asegurarse de que cumplen los requisitos de seguridad.
  • Si tiene problemas, consulte la documentación de PostgreSQL o póngase en contacto con el administrador de bases de datos para obtener soporte técnico.