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

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

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

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

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

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

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

无论如何,您将找到下面的代码,它将允许您提取您当前使用的访问凭据的用户名:

 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而不是字符串中的所有额外“垃圾”。 无论如何,我希望这可以帮助那些可能正在寻找获得当前访问ID的用户名的解决方案的其他人。 如果有人知道另一个更好的方法,请在评论中告诉我们。

Interesting Posts