首页 文章

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

提问于
浏览
1

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

2 回答

  • 3

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

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

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

    AmazonS3 s3Client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
    

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

    只需提醒一下:您应该在代码中留下您的访问密钥和密钥 .

  • 4

    您的情况似乎是:

    • 您的计算机上运行的应用程序不是Amazon EC2实例

    • 您希望为该应用程序提供对AWS服务进行API调用的能力

    在这种情况下,它是 not appropriate to use an IAM role .

    相反,您需要为应用程序提供一组有效的AWS凭证(访问密钥密钥) . 这可以通过创建 IAM User 来完成,复制提供的凭据并将它们放在应用程序的配置中 .

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

    • Environment Variables - AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY(推荐,因为它们被除.NET以外的所有AWS开发工具包和CLI识别),或AWS_ACCESS_KEY和AWS_SECRET_KEY(仅由Java SDK识别)

    • Java System Properties - aws.accessKeyId和aws.secretKey

    • Credential profiles file 在所有AWS开发工具包和AWS CLI共享的默认位置(〜/ .aws / credentials)

    • 如果设置了AWS_CONTAINER_CREDENTIALS_RELATIVE_URI“环境变量并且安全管理员有权访问变量,则通过 Amazon EC2 container service 提供凭据,

    • Instance profile credentials 通过Amazon EC2元数据服务提供

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

相关问题