使用 API 网关的自定义域的 route53 返回禁止
Posted
技术标签:
【中文标题】使用 API 网关的自定义域的 route53 返回禁止【英文标题】:route53 returns forbidden for custom domain with API Gateway 【发布时间】: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。我将在此处发布更新,然后在完成后给出答案。 【参考方案1】:同样的问题。经过一番挣扎。我发现问题可能出在DNS上。因为我的域名是从另一个注册商那里转移过来的。名称服务器未更改。在我将它们更改为 AWS dns 后,它起作用了。但我不能 100% 确定。 而且我发现默认的API网关域(d-lb4byzxxx.execute-api.ap-east-1.amazonaws.com)一直处于403禁止状态。
【讨论】:
以上是关于使用 API 网关的自定义域的 route53 返回禁止的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Cloudformation 中获取区域 AWS API 网关的自定义域的目标域名?
使用 Shopify 商店设置时 Route53 DNS 无法解析