mercredi 5 août 2015

"Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied" when launching ec2 instance from Android

I m making an app in android which will launch Ec2 instances on AWS cloud on button click, I have given all the information required in the APIs called to perform the action, but for some reason its giving an error.

Here is the code i m using to authenticate and launch,

   private void initClients() {
    CognitoCachingCredentialsProvider credentials = new CognitoCachingCredentialsProvider(
            getApplicationContext(),
            "xxxxxxxxxxxxxxx",
            "us-east-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "arn:aws:iam::xxxxxxxxxxx:role/Cognito_GetITAuth_Role",
            "arn:aws:iam::xxxxxxxxxxx:role/Cognito_GetITUnauth_Role",
            Regions.US_EAST_1);

    ec2 = new AmazonEC2Client(credentials);
    Region usWest2 = Region.getRegion(Regions.US_EAST_1);
    ec2.setRegion(usWest2); 
}


         public void onClick(View v) {

                //Credential provider
                try
                {
                      initClients();
                }
                catch (Exception e) {
                    throw new AmazonClientException(Exception e)
                  //
                }

                // TODO Auto-generated method stub

                //launch the ec2 instance
                RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
                //put in specifications 

                      runInstancesRequest.withImageId(OS)
                                         .withInstanceType(Type)
                                         .withMinCount(numInst)
                                         .withMaxCount(numInst)
                                         .withKeyName("Ec2Launch")
                                         .withSecurityGroups("default");

                      //launch Ec2 Instance
                      System.out.println("Request Processed");
                      System.out.println("Launching...");
                      ec2.runInstances(runInstancesRequest);
                    //RunInstancesResult runInstancesResult = ec2.runInstances(runInstancesRequest);
                    System.out.println(numInst+" "+Type+" Ec2 Instance Launched");  

and this is the Error I m getting in my android app log

08-05 21:24:32.513: I/System.out(559): Request Processed 08-05 21:24:32.513: I/System.out(559): Launching... 08-05 21:24:34.013: D/dalvikvm(559): GC_CONCURRENT freed 1341K, 54% free 3508K/7495K, external 1674K/3699K, paused 7ms+6ms

08-05 21:24:37.643: E/AndroidRuntime(559): FATAL EXCEPTION: main 08-05 21:24:37.643: E/AndroidRuntime(559): com.amazonaws.AmazonServiceException: Not authorized to perform sts:AssumeRoleWithWebIdentity (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 603e12c3-3bb8-11e5-82fa-bfa5024e2360) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:710) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:385) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.invoke(AWSSecurityTokenServiceClient.java:875) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient.assumeRoleWithWebIdentity(AWSSecurityTokenServiceClient.java:496) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithSts(CognitoCredentialsProvider.java:670) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:555) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:370) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:440) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:76) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.services.ec2.AmazonEC2Client.invoke(AmazonEC2Client.java:8817) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.amazonaws.services.ec2.AmazonEC2Client.runInstances(AmazonEC2Client.java:4023) 08-05 21:24:37.643: E/AndroidRuntime(559): at com.example.getit.Awscomp$1.onClick(Awscomp.java:151) 08-05 21:24:37.643: E/AndroidRuntime(559): at android.view.View.performClick(View.java:2485)

These are the error i m getting, it says Im not authorized to do this operation, I have made two roles in IAM gave them admin access, apart from that I m using cognito credential provider to connect my app to the AWS.

I m not sure where I m going wrong. please help. Also sorry for the format of the error. Let me know if you guys have any questions. Thanks




Aucun commentaire:

Enregistrer un commentaire