如何使用与EC2实例关联的IAM角色从Amazon中检索临时AWS凭证(在java中)?

时间:2016-07-19 00:02:31

标签: java amazon-web-services amazon-s3 amazon-ec2

我在AMAZON上创建了与EC2实例关联的IAM角色,正如我从亚马逊文档中了解到的,我可以检索临时AWS凭证并对其做一些事情。我读到了EC2元数据api(由InstanceProfileCredentialsProvider内部使用)仅适用于实例内的呼叫,不适用于来自外部世界的呼叫。 这意味着什么?在本地tomcat服务器上开发app时,如何与AWS进行安全通信?

2 个答案:

答案 0 :(得分:4)

您应该使用默认提供商链和EC2实例配置文件。在您的情况下,由于您已将角色添加到您的实例,并且考虑到您使用的是Java SDK,因此需要调用:

MessageRejectedException

或者,如果您使用的是特定服务,例如AWS S3,则可以直接致电:

InstanceProfileCredentialsProvider mInstanceProfileCredentialsProvider = new InstanceProfileCredentialsProvider();
AWSCredentials credentials = mInstanceProfileCredentialsProvider.getCredentials();

有关详细信息:http://docs.aws.amazon.com/java-sdk/latest/developer-guide/java-dg-roles.html

只是提醒一下:您应该从不在您的代码中保留您的访问密钥和密钥。

答案 1 :(得分:3)

您的情况似乎是:

  • 您的计算机上运行的应用程序是Amazon EC2实例
  • 您希望为该应用程序提供对AWS服务进行API调用的能力

在这种情况下,不适合使用IAM角色

相反,您需要为应用程序提供一组有效的AWS凭据(访问密钥+密钥)。这可以通过创建 IAM用户,复制提供的凭据并将其置于应用程序的配置中来完成。

从使用AWS开发工具包的应用程序进行API调用时,SDK会自动查找各个位置以获取有效凭据。对于Java,DefaultAWSCredentialsProviderChain按此顺序查找凭据:

  • 环境变量 - AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(推荐,因为它们被除.NET以外的所有AWS软件开发工具包和CLI识别),或AWS_ACCESS_KEY和AWS_SECRET_KEY(仅由Java SDK识别)
  • Java系统属性 - aws.accessKeyId和aws.secretKey
  • 所有AWS软件开发工具包和AWS CLI共享的默认位置(〜/ .aws / credentials)中的
  • 凭据配置文件
  • 如果AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
  • 通过 Amazon EC2容器服务提供的凭据设置了环境变量,安全管理器具有访问变量的权限,
  • 通过Amazon EC2元数据服务提供的实例配置文件凭据

因此,请将凭据存储在前三个选项之一中。