Spring Boot DynamoDB AWS异常

问题描述 投票:2回答:1

我在AWS DynamoDB上遇到错误,说:

[请求处理失败;嵌套异常是com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:请求中包含的安全令牌无效。 (服务:AmazonDynamoDBv2;状态代码:400;错误代码:UnrecognizedClientException;请求ID:VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)] with root causecom.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException:请求中包含的安全令牌无效。 (服务:AmazonDynamoDBv2;状态代码:400;错误代码:UnrecognizedClientException;请求ID:VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)

在EC2实例中运行实际的DynamoDB端点。但是,当我运行应用程序并将其指向我的本地DynamoDB时,它可以工作。

有人有解决方案吗?谢谢。

这是我在DynamoDB上的配置

@Configuration
@EnableDynamoDBRepositories(basePackages = "**.****.***.repository")
public class DynamoConfig {

    @Value("${aws.secret.key}")
    private String awsSecretKey;

    @Value("${aws.access.key}")
    private String awsAccessKey;

    @Value("${aws.dynamodb.endpoint}")
    private String awsDynamoDBEndpoint;

    @Value("${aws.region}")
    private String awsRegion;

    @Bean
    public AmazonDynamoDB amazonDynamoDB() {
        AmazonDynamoDBClientBuilder amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(amazonAWSCredentials()))
                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(awsDynamoDBEndpoint, awsRegion));

//        amazonDynamoDB.setSignerRegionOverride(Regions.fromName(awsRegion).getName());
//        if (!StringUtils.isEmpty(awsDynamoDBEndpoint)) {
//            amazonDynamoDB.setEndpoint(awsDynamoDBEndpoint);
//        }
        return amazonDynamoDB.build();
    }

    @Bean
    public AWSCredentials amazonAWSCredentials() {
        return new BasicAWSCredentials(awsAccessKey, awsSecretKey);
    }
}

P.S我也尝试运行指向实际DynamoDB端点的应用程序,我遇到了同样的错误。

spring amazon-ec2 amazon-dynamodb aws-sdk
1个回答
1
投票

如果您为ec2实例配置了角色,则可以删除withCredentials方法调用。

凭据按此顺序处理:

  1. 代码定义
  2. aws客户端配置
  3. 如果找不到先例,它将不使用凭证,只有在实例附加了授予权限的iam角色时才会授权
© www.soinside.com 2019 - 2024. All rights reserved.