Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
从Spring Boot连接到Amazon S3,无需访问密钥和密钥_Spring_Spring Boot_Amazon S3 - Fatal编程技术网

从Spring Boot连接到Amazon S3,无需访问密钥和密钥

从Spring Boot连接到Amazon S3,无需访问密钥和密钥,spring,spring-boot,amazon-s3,Spring,Spring Boot,Amazon S3,我无法通过IAM角色连接到Amazon S3。有人告诉我,我不能使用密钥或访问密钥,,但如果没有这个,我找不到任何方法 实际上,我得到的是: public class S3Config { @Autowired Environment env; @Value("${amazon.aws.accesskey}") private String awsId; @Value("${amazon.aws.secretkey}") private St

我无法通过IAM角色连接到Amazon S3。有人告诉我,我不能使用
密钥
访问密钥,
,但如果没有这个,我找不到任何方法

实际上,我得到的是:

public class S3Config {

    @Autowired
    Environment env;

    @Value("${amazon.aws.accesskey}")
    private String awsId;

    @Value("${amazon.aws.secretkey}")
    private String awsKey;

    @Value("${amazon.aws.role}")
    private String roleArn;

    @Value("${amazon.aws.region}")
    private String region;

    @Bean
    @Scope("prototype")
    @Primary
    public AmazonS3Client s3client() {

        BasicAWSCredentials awsCreds = new BasicAWSCredentials("", "");

        AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                .withRegion(Regions.fromName(region))
                .build();

        AssumeRoleRequest assumeRequest = new AssumeRoleRequest().withRoleArn(roleArn).withDurationSeconds(3600)
                .withRoleSessionName("Test");
        AssumeRoleResult roleResponse = stsClient.assumeRole(assumeRequest);

        Credentials sessionCredentials = roleResponse.getCredentials();

        BasicSessionCredentials awsCredentials = new BasicSessionCredentials(
                sessionCredentials.getAccessKeyId(),
                sessionCredentials.getSecretAccessKey(),
                sessionCredentials.getSessionToken());

        AmazonS3Client s3ClientRole = (AmazonS3Client) AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials))
                .withRegion(Regions.fromName(region))
                .build();

        AmazonS3Client s3Client = s3ClientRole;

        return s3Client;
    }
}

如果在我创建
awsCreds
对象的行上,我正确地用值填充它​​我从
应用程序.properties
获取,如果它能正确执行所有操作。但是如果我将其留空,我将永远无法执行行
stsClient.assumeRole(assumeRequest)并且它给了我连接超时错误。

我认为您应该遵循以下文档:

它应该跟随你一步一步地解决你的问题


基本上,IAM角色允许特定的“资源”(如EC2实例)连接到该服务,因此您可以将客户端配置为获取临时凭据,以便对其进行“身份验证”和“授权”。

我认为您应该遵循以下文档:

它应该跟随你一步一步地解决你的问题


基本上,IAM角色允许特定的“资源”(如EC2实例)连接到该服务,因此您可以将客户端配置为获取临时凭据,以便对其进行“身份验证”和“授权”。

我检查了它,我也这么做了,但它仍然无法访问我如果您在您的计算机上本地使用它,它将永远不会像这样工作,因为您的计算机与您创建的IAM角色没有关联。这里有一些解决方法,我检查了它,我做了同样的操作,但它仍然无法访问我如果您在您的机器上本地使用它,它将永远不会像这样工作,因为您的机器与您创建的IAM角色没有关联。这里还有一些变通办法