【问题标题】:Can I set AWS credentials on a Spring Boot/Cloud @SqsListener? (Java)我可以在 Spring Boot/Cloud @SqsListener 上设置 AWS 凭证吗? (爪哇)
【发布时间】:2021-03-07 20:32:39
【问题描述】:

这里是 SQS 和 Spring Cloud 的双重新手。我已经(使用控制台)创建了一个 SQS 队列。我正在工作的公司 wiki 说要生成临时凭据,结果如下所示:

aws_access_key_id = <secret>
aws_secret_access_key = <secret>
region = us-west-2
aws_session_token = <secret and VERY LONG, like 240 characters>

注意:稍后会详细介绍“aws_session_token”。

所以,一旦我这样做了,我就可以从 CLI 发送一条消息,就像这样。

`aws --endpoint-url https://sqs.us-west-2.amazonaws.com/99999999999999/<queue name>.fifo sqs send-message --queue-url https://sqs.us-west-2.amazonaws.com/99999999999999/<queue name>.fifo --message-body "cli test msg 2" --message-group-id "azgroup"`

到目前为止一切顺利。但是现在,我想实现一个 SqsListener 来连续监听。所以,我在这里查看了代码https://github.com/sixthpoint/spring-boot-sqs-fifo-tutorial,这是一个最小的 Spring Cloud SQS 应用程序,并按照自述文件中所示设置所有配置。我的听众现在看起来很简单:

@SqsListener(value=SQSURL)
public void process(String json) throws IOException {
    System.out.println("here");
    System.out.println(json);
}

但是,当我尝试启动应用程序时,我得到了这个错误:

com.amazonaws.services.sqs.model.AmazonSQSException: The security token included in the request is invalid. (Service: AmazonSQS; Status Code: 403; Error Code: InvalidClientTokenId; Request ID:....)

认为发生了什么是在启动时,侦听器试图联系我的队列,但被拒绝,因为它没有发送那个 aws_session_token。 (公司 wiki 再次这样说:“您将看到 aws_session_token。这是您以前没有的东西。您的密钥需要它才能工作!”)

那么,有没有办法显式设置我的 AWS 参数,无论是在定义 @SqsListener 的 Java 代码中,还是在配置中的某处,以便传递 aws_session_token?似乎无法传递 AwsCredentials 对象。 (编辑)而且这似乎对我没有帮助,因为 AwsCredentials 不包含该字段。

或者。 . .有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: amazon-web-services spring-boot amazon-sqs


    【解决方案1】:

    回答或至少部分回答我自己的问题:事实证明,当且仅当使用临时 aws 凭证时才需要 aws_session_token,正如我所指出的,这是我被赋予使用的。它必须添加到任何 CLI 操作中,但无法在 Java 代码中将其设置为 AwsCredentials 对象。所以这对我没有帮助。使用临时凭证时,可能无法从 Java 代码进行连接。如果我错了并且有办法,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2019-03-27
      • 2017-08-27
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多