有没有办法让连接到访问密钥您正在使用通过Java访问AWS凭据的用户名 ? 我希望能够得到多数民众赞成在IAM用户部分定义的用户名,这样我可以设置用户特定桶/文件夹,然后动态地指向基于访问密钥的用户名的脚本给他们(这样我就可以改变在未来的访问密钥,如果必要的话,在不改变桶/文件夹名称)。
Answer 1:
但是现在我发现从Java中的AWS访问凭据获取用户名的一个更好的方法。 前面提到的答案是简单的工作,因为周围没有其他的解决方案在当时提供。 这种新方法实际上是一部分AWS SDK的Java (它可能不是在原来的职位时)。
无论如何,来获取用户名,只需使用以下行: iamServ.getUser().getUser().getUserName();
这将返回一个可以存储到一个变量的字符串。 我不知道是什么原因,他们设置它,所以你必须调用.getUser()
两次,但他们做到了。 你可以在第二后使用其他方法.getUser()
包括: .getUserID()
.getArn()
.getPath()
和.getCreateDate()
注:我要离开旧的答案,因为它仍然可以工作,但现在这是更好的解决方案。
Answer 2:
再一次,我回答我的问题......我好像总是在回答对我自己有一次我问别人怎么做的更好?
无论如何,你会发现下面的代码将允许您为当前正在使用的访问凭证提取用户名:
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, }, }
否则,显示的代码返回用户名字符串中的所有额外的“垃圾”来代替。 无论如何,我希望这可以帮助其他人在那里,可能会寻找一个解决方案,以获得当前访问ID的用户名。 如果有人知道另一种更好的方法,请让我们知道了意见。