Tareas comunes de los administradores de base de datos (DBA) para Amazon RDS for PostgreSQL - Amazon Relational Database Service

Tareas comunes de los administradores de base de datos (DBA) para Amazon RDS for PostgreSQL

Los administradores de bases de datos (DBA) realizan una variedad de tareas cuando administran una instancia de base de datos de Amazon RDS for PostgreSQL. Ayuda a comprender algunas de las capacidades básicas de PostgreSQL y cómo usarlas en una instancia de base de datos de RDS for PostgreSQL. Por ejemplo, si es un DBA que ya está familiarizado con PostgreSQL, tenga en cuenta que Amazon RDS no permite el acceso de shell a las instancias de base de datos. Eso significa que no puede acceder a los archivos de registro de la misma manera que lo hace cuando ejecuta PostgreSQL en el hardware de su servidor. Para obtener más información sobre cómo trabajar con archivos de registro de RDS for PostgreSQL, consulte Archivos de registro de base de datos de PostgreSQL.

Amazon RDS limita el acceso a ciertos procedimientos y tablas del sistema que requieren privilegios avanzados para el rol rds_superuser. Esta es la identidad con más privilegios en una instancia de base de datos de RDS for PostgreSQL. Para obtener más información, consulte Descripción del rol rds_superuser .

Las siguientes son algunas tareas comunes de DBA para RDS for PostgreSQL.

Control del acceso de los usuarios a la base de datos de PostgreSQL

En RDS for PostgreSQL, puede administrar qué usuarios tienen privilegios para conectarse a qué bases de datos. En otros entornos de PostgreSQL, este tipo de administración suele realizarse mediante la modificación del archivo pg_hba.conf. En Amazon RDS, puede utilizar concesiones de base de datos en su lugar.

Las nuevas bases de datos de PostgreSQL siempre se crean con un conjunto predeterminado de privilegios. Los privilegios predeterminados permiten a PUBLIC (todos los usuarios) conectarse a la base de datos y crear tablas temporales mientras están conectados.

Para controlar a qué usuarios se les permite conectarse a una base de datos determinada en Amazon RDS, primero revoque los privilegios PUBLIC predeterminados. A continuación, devuelva los privilegios de una forma más granular. El siguiente ejemplo muestra cómo.

postgres=> REVOKE ALL on database db-name from public; postgres=> GRANT CONNECT, TEMPORARY on database db-name to user/role;

Para obtener más información sobre los privilegios en las bases de datos de PostgreSQL, consulte el comando GRANT en la documentación de PostgreSQL.

Uso de mecanismos de registro admitidos por RDS for PostgreSQL

Hay varios parámetros, extensiones y otros elementos configurables que puede establecer para registrar actividades que ocurren en su instancia de base de datos de PostgreSQL. Esto incluye lo siguiente:

  • El parámetro log_statement se puede usar para registrar la actividad del usuario en su base de datos de PostgreSQL. Para obtener más información sobre el registro de RDS for PostgreSQL y cómo monitorear los registros, consulte Archivos de registro de base de datos de PostgreSQL.

  • El parámetro rds.force_admin_logging_level registra las acciones del usuario interno de Amazon RDS (rdsadmin) en las bases de datos de la instancia de base de datos. Escribe la salida en el registro de errores de PostgreSQL. Los valores permitidos son disabled, debug5, debug4, debug3, debug2, debug1, info, notice, warning, error, registro, fatal, y panic. El valor predeterminado es disabled.

  • El parámetro rds.force_autovacuum_logging_level se puede configurar para capturar varias operaciones autovacuum en el registro de errores de PostgreSQL. Para obtener más información, consulte Registro de actividades de autovacuum y vacuum .

  • La extensión pgaudit se puede instalar y configurar para capturar actividades a nivel de sesión o a nivel de objeto. Para obtener más información, consulte Registro a nivel de sesión y objeto con la extensión pgaudit .

  • La extensión log_fdw le permite acceder al registro del motor de la base de datos mediante SQL. Para obtener más información, consulte Uso de la extensión log_fdw para acceder al registro de base de datos mediante SQL .

  • La biblioteca pg_stat_statements se especifica como predeterminada para el parámetro shared_preload_libraries en la versión 10 y superiores de RDS for PostgreSQL. Es esta biblioteca la que puede usar para analizar consultas en ejecución. Asegúrese de que pg_stat_statements se establezca en el grupo de parámetros de base de datos. Para obtener más información sobre cómo supervisar su instancia de base de datos de RDS for PostgreSQL por medio de la información que proporciona esta biblioteca, consulte Estadísticas de SQL de RDS PostgreSQL.

En términos generales, el objetivo del registro es que el DBA pueda supervisar, ajustar el rendimiento y solucionar problemas. Muchos de los registros se cargan automáticamente en Amazon CloudWatch o en Información sobre rendimiento. Aquí, se ordenan y agrupan para proporcionar métricas completas para su instancia de base de datos. Para obtener más información sobre la supervisión y las métricas de Amazon RDS, visite Supervisión de métricas en una instancia de Amazon RDS.

Uso de pgBadger para el análisis de registros con PostgreSQL

Puede usar un analizador de registros como pgbadger para analizar los registros de PostgreSQL. La documentación de pgBadger establece que el patrón %l (la línea de registro para la sesión o el proceso) debe ser parte del prefijo. Sin embargo, si proporciona el RDS actual log_line_prefix como parámetro a pgBadger, aún debería generar un informe.

Por ejemplo, el siguiente comando asigna el formato correcto a un archivo de registro de Amazon RDS for PostgreSQL con fecha 04-02-2014 con pgbadger.

./pgbadger -f stderr -p '%t:%r:%u@%d:[%p]:' postgresql.log.2014-02-04-00

Limitación del control de las contraseñas de los usuarios a un rol específico

Puede restringir quién puede gestionar las contraseñas de usuarios de bases de datos a un rol especial. Al hacerlo, podrá tener un mayor control sobre la administración de contraseñas del lado del cliente.

Active la administración de contraseñas restringidas con el parámetro estático rds.restrict_password_commands y utilice un rol llamado rds_password. Cuando el parámetro rds.restrict_password_commands se establece en 1, solo los usuarios que sean miembros del rol rds_password podrán ejecutar determinados comandos SQL. Los comandos SQL restringidos son comandos que modifican las contraseñas de usuario de las bases de datos y el tiempo de vencimiento de las contraseñas.

Para usar la administración de contraseñas restringidas, asegúrese de que su instancia de base de datos esté ejecutando la versión 10.6 o versiones superiores de RDS for PostgreSQL. Dado que el parámetro rds.restrict_password_commands es estático, para cambiarlo se requiere un reinicio de la base de datos.

Cuando una base de datos tiene activada la administración de contraseñas restringida, si intenta ejecutar comandos SQL restringidos, obtiene el siguiente error: ERROR: must be a member of rds_password to alter passwords (ERROR: Debe ser miembro de rds_password para modificar las contraseñas).

A continuación, se presentan algunos ejemplos de comandos SQL que están restringidos cuando se activa la administración de contraseñas restringidas.

postgres=> CREATE ROLE myrole WITH PASSWORD 'mypassword'; postgres=> CREATE ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2020-01-01'; postgres=> ALTER ROLE myrole WITH PASSWORD 'mypassword' VALID UNTIL '2020-01-01'; postgres=> ALTER ROLE myrole WITH PASSWORD 'mypassword'; postgres=> ALTER ROLE myrole VALID UNTIL '2020-01-01'; postgres=> ALTER ROLE myrole RENAME TO myrole2;

Algunos comandos ALTER ROLE que incluyen RENAME TO podrían quedar también restringidos. La restricción podría deberse a que el cambio de nombre de un rol de PostgreSQL con una contraseña MD5 borra la contraseña.

El rol rds_superuser tiene pertenencia al tol rds_password de forma predeterminada y esto no se puede cambiar. Puede otorgar a otros roles pertenencia al rol rds_password mediante el comando SQL GRANT. Recomendamos que dé pertenencia a rds_password solamente a unos cuantos roles que utilice únicamente para la administración de contraseñas. Estos roles requieren el atributo CREATEROLE para modificar otros roles.

Asegúrese de que comprueba los requisitos de las contraseñas del lado del cliente, como el vencimiento y la complejidad necesaria. Recomendamos que restrinja los cambios relacionados con las contraseñas mediante su propia utilidad del lado del cliente. Esta utilidad debería tener un rol que pertenezca a rds_password y cuente con el atributo de rol CREATEROLE.

Descripción del rol rds_superuser

Cuando crea una instancia de base de datos de RDS for PostgreSQL, la cuenta del sistema de usuario principal que crea se asigna al rol rds_superuser. El rol rds_superuser es un rol predefinido de Amazon RDS similar al rol de superusuario de PostgreSQL (que suele denominarse postgres en las instancias locales), pero con algunas restricciones. Al igual que el rol de superusuario de PostgreSQL, el rol rds_superuser tiene los máximos privilegios en su instancia de base de datos. No asigne este rol a los usuarios a menos que necesiten más acceso a la instancia de base de datos.

El rol rds_superuser puede hacer lo siguiente:

Como se ha mencionado, el rol rds_superuser no puede hacer todo lo que el postgressuperusuario puede hacer. Por ejemplo, rds_superuser no puede omitir el privilegio CONNECT cuando se conecta a una base de datos. Este rol debe otorgarse específicamente a cualquier usuario que cree que deba tener privilegios rds_superuser.

En el ejemplo siguiente, se muestra cómo crear un usuario y asignarle el rol rds_superuser.

postgres=> CREATE ROLE bus_app_admin WITH PASSWORD 'change_me' LOGIN; CREATE ROLE postgres=> GRANT rds_superuser TO bus_app_admin; GRANT ROLE