【发布时间】:2021-10-28 06:44:17
【问题描述】:
我正在使用 AWS CDK 创建 APIGateway。我想将自定义域附加到我的 api,以便我可以使用 api.findtechjobs.io。在控制台中,我可以看到我附加了一个自定义域,但是在使用我的自定义域时我总是收到 403 响应。
下面是我用来创建我的 API 网关的以下 AWS CDK 堆栈,并附加了一个 lambda 函数。
AWS CDK 部署良好,但是,当我尝试向https://api.findtechjobs.io/search 发出 POST 请求时,AWS 返回 403 Forbidden 响应。我没有此端点的 VPC、WAF 或 API 密钥。
我非常不确定为什么我的自定义域会返回 403 响应。我一直在阅读大量文档,并使用其他问题的答案,但我仍然无法弄清楚我做错了什么。
如何使用 AWS CDK 将 api.findtechjobs.io 关联到我的 API Gateway?
export class HostingStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props: cdk.StackProps) {
super(scope, id, props)
const zonefindtechjobsio = route53.HostedZone.fromLookup(this, 'findtechjobs.io', {
domainName: 'findtechjobs.io'
});
const certificate = new acm.Certificate(this, 'APICertificate', {
domainName: 'findtechjobs.io',
subjectAlternativeNames: ['api.findtechjobs.io'],
validation: acm.CertificateValidation.fromDns(zonefindtechjobsio),
});
const api = this.buildAPI(certificate)
new route53.ARecord( this, "AliasRecord api.findtechjobs.io", {
zone: zonefindtechjobsio,
recordName: `api`,
target: route53.RecordTarget.fromAlias(new route53targets.ApiGateway(api)),
});
}
private buildAPI(certificate: acm.Certificate) {
// API
const api = new apigateway.RestApi(this, "techjobapi", {
domainName: {
domainName: 'findtechjobs.io',
certificate: certificate
},
defaultCorsPreflightOptions: {
allowOrigins: apigateway.Cors.ALL_ORIGINS, // TODO limit this when you go to prod
},
deploy: true,
deployOptions: {
stageName: 'dev',
},
endpointTypes: [apigateway.EndpointType.REGIONAL]
});
const searchResource = api.root.addResource("search", {
defaultMethodOptions: {
operationName: "Search",
},
});
searchResource.addMethod(
"POST",
new apigateway.LambdaIntegration(new lambda.Function(this, "SearchLambda", {
runtime: lambda.Runtime.GO_1_X,
handler: "main",
code: lambda.Code.fromAsset(path.resolve("..", "search", "main.zip")),
environment: {
DB_NAME: "...",
DB_CONNECTION:"...",
},
})),
{
operationName: "search",
}
);
return api;
}
}
【问题讨论】:
-
forbidden 通常意味着问题出在您的 api 网关设置上,而不仅仅是域。您是否验证过它是否适用于 aws 默认 api 域?
-
默认(API网关域名)也返回相同的Forbidden响应。但是,我的开发阶段(1xp9g8qbvj.execute-api.us-west-2.amazonaws.com/dev/search)工作正常。我觉得你是对的。我的 api 网关设置有些奇怪。我的“开发”环境和域之间存在问题。
-
@Marcin 和其他任何偶然发现这一点的人。如果您正在使用边缘优化的 API 网关,则您的证书必须位于 us-east-1 中。我在这里发现了这个问题:aws.amazon.com/premiumsupport/knowledge-center/…
-
我什至不知道您可以将不在 us-east-1 中的 ssl 证书与 api 网关相关联。所以你实际上能够关联来自不同区域的证书并且 api gateway 或 cdk 没有抱怨?
-
CDK 从不抱怨。 AWS 控制台从未抱怨过。我正在将整个项目转移到 us-east-1。我将在此处发布更新,然后在完成后给出答案。
标签: amazon-web-services amazon-route53 aws-cdk amazon-api-gateway