我是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禁止
我应该如何传递身份验证参数?它是否与网址一起传递?
答案 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工作。