错误 - 发布到aws lambda函数

时间:2016-08-05 06:20:14

标签: amazon-web-services go aws-lambda

我是AWS的新手。我试图对aws lambda函数做一个http帖子并收到错误403(Forbidden)。我知道我必须通过post传递AWS_SECRET和AWS_Key。我该怎么做?我的帖子编码语言是golang。

上下文代码

url := "https://xxxxx.xxxxx-api.us-west-x.amazonaws.com/prod/xxxxxx"
var jsonStr = []byte(`{"title":"Some data"}`)

req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))

req.Header.Set("X-Custom-Header", "myvalue")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
    panic(err)
}
defer resp.Body.Close()
fmt.Println("response Status:", resp.Status) // response message

重新设置消息

  

回复状态:403禁止

我应该如何传递身份验证参数?它是否与网址一起传递?

1 个答案:

答案 0 :(得分:1)

如何通过API网关通过HTTP调用Lambda函数在很大程度上取决于API网关的配置方式。

默认情况下,没有身份验证,因此普通的POST可能有效:

public RevenueProvider(IRevenueContextService contextService, ICompanyService companyService)
    {
        _contextService = contextService;
        _companyService = companyService;

        _company = GetCompany();
    }

    public double GetRevenue()
    {
        if (_hasDepartmentContext)
            return _company.Departments.Single(d => d.Id == _departmentId).Revenue;
        else
            return _company.Revenue;
    }

    private Company GetCompany()
    {
        RevenueContext context = _contextService.GetContext();

        if (context.DepartmentId.HasValue)
        {
            _hasDepartmentContext = true;
            _departmentId = context.DepartmentId.Value;
        }

        return _companyService.Get(context.CompanyId);
    }

查看我的HTTP Functions with API Gateway and Lambda指南,了解有关设置此简单配置的提示。

您可以configure API Gateway to use IAM for authentication,这需要AWS访问密钥和密码。在这种情况下,您已关注AWS Signature V4 authentication scheme。 aws-sdk-go中有v4 signer package可以提供帮助。

最后,您还可以配置API Gateway custom authorizers以要求自定义标头等。这些方案不需要AWS访问密钥。

所有人都说,仔细查看您的API网关配置,以使您的POST工作。