Amazon RDS: control de acceso a la base de datos

Un usuario requiere ciertos permisos para acceder a una instancia de base de datos de Amazon RDS. Esto se configura mediante AWS IAM (Identity and Access Management). En este tutorial veremos cómo se realiza esta configuración.

La configuración tiene dos partes.

  • Autenticación

  • Control de acceso

Autenticación

Incluye crear un nombre de usuario, contraseña y generar claves de acceso para el usuario. Puede utilizar una clave de acceso para acceder mediante programación a AWS RDS. Las herramientas SDK y CLI utilizan claves de acceso para iniciar sesión criptográficamente con una solicitud.

También podemos usar el rol de IAM para autenticar al usuario. Pero el rol no está vinculado a ningún usuario específico, sino que cualquier usuario puede asumir temporalmente el rol y realizar la tarea requerida. Después de completar la tarea, el rol se puede revocar y el usuario ya no puede autenticarse.

Control de acceso

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

{
    "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 descriptiva para cualquier recurso RDS. El símbolo * se utiliza para indicar cualquier recurso.

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

Evitar la eliminación de la instancia de base de datos

La política a continuación evita 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"
      }
   ]
}

🚫