教程:构建私有 REST API - Amazon API Gateway

教程:构建私有 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。

您在本教程中创建的私有 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 堆栈
  1. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 选择创建堆栈,然后选择使用新资源(标准)

  3. 对于指定模板,选择上传模板文件

  4. 选择您下载的模板。

  5. 选择下一步

  6. 对于堆栈名称,输入 private-api-tutorial,然后选择下一步

  7. 对于配置堆栈选项,请选择下一步

  8. 对于功能,请确认 AWS CloudFormation 可以在您的账户中创建 IAM 资源。

  9. 选择提交

AWS CloudFormation 为 API 配置依赖项,这可能需要几分钟的时间。当 AWS CloudFormation 堆栈的状态为 CREATE_COMPLETE 时,请选择输出。记下您的 VPC 端点 ID。在本教程的后续步骤中,您需要使用该信息。

步骤 2:创建私有密钥

您可以创建一个私有 API,以便只允许 VPC 中的客户端可以访问。

要创建私有 API
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择创建 API,然后为 REST API 选择构建

  3. 对于 API Name (API 名称),请输入 private-api-tutorial

  4. 对于 API 端点类型,选择私有

  5. 对于 VPC 端点 ID,请输入 AWS CloudFormation 堆栈的输出中的 VPC 端点 ID。

  6. 选择创建 API

步骤 3:创建方法和集成

您可以创建 GET 方法和 Lambda 集成来处理对 API 的 GET 请求。当客户端调用 API 时,API Gateway 会将请求发送到您在步骤 1 中创建的 Lambda 函数,然后向客户端返回响应。

要创建方法和集成
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择 API。

  3. 选择 / 资源,然后选择创建方法

  4. 对于方法类型,选择 GET

  5. 对于集成类型,选择 Lambda 函数

  6. 打开 Lambda 代理集成。通过 Lambda 代理集成,API Gateway 将具有定义结构的事件发送到 Lambda,并将响应从您的 Lambda 函数转换为 HTTP 响应。

  7. 对于 Lambda 函数,请选择您在步骤 1 中使用 AWS CloudFormation 模板创建的函数。函数的名称以 private-api-tutorial 为开头。

  8. 选择创建方法

步骤 4:附加资源策略

您将资源策略附加到 API,该策略允许客户端仅通过 VPC 端点调用您的 API。要进一步限制对 API 的访问,您还可以为 VPC 端点配置 VPC 端点策略,但这对于本教程并不是必需的。

要附加资源策略
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择 API。

  3. 选择资源策略,然后选择创建策略

  4. 输入以下策略。使用来自您 ‭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:/*" } ] }
  5. 选择 Save changes(保存更改)

步骤 5:部署您的 API

接下来,您部署 API 以使其可供 Amazon VPC 中的客户端使用。

要部署 API
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择 API。

  3. 选择部署 API

  4. 对于阶段,选择新建阶段

  5. 对于阶段名称,输入 test

  6. (可选)对于描述,输入描述。

  7. 选择 Deploy (部署)

现在您已经准备好测试 API 了。

步骤 6:验证您的 API 是否不可公开访问

curl 于验证您是否无法从 Amazon VPC 之外调用 API。

要测试您的 API
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. 选择 API。

  3. 在主导航窗格中,选择阶段,然后选择测试阶段。

  4. 阶段详细信息下,选择复制图标以复制您 API 的调用 URL。URL 类似于 https://abcdef123.execute-api.us-west-2.amazonaws.com/test。您在步骤 1 中创建的 VPC 端点启用了私有 DNS,因此您可以使用提供的 URL 调用 API。

  5. 使用 curl 尝试从 VPC 外部调用 API。

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    Curl 表示您的 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
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择实例

  3. 选择您在步骤 1 中使用 AWS CloudFormation 模板创建的名为 private-api-tutorial 的实例。

  4. 选择连接,然后选择会话管理器

  5. 选择连接可启动与实例的基于浏览器的会话。

  6. 在会话管理器会话中,使用 curl 调用 API。您可以调用 API,因为您在 Amazon VPC 中使用的是实例。

    curl https://abcdef123.execute-api.us-west-2.amazonaws.com/test

    验证您得到了回复 Hello from Lambda!

您可以使用会话管理器从 Amazon VPC 中调用 API。

您成功创建了只能从 Amazon VPC 内访问的 API,然后验证其是否有效。

步骤 8:清除

为避免不必要的成本,请删除作为本教程的一部分而创建的资源。以下步骤将删除您的 REST API 和 AWS CloudFormation 堆栈。

要删除 REST API
  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. API 页面上,选择一个 API。选择 API 操作,选择删除 API,然后确认您的选择。

删除 AWS CloudFormation 堆栈
  1. 打开 AWS CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  2. 选择您的 AWS CloudFormation 堆栈。

  3. 选择删除,然后确认您的选择。

接下来的步骤:通过 实现自动化AWS CloudFormation

您可以自动创建和清理本教程中涉及的所有AWS资源。如需完整的示例 AWS CloudFormation 模板,请参阅 template.yaml