从Java中的Amazon Access Key获取用户名

时间:2012-11-28 00:08:24

标签: java username access-keys amazon-iam

是否有办法将用户名附加到访问密钥,以获取您用于通过Java访问AWS的凭据?我希望能够获得 IAM用户部分中定义的用户名,以便我可以设置用户特定的存储桶/文件夹,然后根据访问密钥的用户动态地将脚本指向它们名称(如果需要,我可以在以后更改访问密钥,而无需更改存储桶/文件夹名称。)

2 个答案:

答案 0 :(得分:1)

我现在找到了一种更好的方法,可以通过Java中的AWS Access凭据获取用户名。前面提到的答案是一个简单的解决方法,因为当时没有提供其他解决方案。这个新方法实际上是AWS SDK for Java的一部分(它可能不是原始帖子的时候)。

无论如何,要获取用户名,只需使用以下行: iamServ.getUser().getUser().getUserName();

返回一个可以存储到变量的字符串。我不确定他们为什么设置它所以你必须两次打电话给.getUser(),但他们确实如此。您可以在第二个.getUser()之后使用的其他方法包括:.getUserID().getArn().getPath().getCreateDate()

注意:我留下了旧的答案,因为它仍然有效,但现在这是更好的解决方案。

答案 1 :(得分:0)

我再一次回答自己的问题......一旦我问别人怎么做,我似乎总是更好地自己回答......

无论如何,您可以在下方找到以下代码,以便您提取当前使用的访问凭据的用户名:

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.PropertiesCredentials;
import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient;

public class test {

    private static AmazonIdentityManagementClient iamServ;

    private static void init() throws Exception {
        AWSCredentials credentials = new PropertiesCredentials(test.class.getResourceAsStream("AwsCredentials.properties"));        
        iamServ = new AmazonIdentityManagementClient(credentials);
    }

    public static void main(String[] args) throws Exception {
        init();
        String theUser = iamServ.getUser().toString().substring(27); 
        int userNameEnd = theUser.indexOf(",");
        String userName = theUser.substring(0, userNameEnd);
        System.out.println(userName);
    }
}

执行是粗暴的,但它有效;或者至少在我尝试过的情况下。如果您只使用System.out.println(iamServ.getUser());,则用户名将显示为与此类似:

{User: {Path: /, UserName: UserName, UserId: xxxxxxxxxxxxxxxxxxxxxx, Arn: arn:aws:iam::xxxxxxxxxxx:user/UserName, CreateDate: Day Mon DayNum hr:min:sec Tmz Year, }, }

否则显示的代码会返回 UserName ,而不是所有额外的" junk"在字符串中。无论如何,我希望这可以帮助那些可能正在寻找获得当前访问ID的用户名的解决方案的其他人。如果有人知道另一个更好的方法,请在评论中告诉我们。