java - 如何让本地机器承担 IAM 角色
问题描述
我有的
- IAM 用户
- 具有 s3,sqs 权限的 IAM 角色
- 弹簧靴休息
- Web 服务利用 aws 资源服务基于 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
请注意,为此进行的设置不值得您从中获得。YMMV
您可能还感兴趣:https ://github.com/localstack/localstack
但我还没有使用过那个(还)。
编辑:为什么嘲笑 IAM 很难?因为 iam 凭据来自元数据端点,即http://169.254.168.254
. 因此,要模拟 IAM,您必须模拟元数据端点。这通常涉及某种iptables
黑客行为。
推荐阅读
- c++ - 仅当至少一个数字为 2 位时才能使用大数字(字符串)函数进行乘法运算
- mysql - 添加外键约束失败。引用表“ ”中缺少约束“ ”的索引
- lisp - Common Lisp 中的动态绑定
- java - 如何从 Callable 内部的循环中运行 Completable?
- python - 循环遍历列表并将迭代值分配给变量
- html - 如何将我的图像移动到“联系我们”表单的右侧?
- r - 如何根据其他分类值总结矩阵?
- pandas - 雪花熊猫连接器杀死内核
- c# - c# System.ExecutionEngineError on P/Invoke call from large arrays
- scala - scala未来超时奇怪的行为