【问题标题】:how to make local machine to assume IAM role如何让本地机器承担 IAM 角色
【发布时间】:2019-04-13 21:52:32
【问题描述】:

我有什么

  1. IAM 用户
  2. 具有 s3,sqs 权限的 IAM 角色
  3. 弹簧靴支架
  4. 使用 aws 资源的 Web 服务服务验证 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 访问被拒绝了

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

【问题讨论】:

  • 我是 Python 人,不是 Java,但同样的通用方法应该可以工作。我将 IAM 用户凭证放在本地凭证文件中(最简单的是通过 AWS CLI aws configure 命令)。然后,在没有凭据的情况下调用AssumeRole()(因为它们将从凭据文件中获取)。然后,这将返回一组临时凭据,可用于创建 Session 以用于创建客户端。查看以下代码示例:Delegating API Access to AWS Services Using IAM Roles
  • @JohnRotenstein :看起来像是一个完整的答案,而不仅仅是评论,谢谢,让我试试

标签: java amazon-web-services amazon-iam


【解决方案1】:

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

【讨论】:

  • 实际上我添加了默认提供程序链,这样我至少可以通过提供密钥来测试应用程序,但我想使用 'EC2ContainerCredentialsProviderWrapper',让我编辑问题
  • 我在回答中提供的链接和指针应该为您指出如何模拟 IAM 的正确方法。但我的建议仍然是不要这样做,而是在本地环境中使用模拟凭据。
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2022-12-01
  • 2019-07-09
  • 2020-11-08
相关资源
最近更新 更多