2016-12-22 34 views

回答

4

是的,通過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() 

d ocumentation:


正是這個問題的範圍外,還值得注意的是,如果你正在使用這些憑據AWS此實例上的Java SDK不需要顯式定義這些憑據 - 使用默認構造函數的AWS客戶端將很有用將這些憑證作爲默認憑證提供程序鏈的一部分。更多信息在this documentation

+0

嗯該類似乎並沒有對這些領域的任何干將?我將如何訪問它們?例如...我想簡單地將它們打印到標準輸出。 – Anthony

+0

FWIW,我需要訪問這些憑據,因爲我的代碼使用第三方庫來訪問S3資源,這些庫需要accesskey和secretkey才能訪問資源。我的計劃是從AWS SDK獲取它們並將它們傳遞給第三方庫。 – Anthony

+0

@Anthony使用'EC2MetadataUtils.getIAMSecurityCredentials()'。更新回答,並附有適當的文檔鏈接 –

0

這裏是一個工作示例

// 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); 
    } 
} 
相關問題