Versuchen Sie die IAM-Datenbankauthentifizierung von Python aus

Hintergrund

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.

Umgebung

Vorbereitung

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. RDS_·_AWS_Console.png

Erstellen eines DB-Benutzers

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@'%';

Laden Sie den öffentlichen Schlüssel herunter

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"
      ]
    }
  ]
}

Verbinden

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.

Referenz

Recommended Posts

Versuchen Sie die IAM-Datenbankauthentifizierung von Python aus
Versuchen Sie Python
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Versuchen Sie es mit Amazon DynamoDB von Python
Passwortlose Authentifizierung mit RDS und IAM (Python)
Überprüfen Sie die SAML-Authentifizierung von cybozu.com über Python (pysaml2).
Versuchen Sie, Python von Ruby aus mit Sparsamkeit aufzurufen
Python> try: / außer:
SQL zu SQL
MeCab von Python
Python-HTTP-Authentifizierung
Versuchen Sie, Studio Library von Python aus zu betreiben. [Anim speichern]
Treffen Sie Cognito-zertifiziertes AppSync von hinten mit IAM-Zertifizierung
Versuchen Sie, direkt von Python 3 aus auf die YQL-API zuzugreifen
Verwenden Sie thingspeak aus Python
Berühren Sie MySQL in Python 3
Versuchen Sie es mit Python.
Bedienen Sie Filemaker von Python aus
Verwenden Sie fließend Python
Python versuchen ~ außer ~ sonst
Greifen Sie über Python auf Bitcoind zu
Änderungen von Python 3.0 zu Python 3.5
Änderungen von Python 2 zu Python 3.0
Python aus oder importieren
Verwenden Sie MySQL aus Python
Führen Sie Python aus Excel aus
Installieren Sie Python von der Quelle
Führen Sie Befehle aus Python aus
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Bedienen Sie Neutronen von Python!
Versuchen Sie gRPC in Python
Verwenden Sie MySQL aus Python
Betreiben Sie LXC von Python aus
Manipuliere Riak aus Python
Erzwinge Python aus Fortran
Verwenden Sie BigQuery aus Python.
Probieren Sie 9 Slices in Python aus
Führen Sie den Befehl von Python aus
Versuchen Sie es mit Tweepy [Python2.7]
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
Python versuchen / außer Memo
[Python] Von Stdin lesen
Verwenden Sie mecab-ipadic-neologd von Python
Mit Python abflachen
Rufen Sie CPLEX von Python aus auf (DO cplex)
Deep Python hat von DEAP gelernt
Post von Python nach Slack
Grammatikfunktionen aus Python3.6 hinzugefügt
Flirte von PHP nach Python
[Python] Versuchen Sie, Tkinters Leinwand zu verwenden
BASIC-Authentifizierung mit Python-Flasche
Stellen Sie MeCab in Python 3 zur Verfügung
Versuchen Sie, Python selbst zu verstehen
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Informationen von tweet_id (Python)
Versuchen Sie es mit Kubernetes Client -Python-
OCR aus PDF in Python
Führen Sie das Illustrator-Skript von Python aus
Verwenden Sie MySQL von Anaconda (Python)
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)