华为云用户手册

  • 使用限制 同一个环境中一个API只能绑定一个签名密钥,一个签名密钥可以绑定多个API。 一个API只能绑定一个相同类型的策略。 策略和API本身相互独立,只有为API绑定策略后,策略才对API生效。为API绑定策略时需指定发布环境,策略只对指定环境上的API生效。 策略的绑定、解绑、更新会实时生效,不需要重新发布API。 API的下线操作不影响策略的绑定关系,再次发布后仍然会带有下线前绑定的策略。 如果策略与API有绑定关系,则策略无法执行删除操作。
  • 为策略绑定API 单击策略名称,进入策略详情。 在API列表区域选择环境后,单击“绑定API”。 筛选API分组以及发布环境,勾选所需的API。 支持通过API名称或标签筛选API,标签为创建API时定义的标签。 单击“确定”,绑定完成。 如果单个API不需要绑定此策略,单击API所在行的“解绑”。 如果批量API不需要绑定此策略,则勾选待解绑的API,单击列表上方“解绑”。最多同时解绑1000个API。
  • 为凭据绑定流量控制策略 已创建凭据,或已获取其他凭据ID。 在流控策略详情页面,单击“特殊凭据”页签,进入特殊凭据页面。 单击“添加特殊凭据”,弹出“添加特殊凭据”对话框。 通过以下两种方式,添加特殊凭据。 添加已有凭据:单击“已有凭据”,选择已有凭据,输入阈值。 添加其他凭据:单击“其他”,输入其他用户的凭据ID和阈值。 特殊凭据流控值和凭据流量限制值共同作用时,以特殊凭据流控值为准。 例如:API流量限制值为10,凭据流量限制值为3,时长为1分钟,特殊凭据(凭据A)流控值为2,特殊凭据(凭据B)流控值为4,凭据A在1分钟内最多可以访问绑定了该流控策略的API 2次,凭据B在1分钟内最多可以访问绑定了该流控策略的API 4次。
  • 使用限制 API添加流控策略相当于流控策略同步绑定了API。同一个环境中,一个API只能被一个流控策略绑定,但一个流控策略可以绑定多个API。 如果API未绑定流控策略,流控限制值为实例“配置参数”中“ratelimit_api_limits”的参数运行值。 一个API只能绑定一个相同类型的策略。 策略和API本身相互独立,只有为API绑定策略后,策略才对API生效。为API绑定策略时需指定发布环境,策略只对指定环境上的API生效。 策略的绑定、解绑、更新会实时生效,不需要重新发布API。 API的下线操作不影响策略的绑定关系,再次发布后仍然会带有下线前绑定的策略。 如果策略与API有绑定关系,则策略无法执行删除操作。
  • 为租户绑定流量控制策略 在流控策略详情页面,单击“特殊租户”,进入特殊租户页面。 单击“添加特殊租户”,弹出“添加特殊租户”对话框。 输入租户信息。 表2 特殊租户信息 参数 说明 租户ID 获取的账号ID或项目ID,请参考表1中的“特殊租户”说明。 阈值 固定时间段内,此租户访问API的最大值。 不能超过API流量限制值。 单击“确定”,完成特殊租户的添加。 特殊租户流控值和用户流量限制值共同作用时,以特殊租户流控值为准。 例如:API流量限制值为10,用户流量限制值为3,时长为1分钟,特殊租户(租户ID为A)流控值为2,特殊租户(租户ID为B)流控值为4,租户A在1分钟内最多可以访问绑定了该流控策略的API 2次,租户B在1分钟内最多可以访问绑定了该流控策略的API 4次。
  • 为策略绑定API 单击策略名称,进入策略详情。 在API列表区域选择环境后,单击“绑定API”。 筛选API分组以及发布环境,勾选所需的API。 支持通过API名称或标签筛选API,标签为创建API时定义的标签。 单击“确定”,绑定完成。 如果单个API不需要绑定此策略,单击API所在行的“解绑”。 如果批量API不需要绑定此策略,则勾选待解绑的API,单击列表上方“解绑”。最多同时解绑1000个API。
  • 查看关键操作列表 通过 云审计 服务,您可以记录与API网关相关的操作事件,便于日后的查询、审计和回溯。 表1 云审计服务支持的API Gateway操作列表 操作名称 资源类型 事件名称 创建API分组 ApiGroup createApiGroup 修改API分组 ApiGroup updateApiGroup 删除API分组 ApiGroup deleteApiGroup 校验API分组名称是否存在 Swagger CheckApiGroups 创建环境 Environment createEnvironment 修改环境 Environment updateEnvironment 删除环境 Environment deleteEnvironment 新建变量 EnvVariable CreateEnvironmentVariable 删除变量 EnvVariable DeleteEnvironmentVariable 修改变量 EnvVariable UpdateEnvironmentVariable 创建流控策略 Throttle CreateRequestThrottlingPolicy 修改流控策略 Throttle UpdateRequestThrottlingPolicy 删除流控策略 Throttle DeleteRequestThrottlingPolicy 创建API Api CreateApi 修改API Api UpdateApi 删除API Api DeleteApi 发布或下线API Api CreateOrDeletePublishRecordForApi 校验API定义 Api CheckApis 调试API Api DebugApi 批量发布/下线API Api BatchPublishOrOfflineApi 切换API版本 Api ChangeApiVersion 根据版本号下线API Api DeleteApiByVersionId 创建签名密钥 Signature CreateSignatureKey 修改签名密钥 Signature UpdateSignatureKey 删除签名密钥 Signature DeleteSignatureKey 绑定签名密钥 SignatureBinding AssociateSignatureKey 解除API与签名密钥的绑定关系 SignatureBinding DisassociateSignatureKey 绑定流控策略 ThrottleBinding AssociateRequestThrottlingPolicy 解除API与流控策略的绑定关系 ThrottleBinding DisassociateRequestThrottlingPolicy 批量解绑流控策略 ThrottleBinding BatchDisassociateThrottlingPolicy 创建特殊设置 ThrottleSpecial CreateSpecialThrottlingConfiguration 修改特殊流控 ThrottleSpecial UpdateSpecialThrottlingConfiguration 删除特殊流控 ThrottleSpecial DeleteSpecialThrottlingConfiguration APP授权 AppAuth CreateAuthorizingApps 解除授权 AppAuth CancelingAuthorization 绑定 域名 ApiGroup AssociateDomain 绑定域名证书 ApiGroup AssociateCertificate 修改域名 ApiGroup UpdateDomain 解绑域名 ApiGroup DisassociateDomain 删除域名证书 ApiGroup DisassociateCertificate 创建ACL策略 Acl CreateAclStrategy 修改ACL策略 Acl UpdateAclStrategy 删除ACL策略 Acl DeleteAcl 批量删除ACL策略 Acl BatchDeleteAclV2 将API与ACL策略进行绑定 AclBinding CreateApiAclBinding 解除API与ACL策略的绑定 AclBinding DeleteApiAclBinding 批量解除API与ACL策略的绑定 AclBinding BatchDeleteApiAclBinding 创建自定义认证 Authorizer CreateCustomAuthorizer 修改自定义认证 Authorizer UpdateCustomAuthorizer 删除自定义认证 Authorizer DeleteCustomAuthorizer 导出API Swagger ExportApiDefinitions 导入API Swagger ImportApiDefinitions 创建VPC通道 Vpc CreateVpcChannel 更新VPC通道 Vpc UpdateVpcChannel 删除VPC通道 Vpc DeleteVpcChannel 添加或更新后端实例 Vpc AddingBackendInstances 更新后端实例 Vpc UpdateBackendInstances 删除后端实例 Vpc DeleteBackendInstance 批量修改后端服务器状态可用 Vpc BatchEnableMembers 批量修改后端服务器状态不可用 Vpc BatchDisableMembers 修改VPC通道健康检查 Vpc UpdateHealthCheck 添加或更新VPC通道后端服务器组 Vpc CreateMemberGroup 删除VPC通道后端服务器组 Vpc DeleteMemberGroup 更新VPC通道后端服务器组 Vpc UpdateMemberGroup 创建分组自定义响应 ApiGroup CreateGatewayResponse 修改分组自定义响应 ApiGroup UpdateGatewayResponse 删除分组自定义响应 ApiGroup DeleteGatewayResponse 修改分组下指定错误类型的自定义响应 ApiGroup UpdateGatewayResponseType 删除分组指定错误类型的自定义响应配置 ApiGroup DeleteGatewayResponseType 实例配置特性 Feature CreateFeatureV2 创建专享版实例(按需) Instance CreateInstance 更新专享版实例 Instance UpdateInstance 实例更新或绑定EIP Instance AddEip 实例解绑EIP Instance RemoveEip 开启实例公网出口 Instance AddEngressEip 更新实例出公网带宽 Instance UpdateEngressEip 关闭实例公网出口 Instance RemoveEngressEip 开启实例公网入口 Instance AddIngressEip 更新实例入公网带宽 Instance UpdateIngressEip 关闭实例公网入口 Instance RemoveIngressEip 删除专享版实例 Instance DeleteInstances 创建专享版实例(包周期) Instance CreateOrder 创建包周期规格变更订单 Instance CreatePrepayResize 按需规格变更 Instance CreatePostPayResizeOrder 接受或拒绝终端节点连接 vpc-endpoint AcceptOrRejectEndpointConnections 批量添加实例终端节点连接白名单 vpc-endpoint AddEndpointPermissions 批量删除实例终端节点连接白名单 vpc-endpoint DeleteEndpointPermissions 批量添加或删除单个实例的标签 Instance BatchCreateOrDeleteInstanceTags 导入微服务 Microservice ImportMicroservice 创建SSL证书 SslCertificate CreateCertificate 域名绑定SSL证书 ApiGroup BatchAssociateCerts 域名解绑SSL证书 ApiGroup BatchDisassociateCerts 删除SSL证书 SslCertificate DeleteCertificate 修改SSL证书 SslCertificate UpdateCertificate SSL证书绑定域名 Certificate BatchAssociateDomains SSL证书解绑域名 Certificate BatchDisassociateDomains 创建插件 Plugin CreatePlugin 修改插件 Plugin UpdatePlugin 删除插件 Plugin DeletePlugin 插件绑定API Plugin AttachApiToPlugin API绑定插件 Plugin AttachPluginToApi 解除绑定插件的API Plugin DetachApiFromPlugin 解除绑定API的插件 Plugin DetachPluginFromApi 创建APP App CreateAnApp 修改APP App UpdateApp 删除APP App DeleteAppV2 重置密钥 App ResettingAppSecret 校验APP App CheckApp 创建APP Code AppCode CreateAppCode 自动生成APP Code AppCode CreateAppCodeAuto 删除APP Code AppCode DeleteAppCode 设置APP的访问控制 AppAcl UpdateAppAcl 删除APP的访问控制 AppAcl DeleteAppAcl 创建凭据配额 AppQuota CreateAppQuota 修改凭据配额 AppQuota UpdateAppQuota 删除凭据配额 AppQuota DeleteAppQuota 凭据配额绑定凭据列表 AppQuotaBinding AssociateAppsForAppQuota 解除凭据配额和凭据的绑定 AppQuotaBinding DisassociateAppQuotaWithApp
  • 使用限制 无法修改API网关增加的系统响应头(x-apig-*,x-request-id等),包括API网关提供的CORS功能增加的响应头。 一个API只能绑定一个相同类型的策略。 策略和API本身相互独立,只有为API绑定策略后,策略才对API生效。为API绑定策略时需指定发布环境,策略只对指定环境上的API生效。 策略的绑定、解绑、更新会实时生效,不需要重新发布API。 API的下线操作不影响策略的绑定关系,再次发布后仍然会带有下线前绑定的策略。 如果策略与API有绑定关系,则策略无法执行删除操作。
  • 为策略绑定API 单击策略名称,进入策略详情。 在API列表区域选择环境后,单击“绑定API”。 筛选API分组以及发布环境,勾选所需的API。 支持通过API名称或标签筛选API,标签为创建API时定义的标签。 单击“确定”,绑定完成。 如果单个API不需要绑定此策略,单击API所在行的“解绑”。 如果批量API不需要绑定此策略,则勾选待解绑的API,单击列表上方“解绑”。最多同时解绑1000个API。
  • 脚本配置示例 { "response_headers": [ { "name": "test", "value": "test", "action": "append" }, { "name": "test1", "value": "test1", "action": "override" } ] }
  • 注意事项 仅支持华为云 CCE Turbo 集群、VPC网络模型的CCE集群。 您需要确保当前实例与CCE集群所属同一个VPC中,或通过其他方式保证两者网络可达,否则导入后调用API会出现失败场景。 选择VPC网络模型的CCE集群时,您需要在实例详情界面的路由配置中添加CCE集群的容器网段,否则导入后调用API会出现失败场景。 导入后会生成相应的API以及微服务类型的负载通道,负载通道会监测工作负载下所有实例的地址变化,并更新到负载通道中。
  • 操作步骤 进入API网关控制台页面。 在左侧导航栏选择“实例管理”。 在已创建的实例上,单击“查看控制台”或实例名称。 单击“终端节点管理”页签,查看终端节点信息,详细信息可参考终端节点管理。 表1 终端节点信息 参数 说明 服务信息 展示的名称由{region}.{终端节点服务名称}.{终端节点服务ID}组成。您在购买实例时,会同步创建 VPC终端节点 服务,可以设置终端节点服务名称,也可以在此处修改终端节点服务名称。 连接管理 展示连接到网关实例的终端节点信息。如果需要新建终端节点,请单击“创建终端节点”创建。 终端节点ID:终端节点的ID。 报文标识:终端节点ID的标识,用来识别是哪个终端节点。 状态:终端节点的状态。 关于终端节点的各个状态,请查看终端节点服务和终端节点有哪些状态?。 拥有者:终端节点创建者的账号ID。 创建时间:终端节点的创建时间。 操作:终端节点服务对终端节点的连接审批,可选择“接受”或“拒绝”。 须知: 如您仍有业务通过该连接进行访问,拒绝已建立的连接可能导致业务受损,请谨慎操作。 权限管理 权限管理用于控制是否允许跨租户的终端节点进行访问。可以设置允许连接该终端节点服务的授权账号ID,将授权账号ID添加至终端节点服务的白名单中。 单击“添加白名单记录”,填写账号ID。 授权账号ID:连接访问终端节点的授权账号ID。 创建时间:白名单的创建时间。 操作:对连接访问终端节点的授权账号进行操作,支持将授权账号从白名单中删除。
  • 非简单请求 对于非简单请求,您需要开启跨域访问,并且创建一个“请求方法”为“OPTIONS”的API。 “请求方法”为“OPTIONS”的API和普通API的区别如下: 所属分组:选择已开启CORS的API所在的分组。 请求方法:选择“OPTIONS”。 请求协议:选择与已开启CORS的API相同的请求协议。 路径:填斜杠/即可,也可选择与已开启CORS的API相同或者匹配的请求Path。 安全认证:可选择“无认证”。无论选择哪种认证方式,API网关都按照无认证处理。 支持跨域CORS:选择开启CORS。 假设后端服务类型为Mock,示例如下: 浏览器发送“请求方法”为“OPTIONS”的API请求: OPTIONS /HTTP/1.1 User-Agent: curl/7.29.0 Host: localhost Accept: */* Origin: http://www.cors.com Access-Control-Request-Method: PUT Access-Control-Request-Headers: X-Sdk-Date Origin:此字段必选,表示请求消息所属源。 Access-Control-Request-Method:此字段必选,表示请求会使用哪些HTTP请求方法。 Access-Control-Request-Headers:此字段可选,表示请求会额外发送的头信息字段。 后端服务返回消息:无 API网关返回消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 02:38:48 GMT Content-Type: application/json Content-Length: 1036 Server: api-gateway X-Request-Id: c9b8926888c356d6a9581c5c10bb4d11 Access-Control-Allow-Origin: * Access-Control-Allow-Headers: X-Stage,X-Sdk-Date,X-Sdk-Nonce,X-Proxy-Signed-Headers,X-Sdk-Content-Sha256,X-Forwarded-For,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range Access-Control-Expose-Headers: X-Request-Id,X-Apig-Latency,X-Apig-Upstream-Latency,X-Apig-RateLimit-Api,X-Apig-RateLimit-User,X-Apig-RateLimit-App,X-Apig-RateLimit-Ip,X-Apig-RateLimit-Api-Allenv Access-Control-Allow-Methods: GET,POST,PUT,DELETE,HEAD,OPTIONS,PATCH Access-Control-Max-Age: 172800 Access-Control-Allow-Origin:此字段必选,“*”表示API网关接受任意域的请求。 Access-Control-Allow-Headers:当请求消息中包含此字段时,此字段必选。表示允许跨域的所有请求头信息字段。 Access-Control-Expose-Headers:表示跨域访问允许查看的返回头信息字段。 Access-Control-Allow-Methods:此字段必选,表示API网关支持的所有HTTP请求方法。 Access-Control-Max-Age:此字段可选,表示本次预检的有效期,单位:秒。在有效期内,无需再次发出预检请求。 浏览器发送一个带Origin字段的请求头: PUT /simple HTTP/1.1 Host: www.test.com Origin: http://www.cors.com Content-Type: application/x-www-form-urlencoded; charset=utf-8 Accept: application/json Date: Tue, 15 Jan 2019 01:25:52 GMT 后端服务返回消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway {"status":"200"} API网关返回消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway X-Request-Id: 454d689fa69847610b3ca486458fb08b Access-Control-Allow-Origin: * {"status":"200"}
  • 开启跨域访问 API网关默认不开启跨域访问,如果您需要开启,请参考以下说明完成跨域配置。如需自定义跨域的请求头、跨域的请求方法和指定授权访问的域,请使用配置API的跨域资源共享。 简单请求的跨域访问 如果是创建新的API,在“安全配置”时,勾选“开启支持跨域(CORS)”开关。详细的使用指导,可参考简单请求。 非简单请求的跨域访问 非简单请求的跨域访问可通过两种配置方式实现,选择其中一种配置即可。 方式一:配置一个OPTIONS请求,作为预检请求。预检请求API的参数设置,请参考以下说明填写,操作详情请参考非简单请求。 方式二:只需配置一个跨域资源共享策略并绑定API即可,配置详情请参考配置API的跨域资源共享。 在“前端定义”中,参数填写说明如下: 请求方法:选择“OPTIONS” 请求协议:选择与已开启CORS的API相同的请求协议 路径:填斜杠/ 图2 预检请求-定义API请求 在“安全配置”中,安全认证选“无认证”,勾选“开启支持跨域CORS”。 图3 预检请求-使用无认证方式 后端配置选择“Mock”。 图4 预检请求-后端选Mock
  • 什么是跨域访问 浏览器出于安全性考虑,会限制从页面脚本内发起的跨域访问(CORS)请求,此时页面只能访问同源的资源,而CORS允许浏览器向跨域服务器,发送XMLHttpRequest请求,从而实现跨域访问。 图1 跨域访问 浏览器将CORS请求分为两类: 简单请求 简单跨域请求的场景需要满足以下两个条件: 请求方法是HEAD,GET,或者POST。 HTTP的头信息不超出以下范围: Accept Accept-Language Content-Language Last-Event-ID Content-Type:取值范围:application/x-www-form-urlencoded、multipart/form-data、text/plain 对于简单请求,浏览器自动在头信息之中,添加一个Origin字段,Origin字段用于说明本次请求来自哪个源(协议+域名+端口)。服务器根据这个值,决定是否同意这次请求。服务器响应消息中包含“Access-Control-Allow-Origin”时,表示同意请求。 非简单请求 不满足简单请求两个条件的都为非简单请求。 对于非简单请求,在正式通信之前,浏览器会增加一次HTTP查询请求,称为预检请求。浏览器询问服务器,当前页面所在的源是否在服务器的许可名单之中,以及可以使用哪些HTTP请求方法和头信息字段。预检通过后,浏览器向服务器发送简单请求。
  • 简单请求 对于简单请求,您需要开启简单跨域访问。 场景一:已开启CORS,且后端服务响应消息中未指定跨域头时,API网关接受任意域的请求,并返回“Access-Control-Allow-Origin”跨域头,示例如下: 浏览器发送一个带Origin字段的请求消息: GET /simple HTTP/1.1 Host: www.test.com Origin: http://www.cors.com Content-Type: application/x-www-form-urlencoded; charset=utf-8 Accept: application/json Date: Tue, 15 Jan 2019 01:25:52 GMT Origin:此字段必选,表示请求消息所属源,上例中请求来源于“http://www.cors.com”,API网关/后端服务根据这个值,决定是否同意本次请求。 后端服务返回响应消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway {"status":"200"} API网关响应消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway X-Request-Id: 454d689fa69847610b3ca486458fb08b Access-Control-Allow-Origin: * {"status":"200"} Access-Control-Allow-Origin:此字段必选,“*”表示API网关接受任意域的请求。 场景二:已开启CORS,且后端服务响应消息中指定跨域头时,后端服务响应的跨域头将覆盖API网关增加的跨域头,示例如下: 浏览器发送一个带Origin字段的请求消息: GET /simple HTTP/1.1 Host: www.test.com Origin: http://www.cors.com Content-Type: application/x-www-form-urlencoded; charset=utf-8 Accept: application/json Date: Tue, 15 Jan 2019 01:25:52 GMT Origin:此字段必选,表示请求消息所属源,上例中请求来源于“http://www.cors.com”,API网关/后端服务根据这个值,决定是否同意本次请求。 后端服务返回响应消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway Access-Control-Allow-Origin: http://www.cors.com {"status":"200"} Access-Control-Allow-Origin:表示后端服务接受“http://www.cors.com”的请求。 API网关响应消息: HTTP/1.1 200 OK Date: Tue, 15 Jan 2019 01:25:52 GMT Content-Type: application/json Content-Length: 16 Server: api-gateway X-Request-Id: 454d689fa69847610b3ca486458fb08b Access-Control-Allow-Origin: http://www.cors.com {"status":"200"} 后端服务响应消息中的跨域头覆盖API网关响应消息中的跨域头。
  • 创建用于前端自定义认证的函数 在使用前端自定义认证对前端请求进行认证鉴权前,您需要先在FunctionGraph创建一个函数,通过函数定义您所需的认证信息。 在FunctionGraph中开发函数。 下面以python2.7语言为例,函数代码需要满足如下条件: 函数代码支持三种请求参数定义,格式为: Header中的请求参数:event["headers"]["参数名"] Query中的请求参数:event["queryStringParameters"]["参数名"] 您自定义的用户数据:event["user_data"] 函数代码获取的三种请求参数与API网关自定义认证中的参数关系如下所示: Header中的请求参数:对应自定义认证中参数位置为Header的身份来源,其参数值在您调用使用该前端自定义认证的API时传入 Query中的请求参数:对应自定义认证中参数位置为Query的身份来源,其参数值在您调用使用该前端自定义认证的API时传入 您自定义的用户数据:对应自定义认证中的用户数据,其参数值在您创建自定义认证时输入 函数的返回值不能大于1M,必须满足如下格式: { "statusCode":200, "body": "{\"status\": \"allow\", \"context\": {\"user\": \"abc\"}}" } 其中,body字段的内容为字符串格式,json解码之后为: { "status": "allow/deny", "context": { "user": "abc" } } “statusCode”字段为必选,函数服务正常且自定义认证函数代码符合规范时,statusCode的值则为自定义认证函数的响应码。 调用自定义认证的API,当自定义认证函数的响应码为非200时,API网关认为函数服务异常,并返回错误码“500”,错误信息为“Internal server error”。 调用自定义认证的API,如果自定义认证开启宽松模式,当自定义认证函数连接失败、返回“500”或者“503”时,自定义认证不会校验body字段里面的status字段,直接返回调用成功,同时从函数代码中获取到的context字段也为空。 “status”字段为必选,用于标识认证结果。只支持“allow”或“deny”,“allow”表示认证成功,“deny”表示认证失败。 “context”字段为可选,支持字符串类型键值对,当实例支持authorizer_context_support_num_bool特性时,键值对的值支持number类型或boolean类型,键值不支持JSON对象或数组。 context中的数据为您自定义的字段,认证通过后作为认证参数映射到API网关后端参数中,其中context中的参数名称与系统参数名称必须完全一致,且区分大小写,context中的参数名称必须以英文字母开头,支持英文大小写字母、数字、下划线和中划线,且长度为1 ~ 32个字符。 前端认证通过后,context中的user的值abc映射到后端服务Header位置的test参数中。 Header中的请求参数定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event["headers"].get("test")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"abcd" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp) Query中的请求参数定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event["queryStringParameters"].get("test")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"abcd" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp) 用户数据定义代码示例: # -*- coding:utf-8 -*- import json def handler(event, context): if event.get("user_data")=='abc': resp = { 'statusCode': 200, 'body': json.dumps({ "status":"allow", "context":{ "user":"abcd" } }) } else: resp = { 'statusCode': 200, 'body': json.dumps({ "status":"deny", }) } return json.dumps(resp) 测试函数。在测试事件的“事件模板”中选择“apig-event-template”,根据实际情况修改后保存测试模板,单击“测试”。 执行结果为“成功”时,表示测试成功。 接下来您需要进入API网关界面创建前端自定义认证。
  • 转换证书为PEM格式 格式类型 转换方式(通过OpenSSL工具进行转换) CER/CRT 将“cert.crt”证书文件直接重命名为“cert.pem”。 PFX 提取私钥命令,以“cert.pfx”转换为“key.pem”为例。 openssl pkcs12 -in cert.pfx -nocerts -out key.pem 提取证书命令,以“cert.pfx”转换为“cert.pem”为例。 openssl pkcs12 -in cert.pfx -nokeys -out cert.pem P7B 证书转换,以“cert.p7b”转换为“cert.cer”为例。 openssl pkcs7 -print_certs -in cert.p7b -out cert.cer 将“cert.cer”证书文件直接重命名为“cert.pem”。 DER 提取私钥命令,以“privatekey.der”转换为“privatekey.pem”为例。 openssl rsa -inform DER -outform PEM -in privatekey.der -out privatekey.pem 提取证书命令,以“cert.cer”转换为“cert.pem”为例。 openssl x509 -inform der -in cert.cer -out cert.pem
  • 更新SSL证书 进入证书列表页面,找到待更新证书,在“操作”列单击“编辑”,修改证书信息即可。 更新SSL证书不影响API的调用。 如果待更新证书已绑定独立域名,那么所有访问这个域名的客户端都会看到更新后的证书。 如果更新的SSL证书已绑定独立域名且更新的内容新增CA证书,那么独立域名侧默认关闭“支持客户端认证”即关闭HTTPS双向认证;如果更新的SSL证书已绑定独立域名且更新的内容无CA证书,那么独立域名侧默认关闭“支持客户端认证”即未开启HTTPS双向认证。
  • 使用AppCode进行API请求的简易认证 在创建API时,选择“APP认证”并且开启“支持简易认证”。 如果您修改已有API为简易认证,需要在修改完成后,将API重新发布,使简易认证模式生效。 将支持简易认证的API绑定到已创建的凭据。 发送请求时,增加请求头部参数“X-Apig-AppCode”,省略请求签名相关信息。 以Curl方式为例,增加头部参数名称:X-Apig-AppCode,参数值填已生成的AppCode。 curl -X GET "https://api.exampledemo.com/testapi" -H "content-type: application/json" -H "host: api.exampledemo.com" -H "X-Apig-AppCode: xhrJVJKABSOxc7d***********FZL4gSHEXkCMQC"
  • x-apigateway-plugins 含义:API网关定义的API插件服务。 作用域:Operation Object(2.0)/Operation Object(3.0) 示例: paths: '/path': get: x-apigateway-plugins: ['Plugin_mock'] x-apigateway-plugins 表1 参数说明 参数 是否必选 类型 说明 x-apigateway-plugins 否 Array API所绑定的插件名列表。 父主题: APIG的API设计文件扩展定义
  • APIG的API响应消息头说明 调用API时,API网关增加如下响应消息头。 X-Apig-Mode: debug表示响应消息头增加API网关调试信息。 响应消息头 描述 说明 X-Request-Id 请求ID 所有合法请求,都会返回此参数 X-Apig-Latency 从API网关接收请求到后端返回消息头的用时 仅在请求消息头包含X-Apig-Mode: debug时,返回此参数 X-Apig-Upstream-Latency 从API网关请求后端到后端返回消息头的用时 仅在请求消息头包含X-Apig-Mode: debug,且后端服务类型不为Mock时,返回此参数 X-Apig-RateLimit-api API流量控制信息 示例:remain:9,limit:10,time:10 second 仅在请求消息头包含X-Apig-Mode: debug,且API配置了API流量控制时,返回此参数 X-Apig-RateLimit-user 用户流量限制信息 示例:remain:9,limit:10,time:10 second 仅在请求消息头包含X-Apig-Mode: debug,且API配置了用户流量限制时,返回此参数 X-Apig-RateLimit-app 凭据流量限制信息 示例:remain:9,limit:10,time:10 second 仅在请求消息头包含X-Apig-Mode: debug,且API配置了凭据流量限制时,返回此参数 X-Apig-RateLimit-ip 源IP流量限制信息 示例:remain:9,limit:10,time:10 second 仅在请求消息头包含X-Apig-Mode: debug,且API配置了源IP流量限制时,返回此参数 X-Apig-RateLimit-api-allenv API默认流控信息 示例:remain:199,limit:200,time:1 second 仅在请求消息头包含X-Apig-Mode: debug时,返回此参数 X-Apig-count 请求经过APIG的总次数 经过APIG调用的合法请求都会返回此参数,当X-Apig-count请求头取值大于10时,会报错APIG.0612 父主题: 调用API
  • x-apigateway-access-control 含义:引用访问控制策略。 作用域:Operation Object(2.0)/Operation Object(3.0) 示例: paths: '/path': get: x-apigateway-access-control: 'customAccessControlName' 表1 参数说明 参数 是否必选 类型 说明 x-apigateway-access-control 否 String 访问控制策略 父主题: APIG的API设计文件扩展定义
  • API调用授权概述 使用APP认证方式的API,需要配置调用授权,把API授权给指定凭据。API调用者在调用API时,可以通过凭据的Key和Secret进行安全认证,也可以通过AppCode进行简易认证。 配置APIG的API认证凭据 在API网关中创建一个凭据,生成密钥对(Key、Secret),在调用API时,API网关服务根据密钥对进行身份核对,完成鉴权。Key唯一且不可重置,支持重置Secret。 配置APIG的API简易认证AppCode API配置简易认证模式后,在调用API时,API网关服务既可以根据AppCode进行简易认证,也可以根据密钥对进行鉴权。 父主题: 配置API调用授权(可选)
  • 为策略绑定API 单击策略名称,进入策略详情。 在API列表区域选择环境后,单击“绑定API”。 筛选API分组以及发布环境,勾选所需的API。 支持通过API名称或标签筛选API,标签为创建API时定义的标签。 单击“确定”,绑定完成。 如果单个API不需要绑定此策略,单击API所在行的“解绑”。 如果批量API不需要绑定此策略,则勾选待解绑的API,单击列表上方“解绑”。最多同时解绑1000个API。
  • x-apigateway-access-controls.policy 含义:访问控制策略定义。 作用域:x-apigateway-access-controls 示例: x-apigateway-access-controls: customAccessControlName: acl-type: "DENY" entity-type: "IP" value: 127.0.0.1,192.168.0.1/16 表1 参数说明 参数 是否必选 类型 说明 acl-type 是 String 访问控制行为,支持PERMIT、DENY entity-type 是 String 访问控制对象,仅支持IP value 是 String 访问控制策略值,多个值以“,”间隔 父主题: APIG的API设计文件扩展定义
  • x-apigateway-match-mode 含义:API网关定义的API请求URL的匹配模式,支持NORMAL和SWA。 作用域:Operation Object(2.0)/Operation Object(3.0) 示例: paths: '/path': get: x-apigateway-match-mode: 'SWA' 表1 参数说明 参数 是否必选 类型 说明 x-apigateway-match-mode 是 String API匹配模式,支持SWA和NORMAL。 SWA:前缀匹配,如“/prefix/foo”和“/prefix/bar”都会被“/prefix ”匹配,但“/prefixpart”却不会被匹配。 NORMAL:绝对匹配。 父主题: APIG的API设计文件扩展定义
  • x-apigateway-cors 含义:API网关定义的API请求是否支持跨域,boolean类型。 作用域:Operation Object(2.0)/Operation Object(3.0) 示例: paths: '/path': get: x-apigateway-cors: true 表1 参数说明 参数 是否必选 类型 说明 x-apigateway-cors 是 boolean 是否支持开启跨域请求的标识。 true:支持 false:不支持 开启跨域访问的API请求,响应会增加如下头域: 头域名称 头域值 描述 Access-Control-Max-Age 172800 预检响应最大缓存时间 单位:s Access-Control-Allow-Origin * 允许任何域。 Access-Control-Allow-Headers X-Sdk-Date,X-Sdk-Nonce,X-Proxy-Signed-Headers,X-Sdk-Content-Sha256,X-Forwarded-For,Authorization,Content-Type,Accept,Accept-Ranges,Cache-Control,Range 正式请求允许的头域 Access-Control-Allow-Methods GET,POST,PUT,DELETE,HEAD,OPTIONS,PATCH 正式请求允许的方法 父主题: APIG的API设计文件扩展定义
  • x-apigateway-backend.mockEndpoints 含义:API网关定义的MOCK类型API后端服务定义。 作用域:x-apigateway-backend 示例: paths: '/users/{userId}': get: produces: - "application/json" parameters: - name: "X-Auth-Token" description: "认证token" type: "string" in: "header" required: true responses: default: description: "default response" x-apigateway-request-type: "public" x-apigateway-backend: type: "MOCK" mockEndpoints: result-content: "mocked" 表1 参数说明 参数 是否必选 类型 说明 result-content 是 String MOCK返回结果 父主题: APIG的API设计文件扩展定义
  • APIG的API错误码说明 当调用API时,可能遇到下表中的错误码。如果遇到“APIGW”开头的错误码,请参见API网关错误码进行处理。 通过APIG接口管理API,发生错误时,产生的错误码请参考错误码。 使用APIG错误码时,请以错误码(如APIG.0101)为准,错误信息并非固定不变,有时会对错误信息进行优化修改。 表1 错误码 错误码 错误信息 HTTP状态码 语义 解决方案 APIG.0101 The API does not exist or has not been published in the environment. 404 API不存在或未发布到环境 检查调用API所使用的域名、请求方法、路径和创建的API是否一致;检查API是否发布,如果发布到非生产环境,检查请求X-Stage头是否为发布的环境名;检查调用API使用的域名是否已经绑定到API所在的分组 APIG.0101 The API does not exist. 404 API请求方法不存在 检查API请求方法是否与API定义的方法相同 APIG.0103 The backend does not exist. 500 无法找到后端 联系技术支持 APIG.0104 The plug-ins do not exist. 500 无法找到插件配置 联系技术支持 APIG.0105 The backend configurations do not exist. 500 无法找到后端配置 联系技术支持 APIG.0106 Orchestration error. 400 编排错误 检查API配置的前后端参数是否合理 APIG.0107 The custom lua script encountered an unexpected error 500 Lua脚本发生未知错误 联系技术支持 APIG.0201 API request error. 400 请求格式不合法 使用合法的请求 APIG.0201 Request entity too large. 413 请求body过大(大于12M) 减小请求body大小 APIG.0201 Request URI too large. 414 请求URI过大(大于32K) 减小请求URI大小 APIG.0201 Request headers too large. 494 请求头过大(单个请求头大于32K或所有请求头总长度大于128K) 减小请求头大小 APIG.0201 Backend unavailable. 502 后端不可用 检查API配置的后端地址是否可用 APIG.0201 Backend timeout. 504 后端超时 增大超时时间或缩小后端的处理时间 APIG.0201 An unexpected error occurred 500 内部错误 联系技术支持 APIG.0202 Backend unavailable 502 后端不可用 检查API配置的后端请求协议是否与后端服务请求协议一致 APIG.0203 Backend timeout 504 后端超时 增大超时时间或缩小后端的处理时间 APIG.0204 SSL protocol is not supported: TLSv1.1 400 SSL协议版本不支持 使用支持的SSL协议版本 APIG.0205 Verify client certificate failed 400 客户端证书校验失败 检查客户端证书是否正确 APIG.0301 Incorrect IAM authentication information. 401 IAM认证信息错误 检查token是否正确 APIG.0302 The IAM user is not authorized to access the API. 403 IAM用户不允许访问API 检查用户是否被黑白名单限制 APIG.0303 Incorrect app authentication information. 401 APP认证信息错误 检查请求的方法、路径、查询参数、请求体和签名使用的方法、路径、查询参数、请求体是否一致;检查客户端机器时间是否正确。请参考使用APP认证调用API检查签名代码的问题 APIG.0304 The app is not authorized to access the API. 403 APP不允许访问API 检查APP是否授权访问API APIG.0305 Incorrect authentication information. 401 认证信息错误 检查认证信息是否正确 APIG.0306 API access denied. 403 不允许访问API 检查是否授权访问API APIG.0307 The token must be updated. 401 token需要更新 重新从IAM获取token APIG.0308 The throttling threshold has been reached. 429 超出流控值限制 等待流控刷新后访问。如果触发调试域名的单日请求数上限,请绑定独立域名 APIG.0310 The project is unavailable. 403 project不可使用 使用其他project访问 APIG.0311 Incorrect debugging authentication information. 401 调试认证信息错误 联系技术支持 APIG.0312 Incorrect third-party authentication information,auth fail 401 第三方认证信息错误,认证失败 检查身份信息是否正确 APIG.0313 Incorrect third-party authentication information,identities error 401 第三方认证信息错误,身份错误 检查请求中身份信息与第三方认证插件中身份来源设置是否一致 APIG.0314 Incorrect third-party authentication information,access deny 403 第三方认证信息错误,访问拒绝 联系技术支持确认请求来源是否为业务请求,如果是,则提高第三方认证插件的防爆力拦截阈值以解决 APIG.0401 Unknown client IP address. 403 无法识别客户端IP地址 联系技术支持 APIG.0402 The IP address is not authorized to access the API. 403 IP地址不允许访问 检查IP地址是否被黑白名单限制 APIG.0404 Access to the backend IP address has been denied. 403 后端IP不允许访问 后端IP地址或后端域名对应的IP地址不允许访问 APIG.0405 The app is not accessed from a trusted IP address. 403 未从受信任的IP地址访问应用程序 检查源IP是否在访问控制策略中配置了允许或者拒绝 APIG.0501 The app quota has been used up. 405 APP已经超出配额 或云市场调用次数用完 购买APP配额 或重新购买云市场调用次数 APIG.0502 The app has been frozen. 405 APP被冻结 余额不足 APIG.0601 Internal server error. 500 内部错误 联系技术支持 APIG.0602 Bad request. 400 非法请求 检查请求是否合法 APIG.0605 Domain name resolution failed. 500 域名解析失败 检查域名拼写,以及域名是否绑定了正确的后端地址 APIG.0606 Failed to load the API configurations. 500 未加载API配置 联系技术支持 APIG.0607 The following protocol is supported: {xxx} 400 协议不被允许,允许的协议是xxx。 注意:xxx以实际响应中的内容为准。 改用支持的协议(HTTP/HTTPS)访问 APIG.0608 Failed to obtain the admin token. 500 无法获取管理账户 联系技术支持 APIG.0609 The VPC backend does not exist. 500 找不到负载后端 联系技术支持 APIG.0610 No backend available. 502 没有可连接的后端 检查所有后端是否可用,如调用信息与实际配置是否一致 APIG.0611 The backend port does not exist. 500 后端端口未找到 联系技术支持 APIG.0612 An API cannot call itself. 500 API调用自身 修改API后端配置,递归调用层数不能超过10层 APIG.0613 The IAM service is currently unavailable. 503 IAM服务暂时不可用 联系技术支持 APIG.0615 Incorrect third-party authentication VPC information 500 获取第三方鉴权负载通道节点失败 检查第三方认证的负载通道配置是否正确 APIG.0616 Incorrect third-party authentication request information 500 连接第三方鉴权服务失败 检查第三方认证服务是否正常 APIG.0617 Incorrect third-party authentication response information 500 获取第三方鉴权服务响应失败 检查第三方认证服务是否正常 APIG.0705 Backend signature calculation failed. 500 计算后端签名失败 联系技术支持 APIG.0802 The IAM user is forbidden in the currently selected region 403 该IAM用户在当前region中被禁用 联系技术支持 APIG.2102 PublicKey is null 400 签名密钥未找到 联系技术支持 APIG.2201 Appkey or SecretKey is invalid 400 Appkey或SecretKey不合法 检查请求的Appkey或SecretKey是否正确 APIG.2202 Refresh token is invalid 400 Refresh token不合法 检查Refresh token是否正确 APIG.2203 Access token is invalid 400 Access token不合法 检查Access token是否正确 APIG.2204 ContentType invalid 400 ContentType不合法 检查ContentType是否正确 APIG.2205 Auth parameter invalid 400 认证参数不合法 检查认证参数是否正确 APIG.2206 Auth method invalid 400 认证方法不合法 检查认证方法是否正确 APIG.2208 The length of through_data is out of range 400 through_data超长 through_data长度上限为300,根据实际情况调整through_data内容 APIG.2209 The value of grant_type is not in enum List 400 grant_type的值不合法 grant_type只支持client_credentials、refresh_token,根据实际情况修改 APIG.2210 Lack of grant_type 400 缺少授权类型 添加grant_type APIG.2211 Lack of client_id 400 缺少客户端ID 添加客户端ID APIG.2212 Lack of client_secret 400 缺少客户端密钥 添加客户端密钥 APIG.2213 Lack of refresh_token 400 缺少refresh token 联系技术支持 APIG.1001 Refresh token is expired 401 Refresh token过期 重新获取refresh token APIG.1002 Access token is expired 401 Access token过期 重新获取access token APIG.1003 App not match refresh token 401 App与refresh token不匹配 检查client_id是否正确 APIG.1004 App not exist 401 App不存在 检查access token是否正确 APIG.1009 AppKey or AppSecret is invalid 400 AppKey或AppSecret不合法 检查请求的AppKey或AppSecret是否正确 父主题: 调用API
共100000条