繁体   English   中英

如何在调用 SES listcontacts 时修复 AWS 403 错误“检查您的 AWS 秘密访问密钥和签名方法”

[英]How to fix AWS 403 error "Check your AWS Secret Access Key and signing method" when calling SES listcontacts

在这一点上,我已经卡住了大约 6 个小时,我认为唯一合理的解释是这是一个 AWS SDK 错误或错误消息是错误的。

I am using SESv2 class from the AWS SDK in a JAVA SpringBoot app and attempting to manage various details of my SES (Simple Email Service) account.

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.sesv2.SesV2Client;
import software.amazon.awssdk.services.sesv2.model.*;

我已经创建了一个 IAM 用户,创建了安全凭证,并使用多种不同的方法设置它们,如此处所述guid to credentials environment我已向此 IAM 角色用户授予了对 SES 的完全访问权限。 然后我写了一些代码,我能够做以下所有事情,

  • 创建联系人列表
  • 删除联系人列表
  • 创建联系人
  • 在联系人列表中创建主题
  • 发送 email

但是,由于某些未知原因,当我 go 测试 function 时,我写了一个联系人列表,以便我可以测试向多个联系人发送 Z0C83F57C786A0B4A39EFAB23731C47EBCZ,我收到以下错误消息

我们计算的请求签名与您提供的签名不匹配。 检查您的 AWS 秘密访问密钥和签名方法。 有关详细信息,请参阅服务文档。

我已验证凭据是正确的。 我创建了一组新的凭据并使旧组处于非活动状态。 没有骰子,上面列出的所有功能仍然有效,但是listContacts中的SesV2Client仍然失败并出现相同的错误。 正如你在下面看到的,我什至绕过了 env 变量,只是硬编码了密钥和秘密来拉出所有的停止,仍然失败。 在失败的 function 中,我反复检查了传入的值,它们是有效的并且 100% 存在,因为正如我所说,我可以在上面的列表中进行其他调用来验证主题和联系人列表是否存在。

private List<Contact> listContactsForSiteUpdatesMailingList() {
try (SesV2Client client = SesV2Client.builder()
            .region(Region.US_EAST_1)
            .credentialsProvider(StaticCredentialsProvider.create(awsCreds))
            .build()){

        TopicFilter topicFilter = TopicFilter.builder().topicName(TOPIC_SITE_UPDATES).useDefaultIfPreferenceUnavailable(true).build();
        ListContactsFilter listContactsFilter = ListContactsFilter.builder().topicFilter(topicFilter).filteredStatus(SubscriptionStatus.OPT_IN).build();
        ListContactsRequest listContactsRequest = ListContactsRequest.builder()
                .contactListName(CONTACT_LIST).filter(listContactsFilter).build();

        ListContactsResponse listContactsResponse = client.listContacts(listContactsRequest);

        return listContactsResponse.contacts();

    } catch (Exception ex) {
        System.out.println("The email was not sent. Error message: "
                + ex.getMessage());
        return null;
    }
}

这是怎么回事,我怎样才能找到这个错误的根源?

编辑:查看 AWS 控制台用户>访问管理,然后查看创建的用户,我什至可以验证是否存在“程序访问” 在此处输入图像描述

没有问题地访问 ContactList 的示例在此处输入图像描述

编辑 2:我的 SES 帐户目前是沙盒。 我只是想提一个问题,这可能是因为这个而发生的吗? 在这里抓住稻草。

我能够重现您的问题。 我创建了一个列表并添加了一个联系人。 两者都有效。 但是,当我执行listContacts时,出现此错误:

在此处输入图像描述

这看起来像一个错误。 要解决此问题,请在此处打开 SDK Java Github 上的 Github 问题:

https://github.com/aws/aws-sdk-java

这被确认为 AWS SDK 中的一个错误。 为了解决这个问题,您可以像这样使用异步客户端

 SesV2AsyncClient client = SesV2AsyncClient.builder()
                    .region(Region.US_EAST_1)
                    .build())
        TopicFilter topicFilter = TopicFilter.builder().topicName(TOPIC_SITE_UPDATES).useDefaultIfPreferenceUnavailable(true).build();
        ListContactsFilter listContactsFilter = ListContactsFilter.builder().topicFilter(topicFilter).filteredStatus(SubscriptionStatus.OPT_IN).build();
        ListContactsRequest listContactsRequest = ListContactsRequest.builder()
                .contactListName(CONTACT_LIST).filter(listContactsFilter).build();

        CompletableFuture<ListContactsResponse> listContactsResponseCompletableFuture = client.listContacts(listContactsRequest);
        ListContactsResponse listContactsResponse = listContactsResponseCompletableFuture.get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM