java - 如何让本地机器承担IAM角色

标签 java amazon-web-services amazon-iam

我有什么

  1. IAM 用户
  2. 具有 s3、sqs 权限的 IAM 角色
  3. Spring Boot 支架
  4. 利用 AWS 资源服务验证 AWS 的 Web 服务 基于角色(未提供 key )

我想要什么

  1. 本地运行应用程序
  2. 某种使本地计算机承担所需 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 中搜索(我认为按这个顺序)。

我的建议是忘记 mock IAM,而是 mock 服务。在环境中设置一些虚拟凭证,以便提供商链使用这些凭证而不是尝试使用 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

但我还没有使用过那个。

编辑:为什么 mock IAM 很难?因为 iam 凭据来自元数据端点,即 http://169.254.168.254。因此,要模拟 IAM,您必须模拟元数据端点。这通常涉及某种iptables hack。

关于java - 如何让本地机器承担IAM角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670187/

相关文章:

Java - 将变量列表转换为变量名到变量值的映射

java - EJB 计时器 : put in a method with Exception, @Timeout 注释

json - 使用 Nodejs 将 DynamoDB 中的 map 结构插入到现有 map 中

amazon-web-services - 媒体转换服务上的 AWS IAM 角色策略问题 [无法打开输入文件 [无法读取数据 : AssumeRole failed]]]

amazon-web-services - AWS IAM 用户无法查看账单和成本管理仪表板

python - 调用 assume_role 导致 "InvalidClientTokenId"错误

当功能跨越 Step 类时,使用 spring 依赖注入(inject)的 Java-Cucumber 测试会抛出 NullPointerException

java - java后端的Google Drive API身份验证

amazon-web-services - AWS athena从s3存储桶中获取查询结果文件

javascript - AWS X Ray : inside for loop, 系统未按照迭代记录每个跟踪 ID 的跟踪。这里如何使用AWS Async函数?