我在 AWS DynamoDB 上遇到错误,内容如下:
[Request processing failed; nested exception is com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The security token included in the request is invalid. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: UnrecognizedClientException; Request ID: VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)] with root causecom.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The security token included in the request is invalid. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: UnrecognizedClientException; Request 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 端点的应用程序,但遇到了相同的错误。
最佳答案
如果您为 ec2 实例配置了角色,则可以删除 withCredentials 方法调用。
凭据按以下顺序处理:
- 代码定义
- AWS 客户端配置
- 如果未找到先例,它将不使用任何凭据,并且仅当实例附加了授予正确权限的 iam 角色时才会对其进行授权
关于Spring Boot DynamoDB AWS 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48008892/