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

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

要提高私有 API 的安全性,您可以创建 VPC 端点策略。VPC 端点策略是一种 IAM 资源策略,您可以将其附加到接口端点。有关更多信息,请参阅使用 VPC 端点控制对服务的访问

您可能需要创建 VPC 端点策略来执行以下任务:

  • 仅允许某些组织或资源访问您的 VPC 端点和调用您的 API。

  • 使用单一策略,并避免使用基于会话或基于角色的策略,来控制 API 的流量。

  • 从本地迁移到 Amazon 时,加强应用程序的安全边界。

VPC 端点策略注意事项

以下是 VPC 端点策略的注意事项。

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

    authorizationType

    已评估 Authorization 标头?

    允许的 Authorization 标头值

    NONE,使用默认完全访问策略 未传递
    NONE,使用自定义访问策略 必须是有效的 SigV4
    IAM 必须是有效的 SigV4
    CUSTOM 或者 COGNITO_USER_POOLS 未传递
  • 如果策略限制了对特定 IAM 主体(例如 arn:aws:iam::account-id:role/developer)的访问权限,则必须将 API 方法的 authorizationType 设置为 AWS_IAMNONE。有关如何为方法设置 authorizationType 的更多说明,请参阅 API Gateway 中用于 REST API 的方法

  • VPC 端点策略可以与 API Gateway 资源策略一起使用。API Gateway 资源策略指定哪些主体可以访问 API。端点策略指定了谁可以访问 VPC,以及可以从 VPC 端点调用哪些 API。您的私有 API 需要资源策略,但您不需要创建自定义 VPC 端点策略。

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。

在这种情况下,因为策略限制了对特定 IAM 主体的访问权限,所以您必须将方法的 authorizationType 设置为 AWS_IAMNONE

{ "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/*" ] } ] }