【问题标题】:Spring Boot DynamoDB AWS ExceptionSpring Boot DynamoDB AWS 异常
【发布时间】:2017-12-28 14:02:45
【问题描述】:

我在 AWS DynamoDB 上遇到错误,提示:

[请求处理失败;嵌套异常是 com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: 请求中包含的安全令牌无效。 (服务: 亚马逊DynamoDBv2;状态码:400;错误代码: 无法识别的客户端异常;请求编号: VJ8R07B81ANC1047P1ANEDS4CRVV4KQNSO5AEMVJF66Q9ASUAAJG)] 带根 导致com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: 请求中包含的安全令牌无效。 (服务: 亚马逊DynamoDBv2;状态码:400;错误代码: 无法识别的客户端异常;请求编号: 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 端点的应用程序,我遇到了同样的错误。

【问题讨论】:

  • 您能告诉我们您用来调用 Dynamo 的代码吗?
  • 嗨,我已经编辑了我的帖子,让您查看我的配置。
  • 您的代码看起来不错,您是否在创建凭据时检查了访问密钥和保密密钥是否正常?如 aws 文档中所述,如果访问密钥 ID 或安全令牌无效,您将收到 UnrecognizedClientException。
  • 我也读过这个。我忘了提到他们在我运行我的应用程序的实例中使用 DynamoDB 中的 IAM 角色。这意味着他们告诉我不需要声明访问密钥 ID 和密钥,因此我将其留空。虽然我不确定会对它产生什么影响,因为我只是 AWS 的新手。
  • 如果您为您的 ec2 实例配置了角色,您可以删除 withCredentials 方法调用

标签: spring amazon-ec2 amazon-dynamodb aws-sdk


【解决方案1】:

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

凭据按以下顺序处理:

  1. 代码定义
  2. aws 客户端配置
  3. 如果没有找到先例,它将不使用任何凭据,并且只有在实例附加了授予正确权限的 iam 角色时才会对其进行授权

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-29
    • 2019-01-06
    • 2019-12-26
    • 2019-09-05
    • 2017-03-04
    • 2021-03-27
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多