Essayez l'authentification de base de données IAM à partir de Python

Contexte

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.

environnement

Préparation

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

Création d'un utilisateur DB

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

Télécharger la clé publique

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

Lien

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.

référence

Recommended Posts

Essayez l'authentification de base de données IAM à partir de Python
Essayez Python
Connectez-vous à la base de données utf8mb4 à partir de python
Essayez d'utiliser Amazon DynamoDB à partir de Python
Authentification sans mot de passe avec RDS et IAM (Python)
Vérifiez l'authentification SAML de cybozu.com à partir de python (pysaml2)
Essayez d'appeler Python depuis Ruby avec une économie
Python> essayez: / sauf:
sql à sql
MeCab de Python
Authentification Python Https
Essayez d'utiliser la bibliothèque Studio à partir de Python. [Anim Save]
Hit AppSync certifié Cognito par derrière avec la certification IAM
Essayez d'accéder à l'API YQL directement depuis Python 3
Utilisez Thingsspeak de Python
Touchez MySQL depuis Python 3
Essayez de gratter avec Python.
Exploitez Filemaker depuis Python
Utiliser fluentd de python
python essayez ~ sauf ~ autre
Accéder à bitcoind depuis python
Changements de Python 3.0 à Python 3.5
Changements de Python 2 à Python 3.0
Python depuis ou import
Utilisez MySQL depuis Python
Exécutez Python à partir d'Excel
Installer Python à partir de la source
Exécuter des commandes depuis Python
Essayez Debian + Python 3.4 + django1.7 ……
Faites fonctionner le neutron de Python!
Essayez gRPC en Python
Utiliser MySQL depuis Python
Faire fonctionner LXC depuis Python
Manipuler riak depuis python
Forcer Python depuis Fortran
Utilisez BigQuery depuis Python.
Essayez 9 tranches en Python
Exécuter la commande depuis Python
Essayez d'utiliser Tweepy [Python2.7]
Obtenir des données de la base de données via ODBC avec Python (Access)
Python essayer / sauf mémo
[Python] Lire depuis Stdin
Utilisez mecab-ipadic-neologd de Python
Aplatir à l'aide du rendement Python de
Appeler CPLEX depuis Python (DO cplex)
Deep Python appris de DEAP
Publier de Python vers Slack
Fonctionnalités de grammaire ajoutées à partir de Python3.6
Flirter de PHP à Python
[Python] Essayez d'utiliser le canevas de Tkinter
Authentification BASIC avec bouteille Python
Rendre MeCab disponible à partir de Python 3
Essayez de comprendre Python soi
Essayez la sortie Python avec Haxe 3.2
Informations obtenues à partir de tweet_id (Python)
Essayez d'utiliser Kubernetes Client -Python-
OCR à partir de PDF en Python
Exécutez le script illustrator à partir de python
Utiliser MySQL depuis Anaconda (python)
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)