2012-11-28 44 views
1

有沒有辦法讓用戶名附加到訪問密鑰您用於通過Java訪問AWS的憑據?我希望能夠獲得在IAM Users部分中定義的用戶名,以便我可以設置用戶特定的桶/文件夾,然後根據訪問鍵的用戶名動態地將腳本指向它們(這樣我就可以在必要時更改訪問密鑰,而不更改存儲桶/文件夾名稱)。從Java的亞馬遜訪問密鑰獲取用戶名

回答

1

我現在發現了一個更好的從Java中的AWS Access憑證獲取用戶名的方法。前面提到的答案是一個簡單的工作,因爲當時沒有提供其他解決方案。這種新方法實際上是AWS SDK for Java的一部分(它可能不是原始帖子的時間)。

無論如何,來獲取用戶名,只需使用以下行: iamServ.getUser().getUser().getUserName();

這將返回一個可以存儲到一個變量的字符串。我不確定他們爲什麼設置它,所以你必須撥打.getUser()兩次,但他們確實。您可以在第二個.getUser()後使用的其他方法包括:.getUserID(),.getArn(),.getPath().getCreateDate()

注意:我離開舊的答案,因爲它仍然有效,但現在這是更好的解決方案。

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, }, }

否則顯示的代碼返回用戶名,而不是所有的字符串中的額外的「垃圾」。無論如何,我希望這可以幫助那些可能正在尋找獲取當前訪問標識的用戶名的解決方案的其他人。如果有人知道另一種更好的方法,請在評論中告訴我們。