【发布时间】:2022-01-25 00:53:21
【问题描述】:
我有访问密钥、密钥、区域和 DynamoDB 端点,我可以通过它们连接到数据库,并且我已将配置保存在 application.properties 文件中。现在的要求是不要将访问密钥和秘密密钥保留在 application.properties 文件中并遵循Web identity token from AWS STS。我已从 application.properties 文件中删除了访问密钥和机密,并具有以下配置。当我启动应用程序时,我收到以下消息
考虑在您的配置中定义“com.amazonaws.services.dynamodbv2.AmazonDynamoDB”类型的 bean。
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.DefaultTableNameResolver;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperConfig.TableNameOverride;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTypeConverterFactory;
import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import software.amazon.awssdk.auth.credentials.WebIdentityTokenFileCredentialsProvider;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
@Configuration
@EnableDynamoDBRepositories(dynamoDBMapperConfigRef = "dynamoDBMapperConfig", basePackages = "com.xyz.repository")
public class DynamoDBConfiguration {
@Value("${aws.dynamodb.endpoint}")
private String endpoint;
@Value("${aws.region}")
private String region;
@Value("${aws.dynamodb.table.name}")
private String tableName;
@Bean
public DynamoDBMapperConfig dynamoDBMapperConfig(TableNameOverride tableNameOverrider) {
DynamoDBMapperConfig.Builder builder = new DynamoDBMapperConfig.Builder();
builder.withTypeConverterFactory(DynamoDBTypeConverterFactory.standard());
builder.withTableNameResolver(DefaultTableNameResolver.INSTANCE);
builder.withTableNameOverride(tableNameOverrider());
return builder.build();
}
@Bean
public TableNameOverride tableNameOverrider() {
return TableNameOverride.withTableNamePrefix(tableName);
}
@Bean
public DynamoDbClient amazonDynamoDB() {
return DynamoDbClient.builder()
.region(Region.of(region))
.credentialsProvider(WebIdentityTokenFileCredentialsProvider.create())
.build();
}
}
在 pom.xml 中,我有以下与 AWS 相关的依赖项。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.15.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>io.github.boostchicken</groupId>
<artifactId>spring-data-dynamodb</artifactId>
<version>5.2.5</version>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>dynamodb</artifactId>
</dependency>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sts</artifactId>
</dependency>
【问题讨论】:
-
您是否在 EC2 实例上运行此应用程序?实例已附加 IAM 角色?
-
您好@OmarRosadio,不,我在本地运行应用程序并使用
aws configure配置密钥。我需要将应用程序部署到 EC2 并从那里检查吗?如果是,是否有任何可能的方法在本地进行测试?谢谢 -
Credentials Provider 类能够从 env vars、aws 配置文件或附加到实例的角色中读取访问密钥和秘密访问密钥。您提到了 STS 和 Web Identity Token,您需要从另一个帐户承担角色吗?
-
@OmarRosadio,您需要从另一个帐户担任角色吗?您能否添加更多详细信息我不确定您需要哪些信息。早些时候,我能够使用访问密钥和密钥连接到数据库,但是当我更改为
WebIdentityTokenFileCredentialsProvider时无法这样做
标签: java spring amazon-web-services spring-boot amazon-dynamodb