首页 > 解决方案 > 如何让本地机器承担 IAM 角色

问题描述

我有的

  1. IAM 用户
  2. 具有 s3,sqs 权限的 IAM 角色
  3. 弹簧靴休息
  4. Web 服务利用 aws 资源服务基于 aws 角色进行身份验证(未提供密钥)

我想要的是

  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 访问被拒绝

我力求找到任何教程,在那里我可以在本地机器上进行某些配置并在本地机器上担任所需的角色。

标签: javaamazon-web-servicesamazon-iam

解决方案


我们经常遇到这个问题。但是您的情况更简单,因为您使用的是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黑客行为。


推荐阅读