教程:创建私有 REST API
在本教程中,您将创建一个私有 REST API。客户端只能从您的 Amazon VPC 内访问 API。API 与公共互联网隔离,这是一项常见的安全要求。
完成本教程需要大约 30 分钟。首先,您要使用 AWS CloudFormation 模板创建 Amazon VPC、VPC 端点、AWS Lambda 函数,然后启动用于测试 API 的 Amazon EC2 实例。接下来,您可以使用AWS Management Console创建私有 API 并附加仅允许从 VPC 端点访问的资源策略。最后,测试您的 API。
要完成本教程,您需要一个AWS账户以及一位具有控制台访问权限的 AWS Identity and Access Management 用户。有关更多信息,请参阅 设置为使用 API Gateway。
在本教程中,您将使用 AWS Management Console。如需创建此 API 和所有相关资源的 AWS CloudFormation 模板,请参阅 template.yaml。
主题
步骤 1:创建依赖关系
下载并解压缩此 AWS CloudFormation 模板。您可以使用模板为私有 API 创建所有依赖项,包括 Amazon VPC、VPC 端点和作为 API 后端的 Lambda 函数。您稍后创建私有 API。
创建 AWS CloudFormation 堆栈
打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation
。 -
选择创建堆栈,然后选择使用新资源(标准)。
-
对于指定模板,选择上传模板文件。
-
选择您下载的模板。
-
选择下一步。
-
对于堆栈名称,输入
private-api-tutorial
,然后选择下一步。 -
对于配置堆栈选项,请选择下一步。
-
对于功能,请确认 AWS CloudFormation 可以在您的账户中创建 IAM 资源。
-
选择提交。
AWS CloudFormation 为 API 配置依赖项,这可能需要几分钟的时间。当 AWS CloudFormation 堆栈的状态为 CREATE_COMPLETE 时,请选择输出。记下您的 VPC 端点 ID。在本教程的后续步骤中,您需要使用该信息。
步骤 2:创建私有密钥
您可以创建一个私有 API,以便只允许 VPC 中的客户端可以访问。
要创建私有 API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择创建 API,然后为 REST API 选择构建。
-
对于 API Name (API 名称),请输入
private-api-tutorial
。 -
对于 API 端点类型,选择私有。
-
对于 VPC 端点 ID,请输入 AWS CloudFormation 堆栈的输出中的 VPC 端点 ID。
-
选择创建 API。
步骤 3:创建方法和集成
您可以创建 GET
方法和 Lambda 集成来处理对 API 的 GET
请求。当客户端调用 API 时,API Gateway 会将请求发送到您在步骤 1 中创建的 Lambda 函数,然后向客户端返回响应。
要创建方法和集成
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择创建方法。
-
对于方法类型,选择
GET
。 -
对于集成类型,选择 Lambda 函数。
-
打开 Lambda 代理集成。通过 Lambda 代理集成,API Gateway 将具有定义结构的事件发送到 Lambda,并将响应从您的 Lambda 函数转换为 HTTP 响应。
-
对于 Lambda 函数,请选择您在步骤 1 中使用 AWS CloudFormation 模板创建的函数。函数的名称以
private-api-tutorial
为开头。 -
选择创建方法。
步骤 4:附加资源策略
您将资源策略附加到 API,该策略允许客户端仅通过 VPC 端点调用您的 API。要进一步限制对 API 的访问,您还可以为 VPC 端点配置 VPC 端点策略,但这对于本教程并不是必需的。
要附加资源策略
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
选择资源策略,然后选择创建策略。
-
输入以下策略。使用来自您 AWS CloudFormation 堆栈的 输出 中的 VPC 端点 ID 替换
vpceID
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*", "Condition": { "StringNotEquals": { "aws:sourceVpce": "
vpceID
" } } }, { "Effect": "Allow", "Principal": "*", "Action": "execute-api:Invoke", "Resource": "execute-api:/*" } ] } -
选择 Save changes(保存更改)。
步骤 5:部署您的 API
接下来,您部署 API 以使其可供 Amazon VPC 中的客户端使用。
要部署 API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
选择部署 API。
对于阶段,选择新建阶段。
对于阶段名称,输入
test
。(可选)对于描述,输入描述。
选择 Deploy (部署)。
现在您已经准备好测试 API 了。
步骤 6:验证您的 API 是否不可公开访问
用 curl
于验证您是否无法从 Amazon VPC 之外调用 API。
要测试您的 API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
选择 API。
-
在主导航窗格中,选择阶段,然后选择测试阶段。
-
在阶段详细信息下,选择复制图标以复制您 API 的调用 URL。URL 类似于
https://
。您在步骤 1 中创建的 VPC 端点启用了私有 DNS,因此您可以使用提供的 URL 调用 API。abcdef123
.execute-api.us-west-2
.amazonaws.com/test -
使用 curl 尝试从 VPC 外部调用 API。
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/testCurl 表示您的 API 的端点无法解析。如果您收到其他响应,请返回步骤 2,并确保为 API 的端点类型选择私有。
curl: (6) Could not resolve host:
abcdef123
.execute-api.us-west-2
.amazonaws.com/test
接下来,您连接到 VPC 中的 Amazon EC2 实例以调用 API。
步骤 7:连接到 VPC 中的实例并调用 API
接下来,您可以从 Amazon VPC 内测试 API。要访问您的私有 API,您需要连接到 VPC 中的 Amazon EC2 实例,然后使用 curl 调用 API。您可以使用 Systems Manager 会话管理器在浏览器中连接到实例。
要测试您的 API
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
选择实例。
-
选择您在步骤 1 中使用 AWS CloudFormation 模板创建的名为 private-api-tutorial 的实例。
-
选择连接,然后选择会话管理器。
-
选择连接可启动与实例的基于浏览器的会话。
-
在会话管理器会话中,使用 curl 调用 API。您可以调用 API,因为您在 Amazon VPC 中使用的是实例。
curl https://
abcdef123
.execute-api.us-west-2
.amazonaws.com/test验证您得到了回复
Hello from Lambda!
。
您成功创建了只能从 Amazon VPC 内访问的 API,然后验证其是否有效。
步骤 8:清除
为避免不必要的成本,请删除作为本教程的一部分而创建的资源。以下步骤将删除您的 REST API 和 AWS CloudFormation 堆栈。
要删除 REST API
通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway
。 -
在 API 页面上,选择一个 API。选择 API 操作,选择删除 API,然后确认您的选择。
删除 AWS CloudFormation 堆栈
打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation
。 -
选择您的 AWS CloudFormation 堆栈。
-
选择删除,然后确认您的选择。
接下来的步骤:通过 实现自动化AWS CloudFormation
您可以自动创建和清理本教程中涉及的所有AWS资源。如需完整的示例 AWS CloudFormation 模板,请参阅 template.yaml。