簡體   English   中英

AWS Java SDK - 無效的安全令牌

[英]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)

到目前為止我嘗試過的事情:

  • 我已授予 .aws 文件夾 777 權限。
  • 檢查 $HOME 變量,它輸出: /home/ec2-user 對我來說這似乎沒問題。
  • 嘗試從代碼中硬編碼 AWS 憑證,但 SDK 似乎不允許指定 session 令牌。
  • 我必須提到我在使用 S3 時遇到了同樣的問題,但是 SDK 允許我從代碼中完全指定憑據。

我已經導入了 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM