1

Ich versuche eine einfache Instanz von AWS Cognito zu erhalten. Ich habe die föderierte Identität erstellt, wobei sowohl authentifizierten als auch nicht authentifizierten Benutzern eine Rolle zugewiesen wurde. Ich versuche, um die Identität in Python zu verbinden, aber ich erhalte die Fehlermeldung:NoCredentialsError beim Verbinden mit Cognito mit Python und boto3

NoCredentialsError: Nicht imstande, Anmeldeinformationen zu lokalisieren

Ich bin auf jeden Fall das Recht IdentityId verwenden, da ich es direkt aus dem Code-Beispiele AWS-Konsole kopiert generiert für dich. Ich bin mit dem folgenden Code:

import boto3 
identity = boto3.client('cognito-identity', 
         region_name='us-east-1') 

response = identity.describe_identity(IdentityId='us-east-1:XXXX') 
print (response['IdentityId']) 

Wenn ich stattdessen versuchen, Anmeldeinformationen abzurufen ich die folgende Fehlermeldung erhalten:

ClientError: Ein Fehler ist aufgetreten (ResourceNotFoundException), wenn der GetCredentialsForIdentity Betrieb Aufruf: Identität ‚us- Ost-1: XXXXXX 'nicht gefunden.

Mit diesem Code:

import boto3 
identity = boto3.client('cognito-identity', 
         region_name='us-east-1') 

response = identity.get_credentials_for_identity(IdentityId='us-east-1:XXXXX') 
access_key = response['Credentials']['AccessKeyId'] 
secret_key = response['Credentials']['SecretKey'] 

print (access_key) 
print (secret_key) 

Ich sollte auch beachten, dass, wenn ich die Identität-Client einen Zugriffsschlüssel und geheimen erstellen noch ich den zweiten Fehler hier beschrieben, aber in beiden Szenarien. Soweit ich weiß, sollte ich diese Anmeldeinformationen angeben müssen, aber ich habe es trotzdem versucht.

Antwort

2

Die Cognito-Konsole generiert keine Identitäts-ID für Sie, sie generiert eine Identität Pool ID. Wenn Sie das als Identitäts-ID verwenden, wäre das das Problem, es wird nicht gefunden. In diesem Fall müssten Sie eine Identitäts-ID generieren (mit der GetId-API) und diese stattdessen verwenden und diese ID zum Abrufen der Anmeldeinformationen verwenden.

+0

tausend Mal danke :) – LaserJesus

+0

Wissen Sie, wie Sie dann die abgerufenen Anmeldeinformationen verwenden, um das API Gateway mit Python aufzurufen? Ich hoffe, dass die boto3-Bibliothek eine Möglichkeit hat, sich um diesen Signiervorgang zu kümmern, aber ich habe nicht viel Glück mit meinen anderen Fragen: http://stackoverflow.com/questions/37336286/how-do-i-call -an-api-Gateway-mit-cognito-Anmeldeinformationen-in-Python – LaserJesus