我有什么
- IAM 用户
- 具有 s3,sqs 权限的 IAM 角色
- 弹簧靴架
- 利用 AWS 资源的 Web 服务 对 AWS 进行身份验证的服务 基于角色(未提供密钥)
我想要什么
- 在本地运行应用程序
- 使本地计算机承担所需 IAM 角色的某种方法
AWS 资源初始化
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:https://github.com/adobe/S3Mock
对于 SQS:https://github.com/MeteoGroup/sqsmock
现在,如果您绝对决心嘲笑IAM,请查看以下内容: https://github.com/NYTimes/mock-ec2-metadata
请注意,这样做的设置不值得您从中得到什么。扬子晚报
您可能还对以下内容感兴趣: https://github.com/localstack/localstack
但我还没有使用那个(还没有)。
编辑:为什么嘲笑IAM很难?因为 iam 凭证来自元数据终端节点,即http://169.254.168.254
.因此,要模拟 IAM,您必须模拟元数据终端节点。这通常涉及某种iptables
黑客攻击。