如何在 EC2 上使用 java aws SDK 运行 获取 accesskey、secretkey
How to get accesskey, secretkey using java aws SDK running on EC2
而运行在EC2上,accesskey和secret key可以通过curl命令访问
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>
这些凭据不是固定不变的,并且会不断变化。
我想知道是否有办法使用 aws-java-sdk
获取这些凭据?
我知道这可以做到 。但是不知道如何在 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 - EC2MetadataUtils
- AWS SDK for Java - EC2MetadataUtils.IAMSecurityCredential
- AWS SDK for Java - EC2MetadataUtils.getIAMSecurityCredentials()
这超出了这个问题的范围,但也值得注意的是,如果您在此实例上将这些凭据用于 Java 的 AWS SDK,则无需明确定义这些凭据 - - 使用默认构造函数的 AWS 客户端将搜索这些凭证作为默认凭证提供程序链的一部分。 this documentation.
中的更多信息
这是一个工作示例
// 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);
}
}
而运行在EC2上,accesskey和secret key可以通过curl命令访问
curl http://169.254.169.254/latest/meta-data/iam/security-credentials/<rolename>
这些凭据不是固定不变的,并且会不断变化。
我想知道是否有办法使用 aws-java-sdk
获取这些凭据?
我知道这可以做到
是的,通过 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 - EC2MetadataUtils
- AWS SDK for Java - EC2MetadataUtils.IAMSecurityCredential
- AWS SDK for Java - EC2MetadataUtils.getIAMSecurityCredentials()
这超出了这个问题的范围,但也值得注意的是,如果您在此实例上将这些凭据用于 Java 的 AWS SDK,则无需明确定义这些凭据 - - 使用默认构造函数的 AWS 客户端将搜索这些凭证作为默认凭证提供程序链的一部分。 this documentation.
中的更多信息这是一个工作示例
// 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);
}
}