Amazon RDS: control de acceso a la base de datos

Para acceder a la instancia de base de datos de Amazon RDS, el usuario necesita permisos específicos. Esto se configura mediante AWS IAM (administración de identidad y acceso). En este tutorial veremos cómo se realiza esta configuración.

La configuración consta de dos partes.

  • Authentication

  • Control de acceso

Implica crear el nombre de usuario, contraseña y generar las claves de acceso para el usuario. Con la ayuda de la clave de acceso, es posible realizar un acceso programático al servicio AWS RDS. Las herramientas SDK y CLI utilizan las claves de acceso para iniciar sesión criptográficamente con la solicitud.

También podemos utilizar un rol de IAM para autenticar a un usuario. Pero el rol no está asociado a ningún usuario específico, sino que cualquier usuario puede asumir el rol temporalmente y completar la tarea requerida. Una vez finalizada la tarea, el rol se puede revocar y el usuario pierde la capacidad de autenticación.

Una vez que un usuario está autenticado, una política adjunta a ese usuario determina el tipo de tareas que puede realizar el usuario. A continuación se muestra un ejemplo de política que permite la creación de una instancia de base de datos RDS, en una instancia t2.micro para el motor de base de datos MySQL.

{
    "Version": "2018-09-11",
    "Statement": [
        {
            "Sid": "AllowCreateDBInstanceOnly",
            "Effect": "Allow",
            "Action": [
                "rds:CreateDBInstance"
            ],
            "Resource": [
                "arn:aws:rds:*:123456789012:db:test*",
                "arn:aws:rds:*:123456789012:og:default*",
                "arn:aws:rds:*:123456789012:pg:default*",
                "arn:aws:rds:*:123456789012:subgrp:default"
            ],
            "Condition": {
                "StringEquals": {
                    "rds:DatabaseEngine": "mysql",
                    "rds:DatabaseClass": "db.t2.micro"
                }
            }
        }
    ]
}

Acción sobre cualquier recurso RDS

En el siguiente ejemplo, vemos una política que permite cualquier acción de descripción en cualquier recurso RDS. El símbolo * se utiliza para representar cualquier recurso.

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"AllowRDSDescribe",
         "Effect":"Allow",
         "Action":"rds:Describe*",
         "Resource":"*"
      }
   ]
}

No permitir la eliminación de una instancia de base de datos

La siguiente política no permite que un usuario elimine una instancia de base de datos específica.

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Sid":"DenyDelete1",
         "Effect":"Deny",
         "Action":"rds:DeleteDBInstance",
         "Resource":"arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
      }
   ]
}