当前位置: 首页 > 知识库问答 >
问题:

如何使用WebIdentityTokenFileCredentialsProvider连接Dynamo DB

甄志
2023-03-14

我有访问密钥、密钥、区域和dynamo DBendpoint,通过它们我可以连接到数据库,并且我在应用程序中保留了配置。属性文件。现在的要求是不在应用程序中保留访问密钥和密钥。属性文件并遵循AWS STS中的Web标识令牌。我已从应用程序中删除访问密钥和密码。属性文件,并具有以下配置。当我启动应用程序时,我收到以下消息

考虑定义COM类型的bean。亚马逊。服务。发电机BV2。AmazonDynamoDB'在您的配置中。

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> 

共有1个答案

澹台展鹏
2023-03-14

你有比信用问题更多的东西。在Java代码中,您在导入语句中引用V1。Java V1 API始终以以下内容开头:

com.amazonaws.services.dynamodbv2。**

Java DyanamoDB V2 API是:

软件亚马逊。awssdk。服务。发电机B*

现在,您的POM文件引用V2 API:

<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>

你不应该混淆V1和V2。您将V2用于服务客户端,V1用于DynamoDBMapperConfig对象。这不是好的做法,也不会奏效。

去掉v1api,只替换为v2api。您似乎想要使用DynamoDBMapper功能。对于V2,这现在是增强型客户端的一部分。

在AWS SDK for Java 2中使用DynamoDB增强型客户端。十、

要查看介绍如何使用AWS SDK for Java V2(包括增强型客户端)构建Spring BOOT应用程序的AWS教程,请参阅:

创建Amazon DynamoDB web应用程序项跟踪器

在本教程中,EnvironmentVariableCredentialsProvider用于处理AWS键值。

 类似资料:
  • 我正在尝试连接到LDAP以对用户进行身份验证。下面是我的代码,但是我不能使用我的C#代码设置SSL。 我从我的应用程序安全小组收到一条消息,我正在发送普通密码,所以我试图通过将身份验证类型设置为安全来保护它,通过尝试将选项设置为 但是我在连接对象中没有看到任何Sessionoption,我正在使用novel.LDAP dll进行LDAP操作。 有谁能帮帮我吗?如何在网络上以安全的方式发送密码供ld

  • 问题内容: 我有一个问题,如果mySQL Server在“睡眠时间” 500秒后终止了会话,则下一个请求不会成功。如果mySQL Server没有关闭睡眠连接,则可能在700秒后发生相同的问题。 我能做什么?遵循我的persistence.xml的属性 如果重要的话,transactiontype为RESOURCE_LOCAL。 问题答案: 您如何配置连接池?如果它是服务器数据源,则应在服务器中设

  • 问题内容: 我这样做是为了连接cassandra。但是我的代码返回了错误。这是我的代码 这是错误日志.. 无法在项目CassandraConnection上执行目标:无法解析项目com.mycompany:CassandraConnection:jar:1.0-SNAPSHOT的依赖项:无法解析以下工件:org.specs2:scalaz- effect_2.11.0-SNAPSHOT:jar:7

  • 我正在制作一个实时多人游戏socket.io和node.js,我有一个html文件,运行一个公共脚本连接到服务器并运行命令,以及定义我需要的库

  • 有关错误和可能的解决方案的更多信息,请阅读以下文章:[Help 1]http://cwiki.apache.org/confluence/display/maven/dependencyresolutionException

  • 下面的代码片段是从JoinedStreams的javadoc复制的 这两个流仅基于一个键(通过< code>t =计算)进行连接 我会问我如何基于多个键进行连接,例如,one.a = two.a和