【问题标题】:Credentials Error While sending emails from AWS SES从 AWS SES 发送电子邮件时出现凭证错误
【发布时间】:2018-11-22 13:24:02
【问题描述】:

我正在尝试通过 Golang 中的 Amazon SES 发送电子邮件。以前它在开发服务器(没有 SSL)上工作,代码如下:

sess, err := session.NewSession(&aws.Config{
            Region:aws.String(AwsRegion)},
        )

    /* Create an SES client in the session */
    svc := ses.New(sess)

    /* Assemble the email */
    input := &ses.SendEmailInput{
        Destination: &ses.Destination{
            CcAddresses: []*string{
            },
            ToAddresses: []*string{
                aws.String(request.EmailTo),
            },
        },
        Message: &ses.Message{
            Body: &ses.Body{
                Html: &ses.Content{
                    Charset: aws.String(CharSet),
                    Data:    aws.String(body),
                },
            },
            Subject: &ses.Content{
                Charset: aws.String(CharSet),
                Data:    aws.String(subject),
            },
        },
        Source: aws.String("test<test@example.com>"),
    }

    /* Attempt to send the email */
    result, err := svc.SendEmail(input)

最近我开始在生产服务器上工作(使用 SSL),同样的代码开始给我以下错误:

NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

我尝试向代码中添加凭据,如下所示:

creds := credentials.NewCredentials(&ec2rolecreds.EC2RoleProvider{})

/* updated session block with credentials in aws config */
sess, err := session.NewSession(&aws.Config{
    Region: aws.String(AwsRegion),
    Credentials: creds})

但是这段代码不工作(甚至不能编译)并给我以下错误:

/main.go:63:42: undefined: ec2rolecreds

但是我已经在代码中包含了凭据包。

我不知道如何向此代码添加凭据,以便它也可以在生产服务器上运行。任何形式的帮助将不胜感激。

【问题讨论】:

    标签: amazon-web-services go amazon-ses


    【解决方案1】:

    第一个错误 (NoCredentialProviders) 不是代码问题,而是找不到任何凭据。根据this page,它会自动按以下顺序检查:

    1. 环境变量。
    2. 共享凭据文件。
    3. 如果您的应用程序在 Amazon EC2 实例上运行,则为 Amazon EC2 的 IAM 角色。

    如果它在一个环境而不是另一个环境中工作,我猜你有一个 IAM 角色,具有通过实例配置文件与 EC2 实例关联的必要权限。

    要明确设置凭据,请尝试以下操作:

    staticCreds = credentials.NewStaticCredentials("<key-id>", "<secret>", "<session token>")
    session, err = session.NewSession(&aws.Config{Credentials: staticCreds})
    

    【讨论】:

    • 我发现了问题。它与代码无关,但我没有将凭据文件放在正确的位置。它应该放在我的服务器根目录的 ~.aws/credentials 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多