REST API:开发 REST API,您可以完全控制请求和响应以及 API 管理功能。与以下内容兼容:Lambda、HTTP、AWS 服务。
REST API 私有:创建仅可从 VPC 内部访问的 REST API。
API Gateway 主要组件
资源:在 API Gateway 中,资源是构成您 API 结构的组件。它们代表您 API 的不同路径或端点,并对应于您的 API 支持的各种操作。资源是每个方法(例如 GET、POST、PUT、DELETE)在每个路径内(/,或 /users,或 /user/{id})。
阶段:API Gateway 中的阶段代表您 API 的不同版本或环境,例如开发、预发布或生产。您可以使用阶段来管理和部署多个版本的 API,允许您在不影响生产环境的情况下测试新功能或修复错误。阶段还支持阶段变量,这些是可以根据当前阶段配置 API 行为的键值对。例如,您可以使用阶段变量根据阶段将 API 请求定向到不同的 Lambda 函数或其他后端服务。
阶段在 API Gateway 端点的 URL 开头指示。
授权者:API Gateway 中的授权者负责控制对您 API 的访问,通过在允许请求继续之前验证调用者的身份。您可以使用AWS Lambda 函数作为自定义授权者,这允许您实现自己的身份验证和授权逻辑。当请求到达时,API Gateway 将请求的授权令牌传递给 Lambda 授权者,后者处理该令牌并返回一个 IAM 策略,确定调用者被允许执行的操作。API Gateway 还支持内置授权者,如AWS 身份与访问管理(IAM)和亚马逊 Cognito。
资源策略:API Gateway 中的资源策略是一个 JSON 文档,定义访问您 API 的权限。它类似于 IAM 策略,但专门为 API Gateway 定制。您可以使用资源策略来控制谁可以访问您的 API,他们可以调用哪些方法,以及他们可以从哪些 IP 地址或 VPC 连接。资源策略可以与授权者结合使用,为您的 API 提供细粒度的访问控制。
为了使效果生效,API 需要在修改资源策略后重新部署。
日志记录
默认情况下,CloudWatch 日志是关闭的,访问日志是关闭的,X-Ray 跟踪也是关闭的。
枚举
请注意,在两个 AWS API 中枚举资源(apigateway 和 apigatewayv2)时,您所需的唯一权限和唯一可授予的读取权限是**apigateway:GET,通过此权限您可以枚举所有内容。**
# Generic infoawsapigatewayget-accountawsapigatewayget-domain-namesawsapigatewayget-usage-plansawsapigatewayget-vpc-linksawsapigatewayget-client-certificates# Enumerate APIsawsapigatewayget-rest-apis# This will also show the resource policy (if any)## Get stagesawsapigatewayget-stages--rest-api-id<id>## Get resourcesawsapigatewayget-resources--rest-api-id<id>## Get API resource action per HTTP verb (check authorizers and api key required)awsapigatewayget-method--http-methodGET--rest-api-id<api-id>--resource-id<resource-id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>## API authorizersawsapigatewayget-authorizers--rest-api-id<id>## Modelsawsapigatewayget-models--rest-api-id<id>## More infoawsapigatewayget-gateway-responses--rest-api-id<id>awsapigatewayget-request-validators--rest-api-id<id>awsapigatewayget-deployments--rest-api-id<id># Get api keys generatedawsapigatewayget-api-keys--include-valueawsapigatewayget-api-key--api-key<id>--include-value# Get just 1## Example use API keycurl-XGET-H"x-api-key: AJE&Ygenu4[..]"https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test## Usage plansawsapigatewayget-usage-plans#Get limit use infoawsapigatewayget-usage-plan-keys--usage-plan-id<plan_id>#Get clear text values of api keysawsapigatewayget-usage-plan-key--usage-plan-id<plan_id>--key-id<key_id>###Already consumedawsapigatewayget-usage--usage-plan-id<plan_id>--start-date2023-07-01--end-date2023-07-12
# Generic infoawsapigatewayv2get-domain-namesawsapigatewayv2get-domain-name--domain-name<name>awsapigatewayv2get-vpc-links# Enumerate APIsawsapigatewayv2get-apis# This will also show the resource policy (if any)awsapigatewayv2get-api--api-id<id>## Get all the info from an api at onceawsapigatewayv2export-api--api-id<id>--output-typeYAML--specificationOAS30/tmp/api.yaml## Get stagesawsapigatewayv2get-stages--api-id<id>## Get routesawsapigatewayv2get-routes--api-id<id>awsapigatewayv2get-route--api-id<id>--route-id<route-id>## Get deploymentsawsapigatewayv2get-deployments--api-id<id>awsapigatewayv2get-deployment--api-id<id>--deployment-id<dep-id>## Get integrationsawsapigatewayv2get-integrations--api-id<id>## Get authorizersawsapigatewayv2get-authorizers--api-id<id>awsapigatewayv2get-authorizer--api-id<id>--authorizer-id<uth-id>## Get domain mappingsawsapigatewayv2get-api-mappings--api-id<id>--domain-name<dom-name>awsapigatewayv2get-api-mapping--api-id<id>--api-mapping-id<map-id>--domain-name<dom-name>## Get modelsawsapigatewayv2get-models--api-id<id>## Call APIhttps://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
访问 API Gateway 端点的不同授权
资源策略
可以使用资源策略来定义谁可以调用 API 端点。
在以下示例中,您可以看到 指示的 IP 无法通过 GET 调用 端点 /resource_policy。