diff --git a/eutester4j/TestSuites/IAMSuite.xml b/eutester4j/TestSuites/IAMSuite.xml index d08f10a5..237f4101 100644 --- a/eutester4j/TestSuites/IAMSuite.xml +++ b/eutester4j/TestSuites/IAMSuite.xml @@ -3,11 +3,12 @@ + + - - + diff --git a/eutester4j/build.xml b/eutester4j/build.xml index e8fb8563..dea1d29a 100644 --- a/eutester4j/build.xml +++ b/eutester4j/build.xml @@ -12,13 +12,16 @@ + + + - + diff --git a/eutester4j/com/eucalyptus/tests/awssdk/Eutester4j.java b/eutester4j/com/eucalyptus/tests/awssdk/Eutester4j.java index 7dc9060e..6f6569f1 100644 --- a/eutester4j/com/eucalyptus/tests/awssdk/Eutester4j.java +++ b/eutester4j/com/eucalyptus/tests/awssdk/Eutester4j.java @@ -37,10 +37,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.util.*; import java.util.concurrent.TimeUnit; class Eutester4j { @@ -943,11 +940,13 @@ public void beforeRequest(final Request request) { int start = newKeys.lastIndexOf("AccessKeyId:") + 13; int end = newKeys.lastIndexOf(",Status"); String accessKey = newKeys.substring(start, end); + print("Access Key: " + accessKey); // get secretkey from key gen result request start = newKeys.lastIndexOf("SecretAccessKey:") + 17; end = newKeys.lastIndexOf(",CreateDate:"); String secretKey = newKeys.substring(start, end); + print("Secret Key: " + secretKey); return new BasicAWSCredentials(accessKey, secretKey); } @@ -986,7 +985,39 @@ public void beforeRequest(final Request request) { .withPath("/"); youAre.createUser(createUserRequest); - assertThat((numUsersBefore < youAre.listUsers().getUsers().size()),"Failed to create user " + userName); + assertThat((numUsersBefore < youAre.listUsers().getUsers().size()), "Failed to create user " + userName); print("Created new user " + userName + " in account " + accountName); } + + public static Map getUserKeys(final String accountName, String userName){ + Map keys = new HashMap<>(); + + AWSCredentialsProvider awsCredentialsProvider = new StaticCredentialsProvider( new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); + final YouAreClient youAre = new YouAreClient(awsCredentialsProvider); + youAre.setEndpoint(IAM_ENDPOINT); + + youAre.addRequestHandler(new AbstractRequestHandler() { + public void beforeRequest(final Request request) { + request.addParameter("DelegateAccount", accountName); + } + }); + + CreateAccessKeyRequest createAccessKeyRequest = new CreateAccessKeyRequest().withUserName(userName); + String newKeys = String.valueOf(youAre.createAccessKey(createAccessKeyRequest)); + print("Created new access key for user " + userName); + + // get accesskey from key gen result request + int start = newKeys.lastIndexOf("AccessKeyId:") + 13; + int end = newKeys.lastIndexOf(",Status"); + String accessKey = newKeys.substring(start, end); + keys.put("ak", accessKey); + + // get secretkey from key gen result request + start = newKeys.lastIndexOf("SecretAccessKey:") + 17; + end = newKeys.lastIndexOf(",CreateDate:"); + String secretKey = newKeys.substring(start, end); + keys.put("sk", secretKey); + + return keys; + } } diff --git a/eutester4j/com/eucalyptus/tests/awssdk/TestAdminRoles.java b/eutester4j/com/eucalyptus/tests/awssdk/TestAdminRoles.java index 859d27cc..c0666067 100644 --- a/eutester4j/com/eucalyptus/tests/awssdk/TestAdminRoles.java +++ b/eutester4j/com/eucalyptus/tests/awssdk/TestAdminRoles.java @@ -31,6 +31,7 @@ import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient; import com.amazonaws.services.securitytoken.model.AssumeRoleRequest; import com.amazonaws.services.securitytoken.model.AssumeRoleResult; +import com.github.sjones4.youcan.youare.model.Account; import org.testng.annotations.Test; import static com.eucalyptus.tests.awssdk.Eutester4j.*; @@ -54,16 +55,6 @@ public class TestAdminRoles { " }]\n" + "}"; - private final String assumeRolePolicy = "{\n" + - " \"Statement\": [ {\n" + - " \"Effect\": \"Allow\",\n" + - " \"Principal\": {\n" + - " \"AWS\": [ \"arn:aws:iam::" + ACCOUNT_ID + ":user/admin\" ]\n" + - " },\n" + - " \"Action\": [ \"sts:AssumeRole\" ]\n" + - " } ]\n" + - "}"; - private AmazonEC2 getEc2ClientUsingRole(final String roleArn, final String sessionName, final String accessKey, @@ -101,8 +92,6 @@ public void test() throws Exception { testInfo(this.getClass().getSimpleName()); getCloudInfo(); - - // create non-admin user in non-euca account then get credentials and connection for user final String user = NAME_PREFIX + "user"; final String account = NAME_PREFIX + "account"; @@ -128,7 +117,7 @@ public void run() { print("Creating role with name: " + roleName); final String roleArn = youAre.createRole(new CreateRoleRequest() .withRoleName(roleName) - .withAssumeRolePolicyDocument(assumeRolePolicy) + .withAssumeRolePolicyDocument(getAssumeRolePolicy(getAccountID("eucalyptus"))) ).getRole().getArn(); print("Created role with ARN " + roleArn); @@ -204,4 +193,28 @@ public void run() { } } + public String getAccountID(String account){ + String accountId = null; + + List accounts = youAre.listAccounts().getAccounts(); + for (Account a : accounts) { + if (a.getAccountName().equals(account)){ + accountId = a.getAccountId(); + } + } + return accountId == null ? "no account named " + account + " was found." : accountId; + } + + public String getAssumeRolePolicy(String accountId){ + return "{\n" + + " \"Statement\": [ {\n" + + " \"Effect\": \"Allow\",\n" + + " \"Principal\": {\n" + + " \"AWS\": [ \"arn:aws:iam::" + accountId + ":user/admin\" ]\n" + + " },\n" + + " \"Action\": [ \"sts:AssumeRole\" ]\n" + + " } ]\n" + + "}"; + } + } \ No newline at end of file diff --git a/eutester4j/com/eucalyptus/tests/awssdk/TestCannedRoles.java b/eutester4j/com/eucalyptus/tests/awssdk/TestCannedRoles.java new file mode 100644 index 00000000..b2f3c194 --- /dev/null +++ b/eutester4j/com/eucalyptus/tests/awssdk/TestCannedRoles.java @@ -0,0 +1,308 @@ +/************************************************************************* + * Copyright 2009-2013 Eucalyptus Systems, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see http://www.gnu.org/licenses/. + * + * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta + * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need + * additional information or have any questions. + ************************************************************************/ +package com.eucalyptus.tests.awssdk; + +import com.amazonaws.Request; +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.AWSCredentialsProvider; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.auth.BasicSessionCredentials; +import com.amazonaws.handlers.AbstractRequestHandler; +import com.amazonaws.internal.StaticCredentialsProvider; +import com.amazonaws.services.ec2.AmazonEC2; +import com.amazonaws.services.ec2.AmazonEC2Client; +import com.amazonaws.services.ec2.model.CreateKeyPairRequest; +import com.amazonaws.services.ec2.model.DescribeKeyPairsRequest; +import com.amazonaws.services.ec2.model.KeyPairInfo; +import com.amazonaws.services.identitymanagement.model.*; +import com.amazonaws.services.securitytoken.AWSSecurityTokenService; +import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient; +import com.amazonaws.services.securitytoken.model.AssumeRoleRequest; +import com.amazonaws.services.securitytoken.model.AssumeRoleResult; +import com.github.sjones4.youcan.youare.YouAreClient; +import com.github.sjones4.youcan.youare.model.Account; +import com.github.sjones4.youcan.youare.model.CreateAccountRequest; +import com.github.sjones4.youcan.youconfig.YouConfigClient; +import com.github.sjones4.youcan.youconfig.model.ComponentInfo; +import com.github.sjones4.youcan.youprop.YouPropClient; +import com.github.sjones4.youcan.youprop.model.Property; +import com.github.sjones4.youcan.youserv.YouServClient; +import com.github.sjones4.youcan.youserv.model.DescribeServicesRequest; +import com.github.sjones4.youcan.youserv.model.ServiceStatus; +import org.testng.annotations.Test; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static com.eucalyptus.tests.awssdk.Eutester4j.*; +import static com.eucalyptus.tests.awssdk.Eutester4j.youAre; + +/** + * This test verifies the functionality of https://eucalyptus.atlassian.net/browse/EUCA-8156, EUCA-8157, and EUCA-8158 + * "Canned Roles": resource-admin, infrastructure-admin and account-admin + */ +public class TestCannedRoles { + + private AWSCredentialsProvider credentialsProvider(final String roleArn, + final String sessionName, + final String accesskey, + final String secretkey) { + final AWSCredentialsProvider creds = new AWSCredentialsProvider() { + @Override + public AWSCredentials getCredentials() { + final AWSSecurityTokenService sts = new AWSSecurityTokenServiceClient(new BasicAWSCredentials(accesskey, secretkey)); + sts.setEndpoint(TOKENS_ENDPOINT); + final AssumeRoleResult assumeRoleResult = sts.assumeRole(new AssumeRoleRequest() + .withRoleArn(roleArn) + .withRoleSessionName(sessionName) + ); + + assertThat(assumeRoleResult.getAssumedRoleUser().getAssumedRoleId().endsWith(sessionName), "Unexpected assumed role id: " + assumeRoleResult.getAssumedRoleUser().getAssumedRoleId()); + assertThat(assumeRoleResult.getAssumedRoleUser().getArn().endsWith(sessionName), "Unexpected assumed role arn: " + assumeRoleResult.getAssumedRoleUser().getArn()); + + return new BasicSessionCredentials( + assumeRoleResult.getCredentials().getAccessKeyId(), + assumeRoleResult.getCredentials().getSecretAccessKey(), + assumeRoleResult.getCredentials().getSessionToken() + ); + } + + @Override + public void refresh() { + } + }; + return creds; + } + + private YouAreClient getYouAreClient(final AWSCredentialsProvider credentials) { + final YouAreClient euare = new YouAreClient(credentials); + euare.setEndpoint(IAM_ENDPOINT); + return euare; + } + + private AmazonEC2 getEc2Client(final AWSCredentialsProvider credentials) { + final AmazonEC2 ec2 = new AmazonEC2Client(credentials); + ec2.setEndpoint(EC2_ENDPOINT); + return ec2; + } + + public String getAccountID(String account) { + String accountId = null; + List accounts = youAre.listAccounts().getAccounts(); + for (Account a : accounts) { + if (a.getAccountName().equals(account)) { + accountId = a.getAccountId(); + } + } + return accountId; + } + + public String getAssumeRolePolicy(String accountId){ + return "{\n" + + " \"Statement\": [ {\n" + + " \"Effect\": \"Allow\",\n" + + " \"Principal\": {\n" + + " \"AWS\": [ \"arn:aws:iam::" + accountId + ":user/admin\" ]\n" + + " },\n" + + " \"Action\": [ \"sts:AssumeRole\" ]\n" + + " } ]\n" + + "}"; + } + + @Test + public void test() throws Exception { + + testInfo(this.getClass().getSimpleName()); + getCloudInfo(); + final String account = NAME_PREFIX + "account"; + + final List cleanupTasks = new ArrayList(); + try { + // create an account and a user + createAccount(account); + + cleanupTasks.add(new Runnable() { + @Override + public void run() { + deleteAccount(account); + } + }); + + // Update default roles to permit account + final String aaAssumeRolePolicy = youAre.getRole(new GetRoleRequest().withRoleName("AccountAdministrator")).getRole().getAssumeRolePolicyDocument(); + assertThat(aaAssumeRolePolicy != null, "Expected assume role policy for account administrator"); + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Resetting assume role policy for account administrator"); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("AccountAdministrator") + .withPolicyDocument(aaAssumeRolePolicy)); + } + }); + + final String iaAssumeRolePolicy = youAre.getRole(new GetRoleRequest().withRoleName("InfrastructureAdministrator")).getRole().getAssumeRolePolicyDocument(); + assertThat(aaAssumeRolePolicy != null, "Expected assume role policy for account administrator"); + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Resetting assume role policy for infrastructure administrator"); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("InfrastructureAdministrator") + .withPolicyDocument(iaAssumeRolePolicy)); + } + }); + + final String raAssumeRolePolicy = youAre.getRole(new GetRoleRequest().withRoleName("ResourceAdministrator")).getRole().getAssumeRolePolicyDocument(); + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Resetting assume role policy for resource administrator"); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("ResourceAdministrator") + .withPolicyDocument(raAssumeRolePolicy)); + } + }); + + print("Updating assume role policy for default roles."); + final String assumeRolePolicy = getAssumeRolePolicy(getAccountID(account)); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("AccountAdministrator") + .withPolicyDocument(assumeRolePolicy)); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("InfrastructureAdministrator") + .withPolicyDocument(assumeRolePolicy)); + youAre.updateAssumeRolePolicy(new UpdateAssumeRolePolicyRequest() + .withRoleName("ResourceAdministrator") + .withPolicyDocument(assumeRolePolicy)); + + Map accessKeys = getUserKeys("eucalyptus","admin"); + final String accessKey = accessKeys.get("ak"); + final String secretKey = accessKeys.get("sk"); + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Removing user key for account " + account); + youAre.deleteAccessKey(new DeleteAccessKeyRequest(accessKey)); + } + }); + + // Test Admin Role + final String testadminRoleAccount = NAME_PREFIX + "admin-role-account"; + YouAreClient euare = getYouAreClient(credentialsProvider("arn:aws:iam::eucalyptus:role/eucalyptus/AccountAdministrator", "session-name-here", accessKey, secretKey)); + euare.createAccount(new CreateAccountRequest().withAccountName(testadminRoleAccount)); + assertThat(getAccountID(testadminRoleAccount) != null, "Expected account ID"); + + List result = new ArrayList<>(); + List accounts = euare.listAccounts().getAccounts(); + for (Account a : accounts) { + if (a.getAccountName().equals(testadminRoleAccount)) { + result.add(a); + } + } + assertThat(!result.isEmpty(), "expected account " + testadminRoleAccount); + + cleanupTasks.add(new Runnable() { + @Override + public void run() { + deleteAccount(testadminRoleAccount); + } + }); + + // Test Infrastructure Admin Role + final YouServClient youServ = new YouServClient(credentialsProvider("arn:aws:iam::eucalyptus:role/eucalyptus/InfrastructureAdministrator", "session-name-here", accessKey, secretKey)); + youServ.setEndpoint(EC2_ENDPOINT.substring(0, EC2_ENDPOINT.length() - 21) + "/services/Empyrean/"); + List serviceStatuses = youServ.describeServices(new DescribeServicesRequest()).getServiceStatuses(); + assertThat(!serviceStatuses.isEmpty(), "Expected Services"); + + final YouPropClient youProp = new YouPropClient(credentialsProvider("arn:aws:iam::eucalyptus:role/eucalyptus/InfrastructureAdministrator", "session-name-here", accessKey, secretKey)); + youProp.setEndpoint(EC2_ENDPOINT.substring(0, EC2_ENDPOINT.length() - 21) + "/services/Properties/"); + List properties = youProp.describeProperties().getProperties(); + assertThat(!properties.isEmpty(), "Expected Properties"); + + final YouConfigClient youConfig = new YouConfigClient(credentialsProvider("arn:aws:iam::eucalyptus:role/eucalyptus/InfrastructureAdministrator", "session-name-here", accessKey, secretKey)); + youConfig.setEndpoint(EC2_ENDPOINT.substring(0, EC2_ENDPOINT.length() - 21) + "/services/Configuration/"); + List components = youConfig.describeComponents().getComponentInfos(); + assertThat(!components.isEmpty(), "Expected Components"); + + // Test Resource Admin Role first create an account and add a keypair + final String resourceAccount = NAME_PREFIX + "resource-account"; + final String keyName = NAME_PREFIX + "resource-key"; + createAccount(resourceAccount); + + print("Creating credentials for " + resourceAccount); + AWSCredentialsProvider awsCredentialsProvider = new StaticCredentialsProvider( new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY)); + final YouAreClient youAre = new YouAreClient(awsCredentialsProvider); + youAre.setEndpoint(IAM_ENDPOINT); + + youAre.addRequestHandler(new AbstractRequestHandler() { + public void beforeRequest(final Request request) { + request.addParameter("DelegateAccount", resourceAccount); + } + }); + youAre.createAccessKey(new CreateAccessKeyRequest().withUserName("admin")); + assertThat(awsCredentialsProvider != null, "Expected resource account credentials"); + + AmazonEC2 ec2client = getEc2Client(awsCredentialsProvider); + ec2client.createKeyPair(new CreateKeyPairRequest(keyName)); + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Deleting keypair in resource account: " + resourceAccount); + deleteKeyPair(keyName); + } + }); + + AmazonEC2 userEc2client = getEc2Client(credentialsProvider("arn:aws:iam::eucalyptus:role/eucalyptus/ResourceAdministrator", "session-name-here", accessKey, secretKey)); + List found = new ArrayList<>(); + List keypairResult = userEc2client.describeKeyPairs(new DescribeKeyPairsRequest().withKeyNames(keyName)).getKeyPairs(); + for(KeyPairInfo k : keypairResult){ + if (k.getKeyName().equals(keyName)){ + found.add(k); + } + } + assertThat(!found.isEmpty(),"Expected keypair"); + + + cleanupTasks.add(new Runnable() { + @Override + public void run() { + deleteAccount(resourceAccount); + } + }); + + print("Test complete"); + } finally { + // Attempt to clean up anything we created + Collections.reverse(cleanupTasks); + for (final Runnable cleanupTask : cleanupTasks) { + try { + cleanupTask.run(); + } catch (NoSuchEntityException e) { + print("Entity not found during cleanup."); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } +} \ No newline at end of file diff --git a/eutester4j/com/eucalyptus/tests/awssdk/TestSTSAssumeRole.java b/eutester4j/com/eucalyptus/tests/awssdk/TestSTSAssumeRole.java index 9cb3a312..cd8079dc 100644 --- a/eutester4j/com/eucalyptus/tests/awssdk/TestSTSAssumeRole.java +++ b/eutester4j/com/eucalyptus/tests/awssdk/TestSTSAssumeRole.java @@ -22,8 +22,8 @@ import com.amazonaws.AmazonServiceException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.AWSCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.auth.BasicSessionCredentials; +import com.amazonaws.internal.StaticCredentialsProvider; import com.amazonaws.services.ec2.AmazonEC2; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.DescribeImagesRequest; @@ -34,6 +34,7 @@ import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient; import com.amazonaws.services.securitytoken.model.AssumeRoleRequest; import com.amazonaws.services.securitytoken.model.AssumeRoleResult; +import com.github.sjones4.youcan.youare.YouAreClient; import org.testng.annotations.Test; import java.util.ArrayList; @@ -59,17 +60,39 @@ public class TestSTSAssumeRole { public void STSAssumeRoleTest() throws Exception { testInfo(this.getClass().getSimpleName()); getCloudInfo(); - - final GetUserResult userResult = youAre.getUser(new GetUserRequest()); - assertThat(userResult.getUser() != null, "Expected current user info"); - assertThat(userResult.getUser().getArn() != null, "Expected current user ARN"); - final String userArn = userResult.getUser().getArn(); - print("Got user ARN (will convert account alias to ID if necessary): " + userArn); + final String user = NAME_PREFIX + "user"; + final String account = NAME_PREFIX + "account"; final List cleanupTasks = new ArrayList(); try { // Create role to get a client id final String accountId; + + // create non-admin user in non-euca account then get credentials and connection for user + createAccount(account); + createUser(account, user); + createIAMPolicy(account, user, NAME_PREFIX + "policy", null); + + // get youAre connection for new user + AWSCredentialsProvider awsCredentialsProvider = new StaticCredentialsProvider(getUserCreds(account,user)); + final YouAreClient youAre = new YouAreClient(awsCredentialsProvider); + youAre.setEndpoint(IAM_ENDPOINT); + + cleanupTasks.add(new Runnable() { + @Override + public void run() { + print("Deleting account " + account); + deleteAccount(account); + } + }); + + final GetUserResult userResult = youAre.getUser(new GetUserRequest()); + assertThat(userResult.getUser() != null, "Expected current user info"); + assertThat(userResult.getUser().getArn() != null, "Expected current user ARN"); + final String userArn = userResult.getUser().getArn(); + print("Got user ARN (will convert account alias to ID if necessary): " + userArn); + + { final String roleNameA = NAME_PREFIX + "AssumeRoleTestA"; print("Creating role to determine account number: " + roleNameA); @@ -148,12 +171,12 @@ public void run() { // Describe images using role, no permissions so should see nothing print("Describing images to ensure no permission with role: " + roleName); { - final DescribeImagesResult imagesResult = getImagesUsingRole(roleName, roleArn, "222222222222"); + final DescribeImagesResult imagesResult = getImagesUsingRole(account, user, roleName, roleArn, "222222222222"); assertThat(imagesResult.getImages().size() == 0, "Image found when using role with no permissions"); } // Add policy to role - final String policyName = NAME_PREFIX + "AssumeRoleTest"; + final String policyName = NAME_PREFIX + "AssumeRoleTestPolicy"; print("Adding policy: " + policyName + " to role: " + roleName); youAre.putRolePolicy(new PutRolePolicyRequest() .withRoleName(roleName) @@ -176,7 +199,7 @@ public void run() { // Describe images using role { - final DescribeImagesResult imagesResult = getImagesUsingRole(roleName, roleArn, "222222222222"); + final DescribeImagesResult imagesResult = getImagesUsingRole(account, user, roleName, roleArn, "222222222222"); assertThat(imagesResult.getImages().size() > 0, "Image not found when using role"); final String imageId = imagesResult.getImages().get(0).getImageId(); print("Found image: " + imageId); @@ -185,7 +208,7 @@ public void run() { // Describe images using role with incorrect external id print("Ensuring listing images fails when incorrect external id used with role: " + roleName); try { - getImagesUsingRole(roleName, roleArn, "222222222221"); + getImagesUsingRole(account, user, roleName, roleArn, "222222222221"); assertThat(false, "Expected error due to incorrect external id when assuming role (test must not be run as cloud admin)"); } catch (AmazonServiceException e) { print("Received expected exception: " + e); @@ -207,13 +230,15 @@ public void run() { } } - private AmazonEC2 getEc2ClientUsingRole(final String roleArn, + private AmazonEC2 getEc2ClientUsingRole(final String account, + final String user, + final String roleArn, final String externalId, final String sessionName) { final AmazonEC2 ec2 = new AmazonEC2Client(new AWSCredentialsProvider() { @Override public AWSCredentials getCredentials() { - AWSCredentials creds = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY); + AWSCredentials creds = getUserCreds(account,user); final AWSSecurityTokenService sts = new AWSSecurityTokenServiceClient(creds); sts.setEndpoint(TOKENS_ENDPOINT); final AssumeRoleResult assumeRoleResult = sts.assumeRole(new AssumeRoleRequest() @@ -240,8 +265,12 @@ public void refresh() { return ec2; } - private DescribeImagesResult getImagesUsingRole(final String roleName, final String roleArn, String externalId) { - final AmazonEC2 ec2 = getEc2ClientUsingRole(roleArn, externalId, "session-name-here"); + private DescribeImagesResult getImagesUsingRole(final String account, + final String user, + final String roleName, + final String roleArn, + String externalId) { + final AmazonEC2 ec2 = getEc2ClientUsingRole(account, user, roleArn, externalId, "session-name-here"); print("Searching images using role: " + roleName); return ec2.describeImages(new DescribeImagesRequest().withFilters( diff --git a/testcases/cloud_admin/create_user.py b/testcases/cloud_admin/create_user.py index c0db0b19..e99e481d 100755 --- a/testcases/cloud_admin/create_user.py +++ b/testcases/cloud_admin/create_user.py @@ -26,12 +26,7 @@ def CreateUsers(self): allow_all_policy = """{ "Statement": [ { - "Action": "ec2:*", - "Effect": "Allow", - "Resource": "*" - }, - { - "Action": "s3:*", + "Action": "*", "Effect": "Allow", "Resource": "*" }] diff --git a/testcases/cloud_admin/services_up_test.py b/testcases/cloud_admin/services_up_test.py index 9058e1da..1cf68cea 100755 --- a/testcases/cloud_admin/services_up_test.py +++ b/testcases/cloud_admin/services_up_test.py @@ -65,7 +65,7 @@ def wait_for_services_operational(self, timeout=None): try: self.tester = eucaops.Eucaops(config_file=self.args.config_file, password=self.args.password) except Exception, e: - tb = eucaops.get_traceback() + tb = eucaops.Eucaops.get_traceback() last_err = str(tb) + "\n" + str(e) if not self.tester: raise Exception(str(last_err) + 'Could not create tester object after elapsed:' + str(elapsed))