Es scheint, dass IAM jetzt für die DB-Verbindung zwischen RDS for MySQL und Aurora verwendet werden kann. Manage access to your RDS for MySQL and Amazon Aurora databases using AWS IAM IAM Database Authentication for MySQL and Amazon Aurora Da das Beispiel Java war, habe ich es mit Python versucht.
Aurora
Öffnen Sie im RDS-Cluster "Cluster ändern" und setzen Sie "DB-Authentifizierung für IAM aktivieren" auf "Ja". Für Aurora unterstützt db.t2.small
die IAM-Datenbankauthentifizierung nicht. Versuchen Sie es mit db.t2.medium
oder höher.
Erstellen Sie einen DB-Benutzer für den IAM-Zugriff und erteilen Sie die erforderlichen Berechtigungen.
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@'%';
Für die IAM-Datenbankauthentifizierung ist eine SSL-Verbindung erforderlich. Laden Sie daher den öffentlichen Schlüssel herunter und platzieren Sie ihn in einem geeigneten Pfad auf ec2. http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.html#Aurora.Overview.Security.SSL
IAM Gewähren Sie der IAM-Rolle die Berechtigung, indem Sie sich auf das Dokument beziehen. Die Ressourcen-ID wird für den Cluster angegeben.
{
"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',)]
das ist alles.
Recommended Posts