Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使本地机器承担IAM角色_Java_Amazon Web Services_Amazon Iam - Fatal编程技术网

Java 如何使本地机器承担IAM角色

Java 如何使本地机器承担IAM角色,java,amazon-web-services,amazon-iam,Java,Amazon Web Services,Amazon Iam,我拥有的 IAM用户 具有s3、sqs权限的IAM角色 弹簧靴座 利用aws资源的web服务认证aws服务 基于角色(未提供密钥) 我想要什么 在本地运行应用程序 使本地计算机承担所需IAM角色的某种方法 Aws资源初始化 AmazonS3 amazonS3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EC2ContainerCredentialsProviderWrapper())

我拥有的

  • 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:

    对于SQS:

    现在,如果您决意要嘲笑IAM,请查看以下内容:

    请注意,这样的设置不值得你从中得到什么。YMMV

    您可能还对以下方面感兴趣:

    但我还没有用过那个


    编辑:为什么嘲笑我很难?因为iam凭据来自元数据端点,即
    http://169.254.168.254
    。因此,要模拟IAM,必须模拟元数据端点。这通常涉及某种类型的
    iptables
    黑客攻击

    实际上,我添加了默认提供程序链,这样我至少可以通过提供键来测试应用程序,但我想使用“EC2ContainerCredentialsProviderWrapper”,让我编辑这个问题。我在回答中提供的链接和指针应该为您指出如何模拟IAM的正确方法。但我的建议仍然是不要这样做,而是在本地环境中使用模拟凭证。我是Python人,不是Java,但同样的通用方法应该可以工作。我将IAM用户凭据放在本地凭据文件中(最简单的方法是通过AWS CLI
    AWS configure
    命令)。然后,在没有凭据的情况下调用
    AssumeRole()
    (因为它们将从凭据文件中获得)。然后,这将返回一组临时凭据,可用于创建用于创建客户端的
    会话。看看上面的代码示例:@JohnRotenstein:看起来像一个完整的答案,而不仅仅是一个评论,谢谢,让我试试