Comparez les prix des domaines et des services informatiques des vendeurs du monde entier

Se connecter au déplacement rouge en utilisant Python à travers le rôle de B. IAM

j'utilise sqlalchemy et psycopg2 Pour la connexion python à redshift.


engine = create_engine/'postgresql://user:password@hostname:port/database_name'/


Je veux éviter d'utiliser votre mot de passe pour vous connecter à redshift et en utilisant le rôle IAM.
Invité:

Dominique

Confirmation de:

AWS Offre la possibilité de demander des informations d'identification temporaires d'accéder au changement de cluster rouge. Boto3 met en oeuvre
get_cluster_credentials

, Vous permettant de faire quelque chose comme le suivant. Assurez-vous d'exécuter ce qui précède
https://docs.aws.amazon.com/re ... .html
En mettant en place des utilisateurs et des rôles IAM.


def db_connection//:
logger = logging.getLogger/__name__/

RS_PORT = 5439
RS_USER = 'myDbUser'
DATABASE = 'myDb'
CLUSTER_ID = 'myCluster'
RS_HOST = 'myClusterHostName'

client = boto3.client/'redshift'/

cluster_creds = client.get_cluster_credentials/DbUser=RS_USER,
DbName=DATABASE,
ClusterIdentifier=CLUSTER_ID,
AutoCreate=False/

try:
conn = psycopg2.connect/
host=RS_HOST,
port=RS_PORT,
user=cluster_creds['DbUser'],
password=cluster_creds['DbPassword'],
database=DATABASE
/
return conn
except psycopg2.Error:
logger.exception/'Failed to open database connection.'/

Ernest

Confirmation de:

AWS ne fournit pas une coquille confortable pour IAM creds dans python, Comment ça se fait pour leur chauffeur JDBC. Vous devez faire appel de l'appel de fin GetClusterCredentials manuellement, puis transférer le nom d'utilisateur et le mot de passe renvoyés dans
create_engine

. Regarde quelque chose comme:


def get_redshift_credentials//:
role_creds = get_role_credentials//
client = boto3.client/
'redshift',
region_name=CLUSTER_REGION,
aws_access_key_id=role_creds['AccessKeyId'],
aws_secret_access_key=role_creds['SecretAccessKey'],
aws_session_token=role_creds['SessionToken'],
/
response = client.get_cluster_credentials/
DbUser=PGUSER,
ClusterIdentifier=CLUSTER_IDENTIFIER,
/
return response

creds = get_redshift_credentials//
engine = create_engine/'postgresql://{creds.DbUser}:{creds.DbPassword}@hostname:port/database_name'.format/creds//

Gabriel

Confirmation de:

Utilisateurs AWS IAM diffèrent des utilisateurs de la base de données Redshift. Même si Redshift est un /Très loin/ relatif postgres, Il ne se connecte pas encore sans mot de passe, afaik.

EDIT:

Ma réponse n'est plus applicable, vérifiez d'autres réponses à la présence de fragments de code appropriés.

Pour répondre aux questions, connectez-vous ou registre