【问题标题】:How to get accesskey, secretkey using java aws SDK running on EC2如何使用在 EC2 上运行的 java aws SDK 获取 accesskey、secretkey
【发布时间】:2017-05-08 08:40:00
【问题描述】:

在 EC2 上运行时,可以通过 curl 命令访问 accesskey 和 secret key

curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>

这些凭据不是固定不变的,并且会不断变化。

我想知道是否有办法使用aws-java-sdk 获取这些凭据?

我知道这可以做到using boto3 in python。但不知道如何在java中完成相同的操作。

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 aws-java-sdk


    【解决方案1】:

    是的,通过EC2MetadataUtils.getIAMSecurityCredentials() EC2MetadataUtils 是您通过 curl 访问的元数据服务的 Java 适配器,并在 EC2MetadataUtils.IAMSecurityCredential 中公开这些字段。

    签名:

    public static class EC2MetadataUtils.IAMSecurityCredential
    

    字段:

    String accessKeyId 
    String secretAccessKey 
    

    要访问这些字段,请使用EC2MetadataUtils.getIAMSecurityCredentials()

    public static Map<String,EC2MetadataUtils.IAMSecurityCredential> getIAMSecurityCredentials()
    

    文档:


    这超出了这个问题的范围,但还值得注意的是,如果您在此实例上使用 AWS SDK for Java 的这些凭证,则无需明确定义这些凭证——AWS 客户端使用默认值构造函数将搜索这些凭据作为默认凭据提供程序链的一部分。更多信息在this documentation

    【讨论】:

    • 嗯那个类似乎没有这些领域的任何吸气剂?我将如何访问它们?例如...我想简单地将它们打印到标准输出。
    • FWIW,我需要访问这些凭据,因为我的代码使用第三方库来访问 S3 资源,而这些库需要 accesskey 和 secretkey 才能访问资源。我的计划是从 AWS SDK 中获取它们并将它们传递给第三方库。
    • @Anthony 使用EC2MetadataUtils.getIAMSecurityCredentials()。更新了答案并附有相应文档的链接
    • 太棒了,谢谢。想知道这与本文档中提到的方式有何不同? docs.aws.amazon.com/sdk-for-java/v1/developer-guide/…
    • @Anthony 差别不大。例如,如果您不想重复使用您的 IAM 实例配置文件的角色,或者没有在已经为您完成凭证​​循环的 EC2 实例中工作,那么该方法同样有效并且确实是首选。
    【解决方案2】:

    这是一个工作示例

    // This prints the EC2 instance role and then the keys
    void printCredentials() {
        Map<String,EC2MetadataUtils.IAMSecurityCredential> credMap = EC2MetadataUtils.getIAMSecurityCredentials();
        Iterator<Map.Entry<String,EC2MetadataUtils.IAMSecurityCredential>> it = credMap.entrySet().iterator();
        while (it.hasNext()) {
            // First print the role associated with this instance
            Map.Entry<String,EC2MetadataUtils.IAMSecurityCredential> pair = (Map.Entry<String,EC2MetadataUtils.IAMSecurityCredential>)it.next();
            System.out.println("Role: " + pair.getKey() + " = Value: " + pair.getValue());
    
            // Next print the access key and secret key
            EC2MetadataUtils.IAMSecurityCredential cred = pair.getValue();
            System.out.println("Access key: " + cred.accessKeyId + ", Secret key: " + cred.secretAccessKey);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2020-02-25
      • 2015-08-14
      • 2022-01-13
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多