2016-12-22 9 views
3

上で実行されているは、アクセスキーを取得するにはどのように、JavaのAWSを使用して秘密鍵SDKは、EC2

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

これらの資格情報は一定ではなく、変化し続けます。

aws-java-sdkを使用してこれらの資格情報を取得する方法があるのでしょうか?

私はこれができることを知っていますusing boto3 in python。しかし、javaで同じことを達成する方法を知らない。

答えて

4

はい、via 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のためにこれらの資格情報を使用している場合、ことは注目に値するも、この質問の範囲外ですが、 SDK for Javaこのインスタンスでは、これらの資格情報を明示的に定義する必要はありません。デフォルトのコンストラクタを使用するクライアントは、これらの資格情報をデフォルトの資格証明プロバイダチェーンの一部として使用します。詳細は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); 
    } 
} 
関連する問題