Amazon RDS - Contrôle d'accès aux bases de données

Pour accéder à l'instance de base de données Amazon RDS, l'utilisateur a besoin d'autorisations spécifiques. Ceci est configuré à l'aide d'AWS IAM (gestion des identités et des accès). Dans ce tutoriel, nous verrons comment cette configuration est effectuée.

La configuration comprend deux parties.

  • Authentication

  • Contrôle d'accès

Cela implique la création du nom d'utilisateur, du mot de passe et la génération des clés d'accès pour l'utilisateur. Avec l'aide de la clé d'accès, il est possible de créer un accès par programme au service AWS RDS. Les outils SDK et CLI utilisent les clés d'accès pour se connecter de manière cryptographique avec la demande.

Nous pouvons également utiliser un rôle IAM pour authentifier un utilisateur. Mais le rôle n'est pas associé à un utilisateur spécifique, mais tout utilisateur peut assumer temporairement le rôle et effectuer la tâche requise. Une fois la tâche terminée, le rôle peut être révoqué et l'utilisateur perd la capacité d'authentification.

Une fois qu'un utilisateur est authentifié, une politique attachée à cet utilisateur détermine le type de tâches que l'utilisateur peut effectuer. Voici un exemple de politique permettant la création d'une instance de base de données RDS, sur une instance t2.micro pour le moteur de base de données 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"
                }
            }
        }
    ]
}

Action sur toute ressource RDS

Dans l'exemple ci-dessous, nous voyons une stratégie qui autorise toute action de description sur n'importe quelle ressource RDS. Le symbole * est utilisé pour représenter n'importe quelle ressource.

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

Interdire la suppression d'une instance de base de données

La stratégie ci-dessous interdit à un utilisateur de supprimer une instance de base de données spécifique.

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