2017-10-17 3 views
1

Ich versuche, ein einfaches JavaScript (im Browser ausgeführt) zu schreiben, das Informationen über meine Beanstalk-Anwendungen mit der Funktion describeApplications erhält. Ich habe das Kontrollkästchen Cognito-Identitätspool mit nicht authentifiziertem Zugriff erstellt und die Richtlinie AWSAlasticBeanstalkReadOnlyAccess der Rolle des Identitätspools hinzugefügt. HierUnauthentifizierter Zugriff auf AWS-Dienste mit Cognito

ist der Code:

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.134.0.min.js"></script> 
<script> 
    AWS.config.region = 'eu-west-1'; // Region 

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
     IdentityPoolId: 'eu-west-1:....', 
    }); 

    var elasticbeanstalk = new AWS.ElasticBeanstalk(); 
    elasticbeanstalk.describeApplications({}, function (err, data) { 
     if (err) { 
      console.log(err); 
      console.log(err.stack); 
     } else { 
      console.log(data); 
     } 
    }); 

Hier wird die Ausgabe in der Konsole ist:

{ResponseMetadata: {…}, Applications: Array(0)} 

Anwendungen Array ist leer! Aber ich habe definitiv Anwendungen in der Region eu-west-1.

Um einen einfachen Test mache ich einen Benutzer erstellt, gleiche Politik und hart codierte Benutzerdaten angebracht statt CognitoIdentityCredentials:

<script src="https://sdk.amazonaws.com/js/aws-sdk-2.134.0.min.js"></script> 
<script> 
    AWS.config.region = 'eu-west-1'; // Region 

    AWS.config.accessKeyId = '...'; 
    AWS.config.secretAccessKey = '...'; 

    var elasticbeanstalk = new AWS.ElasticBeanstalk(); 
    elasticbeanstalk.describeApplications({}, function (err, data) { 
     if (err) { 
      console.log(err); 
      console.log(err.stack); 
     } else { 
      console.log(data); 
     } 
    }); 

Und voila, ich meine Bohnenstengel Anwendungen siehe:

{ResponseMetadata: {…}, Applications: Array(1)} 

Ich habe andere Tests gemacht. Ich habe versucht, S3-Buckets mit unauth zu listen. Zugang und Cognito - es funktioniert auch. Das bedeutet mein Unauth. Rolle ist ordnungsgemäß angebracht und angewendet. Aber ich habe keine Ahnung, warum ich keine Anwendungen in Bohnenstange sehe!

Was mache ich falsch mit nicht authentifiziertem Zugriff und Cognito? Jede Hilfe wird wirklich geschätzt!

Aktualisierung!

Danke Mike Patrick für die richtige Richtung! https://stackoverflow.com/a/46820122/1858818

Ich wechselte zu grundlegenden Authentifizierung Flow und das war es. Hier ist das Werk stück Code:

AWS.config = { 
    apiVersions: { elasticbeanstalk: '2010-12-01' }, 
    region: 'eu-west-1', 
    credentials: new AWS.WebIdentityCredentials({ 
     RoleArn: 'my role arn' 
    }) 
};    

var cognitoidentity = new AWS.CognitoIdentity(), 
    elasticbeanstalk = new AWS.ElasticBeanstalk(); 

var params = { 
    IdentityPoolId: 'my cognito identity pool id', /* required */ 
}; 
cognitoidentity.getId(params, function(err, data) { 
    if (err){ 
     console.log(err, err.stack); // an error occurred 
    } else { 
     var params = { 
      IdentityId: data.IdentityId 
     }; 
     cognitoidentity.getOpenIdToken(params, function(err, data) { 
      if (err) { 
       console.log(err, err.stack); // an error occurred 
      } else { 

       AWS.config.credentials.params.WebIdentityToken = data.Token; 

       //here we go, elasticbeanstalk functions work as expected 

      } 
     });   
    } 
}); 
+1

Wie sieht Ihre IAM-Richtlinie für diese Rolle aus? Scheint so, als ob du irgendwo in deiner 'Ressource' einen Platzhalter verpasst hast. – arjabbar

+0

Dies ist die Standard-AWS-Richtlinie AWSElasticBeanstalkReadOnlyAccess mit "Ressource": "*". Angehängt dieselbe Richtlinie für Testbenutzer und Cognito-Rolle. –

+0

Die Tatsache, dass Sie eine Antwort sehen, wenn auch mit einem leeren Array, ist ein Zeichen für mich, dass es funktioniert. Andernfalls würden Sie eine Ausnahme sehen. Doppel-und Triple-Check die Region? – jarmod

Antwort

1

Ich bin nicht überzeugt, dass Sie etwas falsch machen; Ich konnte diese Arbeit auch nicht machen. Ich vermute, Sie könnten ein Opfer von Amazon sein, das Sie vor sich selbst "beschützt".

Von http://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html unter „Zugriffsrichtlinien“:

Für zusätzliche Sicherheit Schutz gilt Amazon Cognito eine Rahmen-down Politik Anmeldeinformationen von GetCredentialForIdentity zu vended verhindern den Zugriff auf andere Dienste als diese zu Ihrem unauthenticated Benutzer:

... Liste der Dienste, die nicht elastisch Bohnenstange enthält ...

Wenn Sie für Ihre nicht authentifizierten Benutzer Zugriff auf andere als diese Dienste benötigen, müssen Sie den grundlegenden Authentifizierungsablauf verwenden.

Dies dass vorzuschlagen scheint unabhängig davon, welche Politik Sie Ihre Cognito Unauthenticated Rolle anhängen, AWS wird, „es Umfang nach unten“.

Wenn dies der Fall ist, sollten Sie wie einige Beweise für ein NotAuthorizedException (oft in einem Antwort-Header), um zu sehen, aber ich konnte keine finden.

Verwandte Themen