ApiGatewayにIP制限を設定する際はAWS WAFを使うことが一般的だと思いますが、開発段階や簡易的な制限を設定する場合はApiGatewayのリソースポリシーを使用してIP制限を設定することもできます。
私はよく使うことがあるので、メモがてら記事にしておきます。
CDK(TypeScript)での実装例です。
// CDK
// アクセス許可するIPを設定
const IP_WHITE_LIST = ["xxx.xxxx",];
new RestApi(this, "Api", {
restApiName: "api",
deploy: true,
cloudWatchRole: true,
cloudWatchRoleRemovalPolicy: cdk.RemovalPolicy.DESTROY,
deployOptions: {
stageName: stage,
tracingEnabled: true,
dataTraceEnabled: true,
loggingLevel: MethodLoggingLevel.INFO,
},
policy: new PolicyDocument({
statements: [
// ip制限
new PolicyStatement({
effect: Effect.DENY,
principals: [new AnyPrincipal()],
actions: ["execute-api:Invoke"],
resources: ["execute-api:/*/*/*"],
conditions: {
NotIpAddress: {
"aws:SourceIp": IP_WHITE_LIST,
},
},
}),
],
}),
});
条件ブロックのConditionsにNotIpAddressを指定して、アクセスを許可するIPアドレスを設定します。これだけでIP制限がかかります。AWS WAFは使わないので、コストを抑えたい場合に有効です。