[英]AWS Java SDK - invalid security token
我正在嘗試在 EC2 機器上托管的應用程序上使用 AWS SNS Java SDK。 對於 SNS SDK,提供憑證的方式不同於其他 SDK,如 S3。 我沒有指定任何憑據鏈機制,在我的本地機器上,它似乎默認從 .aws/credentials 文件中提取憑據。
我已從位於 ~/.aws/credentials 的 EC2 機器上更新了我的憑據。 但是,在 EC2 上運行我的應用程序時,嘗試將消息發布到 SNS 時出現以下錯誤:
software.amazon.awssdk.services.sns.model.SnsException:請求中包含的安全令牌無效。 (服務:Sns,狀態碼:403,請求 ID:3177217e-e32d-5df5-ab2a-783f74fb6209,擴展請求 ID:null)
到目前為止我嘗試過的事情:
我已經導入了 SNS SDK,如下所示:
pom.xml
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>bom</artifactId>
<version>2.16.29</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
...
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>sns</artifactId>
</dependency>
最低 SNS Java 代碼:
SnsClient client = SnsClient.builder()
.region(Region.US_EAST_1)
.build();
try {
PublishRequest request = PublishRequest.builder()
.message("message")
.topicArn("topicName")
.build();
PublishResponse result = client.publish(request);
System.out.println("Published: " + message + " " + result.messageId() + " Message sent. Status was " + result.sdkHttpResponse().statusCode());
} catch (SnsException e){
e.printStackTrace();
}
你知道會發生什么嗎? 謝謝!
在 EC2 實例上使用 SNS 服務時,您可以嘗試查看它是否有效的一件事是設置環境變量。 當我將 web 應用程序部署到使用 SNS Java V2 API 的 EC2 實例(使用 Elastic Beanstalk)上時,我已經做到了,而且效果很好。
private SnsClient getSnsClient() {
Region region = Region.US_WEST_2;
SnsClient snsClient = SnsClient.builder()
.credentialsProvider(EnvironmentVariableCredentialsProvider.create())
.region(region)
.build();
return snsClient;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.