java - Java Spring 中的多个 AWS 信用

标签 java amazon-web-services spring-boot

在我的 POC 项目中,我们希望使用一个 AWS 用户账户(AWS api key 集 1)中的 S3 和其他 AWS 用户账户(AWS api key 集 2)中的 SQS?

我检查了下面的文章: https://docs.aws.amazon.com/sdk-for-java/v2/developer-guide/credentials.html

根据本文,我们可以构建凭证提供程序,但是(根据我的理解)凭证提供程序通常在 java 应用程序中是全局值...我们可以在单个 Spring boot 应用程序中使用多个 key 集吗?

最佳答案

Spring 中的凭据提供程序不是全局的,但您可以通过创建 Bean 使它们全局化。

相反,您可以创建两个单独的组件:一个用于 SQSClient,另一个用于 S3Client,这两个组件都使用不同的 AWS 账户进行配置,然后根据需要 Autowiring 它们。

import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClientBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
public class AwsClientConfig {

    //AWS Account 1: region1/accessKey1/secretKey1
    @Bean
    public AmazonSQS awsSQSClient(SqsConfig sqsConfig) {
        AmazonSQS sqs = AmazonSQSClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey1, secretKey1)))
                .withRegion(Regions.fromName(region1))
                .build();
        return sqs;
    }

    //AWS Account 2: region2/accessKey2/secretKey2
    @Bean
    public AmazonS3 s3Client() {
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKey2, secretKey2)))
                .withRegion(region2)
                .build();
        return s3Client;
    }

}

如果您不想在代码库中提供 accessKey/secretKey,可以将它们移至 application.yml 或使用 new ProfileCredentialsProvider("profile-1") & new ProfileCredentialsProvider( “配置文件-2”)

关于java - Java Spring 中的多个 AWS 信用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57331584/

相关文章:

java - 使用 HttpCore 实现自定义 HTTP 方法

java - 在 Java 中使用 Batik 检查和删除 SVG 中的属性

java - 如何通过点制作直线曲线

amazon-web-services - Pyspark s3 错误 : java. lang.NoClassDefFoundError: com/amazonaws/AmazonServiceException

amazon-web-services - AWS Cognito 和应用程序负载均衡器 : Error in SAML response processing RedirectUri is not registered with the client

java - spring security spring session,session不存储在spring session中

java - 如何从eventBus vertx2中多个mongo集合的多个查询中获取结果?

java - 在 spring boot 应用程序中获取 Class not Found Exception 错误

java - 使用 Spring Boot 进行单元测试 Spring Batch 配置

mysql - AWS 数据库迁移服务端点错误