Java 如何使本地机器承担IAM角色
我拥有的Java 如何使本地机器承担IAM角色,java,amazon-web-services,amazon-iam,Java,Amazon Web Services,Amazon Iam,我拥有的 IAM用户 具有s3、sqs权限的IAM角色 弹簧靴座 利用aws资源的web服务认证aws服务 基于角色(未提供密钥) 我想要什么 在本地运行应用程序 使本地计算机承担所需IAM角色的某种方法 Aws资源初始化 AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EC2ContainerCredentialsProviderWrapper())
AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new EC2ContainerCredentialsProviderWrapper())
.withRegion(Regions.DEFAULT_REGION)
.withForceGlobalBucketAccessEnabled(true)
.build();
AmazonSQS amazonSQSClient = amazonSQSClient = AmazonSQSClientBuilder.standard()
.withCredentials(new EC2ContainerCredentialsProviderWrapper())
.withRegion(Region.getRegion(regions).getName())
.build();
现在,当我运行应用程序并调用
显然,AWS访问被拒绝
我找不到任何教程,在那里我可以在本地机器上进行某些配置,并在本地机器上承担所需的角色。我们已经遇到了很多这个问题。但是您的情况更简单,因为您使用的是
DefaultCredentialProviderChain
。该链在环境中搜索凭据,然后搜索IAM(我认为是按该顺序)
我的建议是不要嘲笑IAM,而是嘲笑服务。在环境中设置一些虚拟凭据,以便提供程序链使用这些凭据,而不是尝试使用IAM
对于S3:
对于SQS:
现在,如果您决意要嘲笑IAM,请查看以下内容:
请注意,这样的设置不值得你从中得到什么。YMMV
您可能还对以下方面感兴趣:
但我还没有用过那个
编辑:为什么嘲笑我很难?因为iam凭据来自元数据端点,即
http://169.254.168.254
。因此,要模拟IAM,必须模拟元数据端点。这通常涉及某种类型的iptables
黑客攻击 实际上,我添加了默认提供程序链,这样我至少可以通过提供键来测试应用程序,但我想使用“EC2ContainerCredentialsProviderWrapper”,让我编辑这个问题。我在回答中提供的链接和指针应该为您指出如何模拟IAM的正确方法。但我的建议仍然是不要这样做,而是在本地环境中使用模拟凭证。我是Python人,不是Java,但同样的通用方法应该可以工作。我将IAM用户凭据放在本地凭据文件中(最简单的方法是通过AWS CLIAWS configure
命令)。然后,在没有凭据的情况下调用AssumeRole()
(因为它们将从凭据文件中获得)。然后,这将返回一组临时凭据,可用于创建用于创建客户端的会话。看看上面的代码示例:@JohnRotenstein:看起来像一个完整的答案,而不仅仅是一个评论,谢谢,让我试试