在我的 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/