在 API Gateway 中为私有 API 使用 VPC 终端节点策略 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 API Gateway 中为私有 API 使用 VPC 终端节点策略

通过将 API Gateway 配置为使用 interface VPC endpoint(接口 VPC 端点),可以提高 private API(私有 API)的安全性。接口终端节点由 Amazon PrivateLink 提供支持,您可以使用该技术通过私有 IP 地址私密访问 Amazon。有关创建 VPC 终端节点的更多信息,请参阅创建接口终端节点

VPC 终端节点策略 是一种 IAM 资源策略,您可以将它们附加到接口 VPC 终端节点来控制对终端节点的访问。有关更多信息,请参阅使用 VPC 终端节点控制对服务的访问。您可以使用终端节点策略来限制从您的内部网络访问您的私有 API 的流量。您可以选择允许或拒绝访问可以通过 VPC 终端节点访问的特定私有 API。

VPC 终端节点策略可以与 API Gateway 资源策略一起使用。资源策略用于指定哪些委托人可以访问 API。终端节点策略指定哪些私有 API 可以通过 VPC 终端节点调用。有关资源策略的更多信息,请参阅使用 API Gateway 资源策略控制对 API 的访问

VPC 端点策略注意事项

  • 如果策略限制 IAM 主体,则必须将方法的 authorizationType 设置为 AWS_IAMNONE

  • 根据 Authorization 标头值评估调用方的身份。这可能会导致 403 IncompleteSignatureException403 InvalidSignatureException 错误,具体视您的 authorizationType 而定。下表显示每个 authorizationTypeAuthorization 标头值。

    authorizationType

    已评估 Authorization 标头?

    允许的 Authorization 标头值

    NONE,使用默认完全访问策略 未传递
    NONE,使用自定义访问策略 必须是有效的 SigV4
    IAM 必须是有效的 SigV4
    CUSTOM 或者 COGNITO_USER_POOLS 未传递

VPC 终端节点策略示例

您可以为 Amazon API Gateway 创建 Amazon Virtual Private Cloud 终端节点策略,您可以在其中指定:

  • 可执行操作的委托人。

  • 可执行的操作。

  • 可用于执行操作的资源。

要将策略附加到 VPC 终端节点,您需要使用 VPC 控制台。有关更多信息,请参阅使用 VPC 终端节点控制对服务的访问

示例 1:授予对两个 API 的访问权限的 VPC 终端节点策略

以下示例策略只授予通过该策略附加到的 VPC 终端节点访问两个特定 API。

{ "Statement": [ { "Principal": "*", "Action": [ "execute-api:Invoke" ], "Effect": "Allow", "Resource": [ "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*", "arn:aws:execute-api:us-east-1:123412341234:aaaaa11111/*" ] } ] }

示例 2:授予对 GET 方法的访问权限的 VPC 终端节点策略

以下示例策略授予用户通过该策略附加到的 VPC 终端节点访问特定 API 的 GET 方法。

{ "Statement": [ { "Principal": "*", "Action": [ "execute-api:Invoke" ], "Effect": "Allow", "Resource": [ "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/stageName/GET/*" ] } ] }

示例 3:授予用户对特定 API 的特定用户访问权限的 VPC 终端节点策略

以下示例策略授予特定用户通过该策略附加到的 VPC 终端节点访问特定 API。

{ "Statement": [ { "Principal": { "AWS": [ "arn:aws:iam::123412341234:user/MyUser" ] }, "Action": [ "execute-api:Invoke" ], "Effect": "Allow", "Resource": [ "arn:aws:execute-api:us-east-1:123412341234:a1b2c3d4e5/*" ] } ] }