繁体   English   中英

如何使用在EC2上运行的java aws SDK获取accesskey,secretkey

[英]How to get accesskey, secretkey using java aws SDK running on EC2

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

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

这些凭证不是恒定的并且不断变化。

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

我知道这可以在python中使用boto3来完成。 但是不知道如何在java中完成相同的工作。

是的,通过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 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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM