Il semble qu'IAM puisse désormais être utilisé pour la connexion de base de données entre RDS pour MySQL et Aurora. Manage access to your RDS for MySQL and Amazon Aurora databases using AWS IAM IAM Database Authentication for MySQL and Amazon Aurora Comme l'exemple était Java, je l'ai essayé à partir de Python.
Aurora
À partir du cluster RDS, ouvrez «Modifier le cluster» et définissez «Activer l'authentification DB pour IAM» sur «Oui». Pour Aurora, db.t2.small
ne prend pas en charge l'authentification de base de données IAM, essayez donc avec db.t2.medium
ou supérieur.
Créez un utilisateur DB pour l'accès IAM et accordez les autorisations requises.
mysql> CREATE USER iam_auth_user@'testdb-cluster.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
mysql> GRANT SELECT ON `testdb`.* TO iam_auth_user@'%';
L'authentification de la base de données IAM nécessite une connexion SSL. Téléchargez la clé publique et placez-la dans un chemin approprié sur ec2. http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.html#Aurora.Overview.Security.SSL
IAM Accordez l'autorité au rôle IAM en vous référant au document. L'ID de ressource est spécifié pour le cluster.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:ap-northeast-1:12345678:dbuser:cluster-12ABC34DEFG5HIJ6KLMNOP78QR/iam_auth_user"
]
}
]
}
iam_db_auth.py
# -*- coding: utf-8 -*-
from __future__ import print_function
import boto3
import mysql.connector
from mysql.connector.constants import ClientFlag
rds = boto3.client('rds', region_name='ap-northeast-1')
user = 'iam_auth_user'
host = 'testdb-cluster.cluster-abcdefghijkl.ap-northeast-1.rds.amazonaws.com'
db_auth_token = rds.generate_db_auth_token(host, 3306, user, 'ap-northeast-1')
config = {
'user': user,
'password': db_auth_token,
'host': host,
'db': 'testdb',
'client_flags': [ClientFlag.SSL],
'ssl_ca': 'rds-combined-ca-bundle.pem'
}
cnx = mysql.connector.connect(**config)
cur = cnx.cursor(buffered=True)
cur.execute('SELECT AURORA_VERSION();')
print(cur.fetchone())
cur.close()
cnx.close()
$ python iam_db_auth.py
[(u'1.12',)]
c'est tout.
Recommended Posts