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
Java AWS S3带弹簧启动错误“;配置文件不能为空";_Java_Spring_Amazon Web Services_Spring Boot_Amazon S3 - Fatal编程技术网

Java AWS S3带弹簧启动错误“;配置文件不能为空";

Java AWS S3带弹簧启动错误“;配置文件不能为空";,java,spring,amazon-web-services,spring-boot,amazon-s3,Java,Spring,Amazon Web Services,Spring Boot,Amazon S3,我有IAM角色和客户区域。如何在我的Spring boot应用程序中授予访问S3的权限(EC2实例中不存在) @Configuration public class AWSConfiguration { String clientRegion = "..."; String roleARN = "..."; @Bean public AmazonS3 amazonS3Client() { try {

我有IAM角色和客户区域。如何在我的Spring boot应用程序中授予访问S3的权限(EC2实例中不存在)

@Configuration
public class AWSConfiguration {

    String clientRegion = "...";
    String roleARN = "...";

    @Bean
    public AmazonS3 amazonS3Client() {

        try {
            AWSSecurityTokenService stsClient = AWSSecurityTokenServiceClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider()).withRegion(clientRegion).build();

            AssumeRoleRequest roleRequest = new AssumeRoleRequest().withRoleArn(roleARN);
            AssumeRoleResult roleResponse = stsClient.assumeRole(roleRequest);
            Credentials sessionCredentials = roleResponse.getCredentials();

            BasicAWSCredentials basicAwsCred = new BasicAWSCredentials(sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey());

            return AmazonS3ClientBuilder.standard()
                    .withCredentials(new AWSStaticCredentialsProvider(basicAwsCred)).withRegion(clientRegion).build();

        } catch (AmazonServiceException e) {
            e.printStackTrace();
        } catch (SdkClientException e) {
            e.printStackTrace();
        }
        return null;
    }
}
我得到以下错误

Caused by: java.lang.IllegalArgumentException: profile file cannot be null
    at com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:142) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:133) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.auth.profile.ProfilesConfigFile.<init>(ProfilesConfigFile.java:100) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1257) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:833) ~[aws-java-sdk-core-1.11.946.jar:na]
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:783) ~[aws-java-sdk-core-1.11.946.jar:na]
原因:java.lang.IllegalArgumentException:配置文件不能为null
在com.amazonaws.util.ValidationUtils.assertNotNull(ValidationUtils.java:37)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.auth.profile.ProfilesConfigFile.(ProfilesConfigFile.java:142)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.auth.profile.ProfilesConfigFile.(ProfilesConfigFile.java:133)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.auth.profile.ProfilesConfigFile.(ProfilesConfigFile.java:100)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.auth.profile.ProfileCredentialsProvider.getCredentials(ProfileCredentialsProvider.java:135)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.http.AmazonHttpClient$RequestExecutor.getCredentialsFromContext(AmazonHttpClient.java:1257)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.http.AmazonHttpClient$RequestExecutor.runBeforeRequestHandlers(AmazonHttpClient.java:833)~[aws-java-sdk-core-1.11.946.jar:na]
在com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:783)~[aws-java-sdk-core-1.11.946.jar:na]

我试图将ProfileCredentialsProvider更改为DefaultAWSCredentialsProviderChain.getInstance(),但它仍然给了我相同的错误,并询问我角色会话名称。

您需要使用环境变量、java系统属性等提供凭据,才能担任角色。如果您的代码是从EC2实例运行的,并且正确配置了实例配置文件,则该角色将自动使用

这是一个分为两步的过程:

  • 您需要向有权担任该角色的用户进行身份验证
  • 然后,您可以检索角色的会话凭据,并使用它们以角色权限访问S3
要在EC2中使用,您可以找到文档

编辑:

了解使用访问密钥访问AWS的最佳实践的好页面:

对于在实例上运行的应用程序、AWS CLI和Windows PowerShell工具命令,您不必显式获取临时安全凭据。AWS SDK、AWS CLI和Windows PowerShell工具会自动从EC2实例元数据服务获取凭据并使用它们。要使用临时安全凭据在实例外部进行调用(例如,测试IAM策略),必须提供访问密钥、密钥和会话令牌


您需要使用env变量、java系统属性等提供您的凭证,以便能够承担角色。如果您的代码是从EC2实例运行的,并且正确配置了实例配置文件,则该角色将自动使用

这是一个分为两步的过程:

  • 您需要向有权担任该角色的用户进行身份验证
  • 然后,您可以检索角色的会话凭据,并使用它们以角色权限访问S3
要在EC2中使用,您可以找到文档

编辑:

了解使用访问密钥访问AWS的最佳实践的好页面:

对于在实例上运行的应用程序、AWS CLI和Windows PowerShell工具命令,您不必显式获取临时安全凭据。AWS SDK、AWS CLI和Windows PowerShell工具会自动从EC2实例元数据服务获取凭据并使用它们。要使用临时安全凭据在实例外部进行调用(例如,测试IAM策略),必须提供访问密钥、密钥和会话令牌


您正在使用较旧的v1javas3api。您应该考虑移动到Amazon S3的java V2 API。

你的问题看起来像是你如何树立自己的信念。如果您正在开发SpringBoot应用程序,则应使用环境变量设置凭据。例如:

Region region = Region.US_WEST_2;
    S3Client s3 = S3Client.builder()
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .region(region)
            .build();
如果要将此web应用程序部署到(例如,AWS Elastic Beanstalk),则只需设置与Amazon S3交互的环境变量和Spring Boot应用程序

要了解如何从SpringBootWeb应用程序成功调用AmazonS3,请参阅本AWS教程。本教程讨论如何构建一个SpringBoot应用程序,该应用程序可以从AmazonS3存储桶(使用S3Javav2API)检索图像,并使用AmazonRekognition服务对其进行分析。还讨论了如何将web应用程序部署到Elastic Beanstalk


您正在使用较旧的V1 Java S3 API。您应该考虑移动到Amazon S3的java V2 API。

你的问题看起来像是你如何树立自己的信念。如果您正在开发SpringBoot应用程序,则应使用环境变量设置凭据。例如:

Region region = Region.US_WEST_2;
    S3Client s3 = S3Client.builder()
            .credentialsProvider(EnvironmentVariableCredentialsProvider.create())
            .region(region)
            .build();
如果要将此web应用程序部署到(例如,AWS Elastic Beanstalk),则只需设置与Amazon S3交互的环境变量和Spring Boot应用程序

要了解如何从SpringBootWeb应用程序成功调用AmazonS3,请参阅本AWS教程。本教程讨论如何构建一个SpringBoot应用程序,该应用程序可以从AmazonS3存储桶(使用S3Javav2API)检索图像,并使用AmazonRekognition服务对其进行分析。还讨论了如何将web应用程序部署到Elastic Beanstalk


您的凭据是否在某处配置(环境变量、Java系统属性等)?否。我假设基于roleArn和clientRegion,AWS SDK将获取凭据并在Java系统属性中设置凭据。我将此作为参考,您仍然需要首先获得授权才能检索会话证书。我是AWS新手。还有别的吗