Une instance RDS en service est joignable dès lors que son point de terminaison est accessible publiquement et que son groupe de sécurité autorise votre source, ou lorsque vous pouvez forger des identifiants pour elle. Les identifiants maîtres et applicatifs se trouvent fréquemment dans Secrets Manager ou dans un script user-data d'EC2, et lorsque l'authentification IAM RDS est activée, un principal disposant de rds-db:connect forge un jeton éphémère sans aucun mot de passe.
Trouver des instances joignables#
aws rds describe-db-instances \
--query 'DBInstances[?PubliclyAccessible==`true`].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port]'
Se connecter#
# IAM authentication: no password, mint a token
TOKEN=$(aws rds generate-db-auth-token --hostname <ep> --port 3306 --username iam_user)
mysql -h <ep> -P 3306 -u iam_user --password="$TOKEN" --enable-cleartext-plugin
# or with credentials recovered from Secrets Manager / user-data
psql "host=<ep> port=5432 dbname=app user=admin password=<pw>"
Notes d'exploitation#
PubliclyAccessibleplus un groupe de sécurité ouvert sur0.0.0.0/0est l'exposition courante ; même sans cela, une instance est joignable depuis une machine EC2 compromise dans le même VPC.- Les jetons d'authentification IAM RDS durent 15 minutes mais peuvent être reforgés indéfiniment tant que la permission tient.
- Les identifiants maîtres récupérés permettent aussi un changement de mot de passe et un accès durable ; mettez cela en balance avec le bruit lié à l'altération du compte.
Outils#
- AWS CLI (
rds describe-db-instances,generate-db-auth-token). - mysql / psql / sqlcmd : clients natifs une fois l'instance joignable.