【问题标题】:Get Username from Amazon Access Key in Java从 Java 中的 Amazon 访问密钥获取用户名
【发布时间】:2023-03-06 15:34:01
【问题描述】:

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

【问题讨论】:

    标签: java amazon-iam access-keys


    【解决方案1】:

    我又一次在回答我自己的问题...一旦我问别人怎么做,我似乎总是更擅长自己回答...

    无论如何,您会发现下面的代码允许您提取当前使用的访问凭据的用户名:

    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 的用户名的人。如果有人知道另一种更好的方法,请在 cmets 中告诉我们。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 2017-10-28
        • 2017-10-02
        • 2010-11-30
        • 1970-01-01
        • 1970-01-01
        • 2019-01-23
        相关资源
        最近更新 更多