• 文档
  • 控制台
  • 登录
  • 立即注册
    目前不支持用户自主注册,如需注册账号,请联系400-080-1100
API网关CGW用户指南
最近更新时间:

4 管理与维护

4.1 权限管理

1681116760733.jpg

1681278639459.jpg 说明

权限管理支持通过统一身份认证服务(Identity and Access Management,IAM)或组织管理进行配置。

IAM 权限管理仅在“组织管理”未开启状态下可用。“组织管理”功能开启后,资源标签和 IAM 权限管理功能将不再可用。若需使用组织管理功能进行权限管理,详细描述请参见《控制台快速入门》的“组织管理”章节。

1681116760733.jpg


4.1.1 IAM 权限

1. IAM 权限简介

统一身份认证服务(Identity and Access Management,IAM)提供用户身份认证、权限分配、访问控制等功能,通过创建多个 IAM 用户并授权不同资源权限策略,可实现不同 IAM 用户之间的权限隔离。

IAM 权限基于 IAM 用户授权云资源权限,定义了允许和拒绝的访问操作。默认情况下,新创建的 IAM用户不具备任何资源权限,需授权 IAM 用户,才能基于被授权的资源权限进行操作。授权 IAM 用户,需将其加入用户组,且该用户组已添加 IAM 权限策略。

IAM 权限策略是一组资源权限集,CGW 支持“系统策略”和“自定义策略”。

2. 系统策略

系统策略统一由系统创建和维护,不支持自定义修改策略权限范围。CGW 支持的系统策略如下:

image.png

3. 自定义策略

自定义策略是由系统开放资源授权项(Action),支持自主创建、更新和删除策略。目前支持“可视化”和“脚本”两种配置方式创建自定义策略:

· 可视化配置:按可视化导航栏选择策略效力、云服务、操作、资源、条件等权限策略内容,自动生成策略。

· 脚本配置:提供基本策略模板,可根据具体需求编辑策略内容,也可直接在编辑框内编写策略内容。

CGW 支持的资源授权项如下:

image.png

4.1.2 设置 IAM 权限

4.1.2.1 任务简介

IAM 权限基于 IAM 用户授权云资源权限,定义了允许和拒绝的访问操作。默认情况下,新创建的 IAM用户不具备任何资源权限,需授权 IAM 用户,才能基于被授权的资源权限进行操作。授权 IAM 用户,可选择直接给用户添加 IAM 权限策略;也可选择需将其加入用户组,且该用户组已添加 IAM权限策略。

本小节主要介绍如何设置 IAM 权限,授权 IAM 用户使用 CGW 资源。

4.1.2.2 限制与指导

给用户组授权之前,已了解用户需具备的 CGW 权限,并已掌握权限策略授权范围。

4.1.2.3 创建 IAM 用户

(1) 在 CECSTACK 专属云控制台,鼠标悬停至页面右上角账号名称上,在弹出的下拉框中单击“身份认证与访问管理”,默认进入用户页面。

(2) 单击“创建用户”,进入创建用户页面。

(3) 配置 IAM 用户账号信息和访问方式。

· 账号信息包括用户名、显示名、手机号、邮箱、备注等。

· 访问方式可选择控制台访问或编程访问。

· 一次最多可创建 10 个 IAM 用户,且同时创建的用户访问方式须相同。

(4) 确认信息无误后,单击“确定”,弹出 IAM 用户创建成功窗口。

(5) 单击“确定”,确认下载用户密码至本地保存,且可查看新创建的用户列表。

4.1.2.4 授权单个 IAM 用户使用 CGW

(1) 在“身份认证与访问管理”管理页面。

(2) 单击“用户管理”页签,进入 IAM 用户列表页面。

(3) 在目标 IAM 用户的操作列,单击“添加权限”,弹出添加权限窗口。

(4) 在左侧列框,勾选 CGW 权限策略并单击2.jpg,为用户添加权限。

· 您也可以将已配置的权限移除。

· 权限策略列框包含该账号下全量系统策略和自定义策略。

(5) 单击“确定”,返回 IAM 用户列表页面。

4.1.2.5 (可选)授权用户组使用 CGW

(1) 在“身份认证与访问管理”管理页面。

(2) 单击“用户组”页签,进入用户组页面。

(3) (可选)新建用户组。

a. 单击“创建用户组”,弹出创建用户组窗口。

b. 配置用户组名称,并可自定义描述信息。

c. 单击“确定”,返回用户组列表。

(4) 添加组成员。

a. 在目标用户组的操作列,单击“添加组成员”,弹出添加组成员窗口。

b. 在左侧列框,勾选一个或多个目标用户并单击2.jpg ,添加用户至用户组。

· 您也可以将已添加的用户从用户组移除。

· 用户列框包含该账号下已创建的全部 IAM 用户。

· 已被添加至其他用户组的用户置灰,不能被添加到新用户组。

c. 单击“确定”,返回用户组列表页面。

(5) 添加用户组权限。

a. 在目标用户组的操作列,单击“添加权限”,弹出添加权限窗口。

b. 在左侧列框,勾选 CGW 权限策略并单击2.jpg ,为用户组添加权限。

· 您也可以将已配置的权限从用户组移除。

· 权限策略列框包含该账号下全量系统策略和自定义策略。

c. 单击“确定”,返回用户组列表页面。

4.1.2.6 IAM 用户登录并验证权限

(1) 使用 IAM 用户账号登录专属云控制台。

(2) 在服务列表中选择“API 网关 CGW”,进入 CGW 管理页面。

(3) 对资源执行相应操作,确认权限是否生效。


4.1.3 创建 IAM 自定义策略

4.1.3.1 任务简介

IAM 权限策略是一组资源权限集,CGW 支持“系统策略”和“自定义策略”。

如果预置的 CGW 系统策略不满足使用要求,可通过创建自定义策略,添加授权项(Action),对CGW 资源进行精细的权限管理。目前支持“可视化”和“脚本”两种配置方式创建自定义策略。

本小节主要介绍如何在管理控制台创建自定义策略。

4.1.3.2 可视化配置自定义策略

(1) 在 CECSTACK 专属云控制台,鼠标悬停至页面右上角账号名称上,在弹出的下拉框中单击“身份认证与访问管理”,默认进入用户页面。

(2) 单击“权限策略管理”页签,进入权限策略管理页面。

(3) 单击“创建自定义权限策略”,进入创建自定义权限策略页面。

(4) 配置权限策略基本信息。

· 权限策略名称:自定义权限策略名称。

· 备注:自定义策略配置信息。

(5) 配置方式,选择“可视化配置”。

(6) 配置权限策略。

a. 配置权限策略效力,可选择“允许”或“拒绝”。

- 允许:表示该策略为允许操作效力。

- 拒绝:表示该策略为拒绝操作效力。

b. 配置云服务,选择“API 网关 CGW”。

c. 配置云服务操作,根据需求勾选操作权限。

d. 配置资源,可选择“全部资源”或“特定资源”。

image.png

(7) 确认信息无误后,单击“确定”,返回权限策略列表页面,自定义策略即创建完成。

4.1.3.3 脚本配置自定义策略

(1) 在 CECSTACK 专属云控制台,鼠标悬停至页面右上角账号名称上,在弹出的下拉框中单击“身份认证与访问管理”,进入 IAM 用户管理页面。

(2) 单击“权限策略管理”页签,进入权限策略管理页面。

(3) 单击“创建自定义权限策略”,进入创建自定义权限策略页面。

(4) 配置权限策略基本信息。

· 权限策略名称:自定义权限策略名称。

· 备注:自定义策略配置信息。

(5) 配置方式,选择“脚本配置”。

(6) 配置权限策略。

您可直接编辑脚本;也可复制已有策略权限,并在基础上做修改。

如下是一个脚本示例:

{

"Version" : "1",

"Statement" : [ {

"Effect" : "Allow",

"Resource" : [ "cecloud:CGW:*:220006042700900:instance/cgw-d9f42cc38bcd4d06" ],

"Action" : [ "CGW:GetCgwList" ],

"Condition" : { }

} ]

}

(7) 确认信息无误后,单击“确定”,返回权限策略列表页面,自定义策略即创建完成。

4.1.3.4 为资源组配置策略

1. 新建资源组

(1) 在 CECSTACK 专属云控制台,单击页面右上角的“资源管理 > 资源组”,进入资源组页面。

(2) 单击“新建资源组”,弹出新建资源组窗口。

(3) 填写资源组名称,按需填写描述信息。

(4) 单击“确定”。

2. 转入资源

(1) 选择目标资源组,单击其操作列的“资源管理”,进入资源管理页。

(2) 单击“转入资源”,从默认资源组中选择需要的资源。

(3) 单击“确定”。

3. 为资源组配置权限策略

(4) 在 CECSTACK 专属云控制台,鼠标悬停至页面右上角账号名称上,在弹出的下拉框中单击“身份认证与访问管理”,默认进入用户页面。

(5) 在目标 IAM 用户的操作列,单击“添加权限”,弹出添加权限窗口。

(6) “授权范围”选择“指定资源组”,并在下拉框选择新建的资源组。

(7) 在左侧列框,勾选 CGW 权限策略,并单击2.jpg,为用户添加权限。

· 您也可以将已配置的权限移除。

· 权限策略列框包含该账号下全量系统策略和自定义策略(自定义策略需要在该资源组包含的资源中)。

(8) 单击“确定”,返回 IAM 用户列表页面。


4.2 实例管理

4.2.1 配置高可用

场景介绍

业务场景需要使用高可用访问方式时,您可以在 SLB 服务中配置请求访问规则。 

限制与指导

目前 CGW 默认支持 3 个 Pod,因此,在负载均衡中创建监听器时,请添加 3 个服务器。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击目标实例操作列的“配置高可用”,跳转到负载均衡控制台。

(3) 购买负载均衡实例,后续详细操作,请参见《负载均衡 SLB 用户指南》。


4.2.2 变配实例

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击目标实例操作列的“变配”。

(3) 选择扩容后实例规格,单击“下一步”,进入确认配置页。

(4) 确认配置无误后,根据页面显示,选择以下操作:

· 单击“立即申请”,待管理员审批后,即可完成实例变配。

· 单击“立即支付”,选择支付方式,并单击“确认付款”后,即可完成实例变配。

· 单击“立即开通”,即可完成实例变配。


4.2.3 续费实例

限制与指导

· 仅包周期实例,支持续费操作。

· 未过期资源,续费成功后会在当前周期结束后生效。

· 已过期且处在保留期的资源,续费周期从续费时间开始计算。

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击目标实例操作列的“更多 > 续费”,进入产品续费页。

(3) 选择续费时长,根据页面显示,选择以下操作:

· 单击“立即申请”,待管理员审批通过,即可续费成功。

· 单击“立即支付”,选择支付方式,单击“确认付款”,即可续费成功。


4.2.4 退订实例

限制与指导

仅包周期实例,支持退订。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击目标实例操作列的“更多 > 退订”,进入产品退订页。

(3) 选择退订原因,确认并勾选“我已确认本次退订金额和相关费用”。

(4) 单击“退订”。

(5) 进行手机号或邮箱验证后,单击“确定”。


4.2.5 释放实例

限制与指导

仅按需计费实例,支持释放。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击目标实例操作列的“释放”。


4.2.6 查看实例详情

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“实例详情”,进入实例详情页查看详情。


4.3 服务管理

4.3.1 管理服务

在服务列表页:

· 单击目标服务操作列的“编辑”,可修改服务的基本信息。

· 单击目标服务操作列的“删除”,可对服务进行删除,已经发布的服务需要关闭后才可以删除。

· 单击已发布的目标服务操作列的“关闭”,可关闭已发布的服务。


4.3.2 管理服务后端

在服务后端列表页:

· 单击目标后端操作列的“编辑”,可修改服务后端的信息,已发布的后端不能编辑,需关闭后编辑。

· 单击目标后端操作列的“删除”,可删除该服务后端配置。

· 单击目标后端操作列的“发布”,可发布该服务后端。

· 单击目标后端操作列的“关闭”,可关闭已发布的服务后端。


4.3.3 创建服务策略

限制与指导

· 一个 API 只能绑定一个相同类型的策略

· 策略和 API 本身相互独立,只有为 API 绑定策略后,策略才对 API 生效。为 API 绑定策略时需指定发布环境,策略只对指定环境上的 API 生效。

· 与 API 绑定的策略,无法执行删除操作。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务管理”,进入服务列表页。

(4) 单击目标实例操作列的“更多 > 策略配置”,进入服务策略列表页。

(5) 单击“创建”,弹出策略管理窗口。

image.png

(6) 根据参数说明,填写基本信息后,单击“确认”。

image.png

4.3.3.1 管理服务策略

· 单击目标服务策略操作列的“编辑”,对其信息进行编辑。

· 单击目标服务策略操作列的“启用”,启用该条服务策略(仅支持启用已发布服务下的服务策略)。

· 单击目标服务策略操作列的“关闭”,对其进行关闭。

· 单击目标服务策略操作列的“删除”,对其进行删除。

· 单击目标服务策略操作列的“详情”,查看该条服务策略的详情。


4.3.4 导出 OPEN API

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务管理”,进入服务列表页。

(4) 单击目标服务操作列的“更多 > 导出 OPEN API”,弹出 OPEN API 文档窗口。

(5) 单击“copy”,复制 OPEN API,并粘贴到目标位置。

image.png

4.3.5 级联实例

4.3.5.1 创建级联

场景介绍

您可以使用级联将某一个服务发布到其他实例,一个服务可被多次级联到不同的实例。

级联后即在目标实例生成一个新的服务,若原服务有更新,可按需再次级联同步。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务管理”,进入服务列表页。

(4) 单击目标服务操作列的“更多 > 级联实例”,进入级联实例页。

(5) 单击“创建”,弹出创建级联实例窗口。

(6) 选择要级联到的目标实例,单击“确定”。

4.3.5.2 取消级联

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务管理”,进入服务列表页。

(4) 单击目标服务操作列的“更多 > 级联实例”,进入级联实例页。

(5) 选择已级联的目标实例,单击其操作列的“取消级联”。


4.4 API管理

4.4.1 管理 API

在 API 列表页:

· 单击目标 API 操作列的“编辑”,编辑该 API 信息。

· 单击目标 API 操作列的“启用/关闭”,启用/关闭该 API。

· 单击目标 API 操作列的“详情”,查看该 API 详情。

· 单击目标 API 操作列的“删除”,删除该 API。


4.4.2 配置 API

4.4.2.1 添加 API 参数

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“API 管理 > API 管理”,进入 API 列表页。

(4) 单击目标 API 操作列的“配置”。

(5) 在基本信息页签,单击参数配置模块的“编辑参数”。

(6) 单击“添加”,填写相关信息。

(7) 单击“保存配置”。

image.png

4.4.2.2 删除 API 参数

在编辑参数页,单击目标参数操作列的“删除”,并单击“保存配置”即可删除参数。

4.4.2.3 配置 API 响应

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“API 管理 > API 管理”,进入 API 列表页。

(4) 单击目标 API 操作列的“配置”。

(5) 在基本信息页签,单击响应配置模块的“编辑响应配置”。

响应的 Key 是响应码,Value 为对应的响应信息;成功的响应码是“2xx”、“3xx”,失败的响应码是“4xx”、“5xx”。下图为响应配置示例。

image.png

(6) 编辑相关信息后,单击“确认”。

image.png

image.png

4.4.2.4 删除响应配置

单击响应配置模块的“删除响应配置”,即可删除 API 响应。

image.png

4.4.2.5 创建 API 策略

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“API 管理 > API 管理”,进入 API 列表页。

(4) 单击目标 API 操作列的“配置”,选择策略配置页签。

(5) 单击“创建”,弹出策略配置窗口。

(6) 根基参数说明填写相关信息后,单击“确认”。

image.png

4.4.2.6 管理 API 策略

· 单击目标 API 策略操作列的“启用/关闭”,启用或关闭 API 策略。

· 单击目标 API 策略操作列的“编辑”,编辑 API 策略的详细信息。

· 单击目标 API 策略操作列的“删除”,删除该 API 策略。

· 单击目标 API 策略操作列的“详情”或策略 ID,查看 API 策略的详细信息。

4.4.3 查看 API 文档

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“API 管理 > API 文档”,进入 API 文档页。

(4) 单击服务状态为“启用”的目标服务 ID。

(5) 单击目标 API ID,查看该 API 基本信息。


4.5 服务集成

4.5.1 规则管理

4.5.1.1 创建规则

限制与指导

如需创建数据库协议转换规则,请先在数据源管理页面创建 DateBase 数据源。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务集成 > 规则管理”,进入规则管理页。

(4) 单击“创建”,弹出创建规则窗口。

(5) 根据配置项说明,填写信息。

image.png

image.png

image.png

image.png

(6) 单击“确认”。

4.5.1.2 管理规则

在规则管理页:

(1) 单击目标操作列的“详情”,查看该规则详情。

(2) 单击目标规则操作列的“编辑”,编辑该规则详情。

(3) 单击目标规则操作列的“删除”,删除该规则。


4.5.2 数据源管理

4.5.2.1 创建数据源

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg上,选择“产品与服务 > API 网关CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“服务集成 > 数据源管理”,进入数据源管理页。

(4) 单击“创建”,弹出 DataBase 窗口。

(5) 根据参数说明,填写信息。

image.png

(6) 单击“确认”。

4.5.2.2 管理数据源

在数据源管理页:

· 单击目标数据源操作列的“编辑”,编辑该数据源信息。

· 单击目标数据源操作列的“删除”删除该数据源。


4.6 证书管理

4.6.1 概述

证书配合 CGW HTTPS 类型的服务使用,CGW 的 HTTPS 认证方式为单向认证。

4.6.2 创建证书

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的 1.jpg上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“证书管理”,进入证书列表页。

(4) 单击“创建”,弹出创建证书窗口。

image.png(5) 根据界面提示,填写相关信息后,单击“校验”,预览证书。

image.png

(6) 单击“提交”。

image.png

4.6.3 管理证书

· 单击目标证书操作列的“配置”,修改证书的信息。

· 单击目标证书操作列的“删除”,删除该证书。


4.7 调用者管理

4.7.1 创建调用者

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg 上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“调用者管理”,进入调用者列表页。

(4) 单击“创建”,弹出创建调用者窗口。

image.png(5) 填写相关信息后,单击“确认”。

1681116760733.jpg

1681278639459.jpg 说明

子账户创建的调用者需要主账户授权后才能生效。

1681116760733.jpg


4.7.2 管理调用者

在调用者列表页:

· 单击目标调用者操作列的“解除授权”,解除该调用者的授权。

· 单击目标调用者操作列的“编辑”,修改该调用者相关信息。

· 单击目标调用者操作列的“删除”,删除该调用者信息。


4.7.3 更新 ConsumerSecret

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg 上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“调用者管理”,进入调用者列表页。

(4) 单击目标调用者名称,进入调用者详情页。

(5) 单击 ConsumerSecret 后的“更新”,提示更新成功即可。

image.png


4.7.4 API 授权

限制与指导

· 一般默认无认证也可正常使用。

· 若使用认证方式,则需在目标 API 上,创建并启用 conusmer-auth 插件。 

操作步骤

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg 上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“调用者管理”,进入服务列表页。

(4) 单击调用者名称,进入调用者详情页。

(5) 单击“API 授权”,弹出 API 授权窗口。

image.png

(6) 选择认证方式,勾选目标 API,单击 2.jpg确认选中后,单击“确定”,完成授权。


4.7.5 管理已授权的 API

· 单击目标 API 操作列的“更改认证方式”,更改该 API 的认证方式。

· 单击目标 API 操作列的“解绑”,解除该 API 的授权绑定。


4.7.6 认证方式介绍

4.7.6.1 无认证

在访问时需要在请求头中增加:

· x-consumer-id(consumerId)

· x-consumer-timestamp(当前时间戳,单位毫秒)

4.7.6.2 code 认证

在访问时需要在请求头中增加:

· x-consumer-id(consumerId)

· x-consumer-timestamp(当前时间戳,单位毫秒)

· x-consumer-code(consumerCode)

4.7.6.3 sign 认证

· 在访问时需要在请求头中增加:

· x-consumer-id(调用者 Id)

· x-consumer-timestamp(当前时间戳,单位毫秒)

· x-consumer-code(consumerCode)

· Authorization(认证字段:hmac +base64 加密的认证信息)

· 认证信息组成说明

以“id:%s algorithm:%s headers:%s signature:%s”为例:

· Id:consumerId

· algorithm:加密算法,目前支持 md5、hmac_sha1 加密算法。

· headers:加密使用的 header 头,若有多个使用“,”分隔。

· Signature:客户端算出的加密字符,将加密使用的 header 头的值按顺序拼接,去掉空格,之后使用 ConsumerSecret 和指定的算法加密。

· 参考代码:

import org.apache.commons.codec.digest.DigestUtils;

import org.apache.http.HttpEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.StringEntity;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.net.URL;

import java.text.SimpleDateFormat;

import java.util.*;

public class App {

private static final String MAC_NAME = "HmacSHA1";

private static final String ENCODING = "UTF-8";

private static final String HTTP_METHOD_GET = "GET";

private static final String HTTP_METHOD_POST = "POST";

private static String getGMTTime() {

Calendar cd = Calendar.getInstance();

SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'",

Locale.US);

sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

String GMTTime = sdf.format(cd.getTime());

return GMTTime;

}

private static String sortQueryParams(String queryParam) {

// parameters should be in alphabetical order

if (queryParam == null || queryParam == "") {

return "";

}

String[] queryParams = queryParam.split("&");

Map<String, String> queryPairs = new TreeMap<>();

for (String query : queryParams) {

String[] kv = query.split("=");

queryPairs.put(kv[0], kv[1]);

}

StringBuilder sortedParamsBuilder = new StringBuilder();

Iterator iter = queryPairs.entrySet().iterator();

while (iter.hasNext()) {

Map.Entry entry = (Map.Entry) iter.next();

sortedParamsBuilder.append(entry.getKey());

sortedParamsBuilder.append("=");

sortedParamsBuilder.append(entry.getValue());

sortedParamsBuilder.append("&");

}

String sortedParams = sortedParamsBuilder.toString();

sortedParams = sortedParams.substring(0, sortedParams.length() - 1);

return sortedParams;

}

private static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)

throws Exception {

byte[] data = encryptKey.getBytes(ENCODING);

SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);

Mac mac = Mac.getInstance(MAC_NAME);

mac.init(secretKey);

byte[] text = encryptText.getBytes(ENCODING);

return mac.doFinal(text);

}

private static String base64Encode(byte[] key) {

final Base64.Encoder encoder = Base64.getEncoder();

return encoder.encodeToString(key);

}

private static String getMD5(String str) {

String md5Hex = DigestUtils.md5Hex(str);

return md5Hex;

}

public static void main(String[] args) throws Exception {

String environment = "";

//请求路径

String url = "http://10.255.8.78/728fbe12/ae7e95b4/get";

String host = "www.zck.com";

//请求方法

String httpMethod = "GET";

String acceptHeader = "application/json";

String consumerId = "535615868928";

String consumerSecret = "xoZQrxYdotFBwjAfdfWsQg==";

String contentType = "application/json";

String reqBody = "{\"current\":1,\"size\":10,\"businessType\":\"4\"}";

String contentMD5 = base64Encode(getMD5(reqBody).getBytes());

reqBody = "";

if (httpMethod.toUpperCase() == HTTP_METHOD_GET) {

reqBody = "";

}

// ContentType and contentMd5 should be empty if request body is not present

if (reqBody.length() == 0) {

contentType = "";

contentMD5 = "";

}

// Parse URL and assemble string to sign

URL parsedUrl = new URL(url);

String pathAndParams = parsedUrl.getPath();

if (environment != "") {

pathAndParams =

pathAndParams.substring(pathAndParams.indexOf(environment) + environment.length());

}

if (parsedUrl.getQuery() != null) {

pathAndParams = pathAndParams + "?" +

sortQueryParams(parsedUrl.getQuery());

}

System.out.println("pathAndParams:" + pathAndParams);

String xDate = getGMTTime();

Long xlongDate = System.currentTimeMillis();

String stringToSign = String.format("%s%s%s%s%s%s%s%s", consumerId,

consumerSecret, "-h-", "-ha-", "-z-", "-za-", consumerId, xDate);

stringToSign = stringToSign.replace(" ", "");

System.out.println(stringToSign);

String signature = getMD5(stringToSign);

System.out.println(signature);

//拼接 Authorization 字段【hmac+base64 编码的(id:%s algorithm:%s headers:%s

signature:%s)】

//hmac 之间需要使用:分隔

//id:consumerId

//algorithm:加密算法,目前支持 md5、hmac_sha1 加密算法。

//headers:加密使用的 header 头,若有多个使用【,】分隔。

//Signature:客户端算出的加密字符,将加密使用的 header 头的值按顺序拼接,去掉空格,之后使

用 ConsumerSecret 和指定的算法加密

String auth_str = String.format("id:%s algorithm:%s headers:%s signature:%s",

consumerId, "md5", "x-z,x-za,x-h,x-ha,x-consumer-id-test,x-date", signature);

System.out.println(auth_str);

//hmac 后的字符使用 base64 加密

Base64.Encoder encoder = Base64.getEncoder();

String authHeader = "hmac " + encoder.encodeToString(auth_str.getBytes());

System.out.println(authHeader);

// Generate request

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

// Send request

if (httpMethod.toUpperCase() == HTTP_METHOD_GET) {

HttpGet httpGet = new HttpGet(url);

httpGet.setHeader("Accept", acceptHeader);

httpGet.setHeader("Host", host);

httpGet.setHeader("x-date", xDate);

httpGet.setHeader("x-consumer-timestamp", xlongDate.toString());

httpGet.setHeader("x-consumer-code",

"48b1973a445604823d4ad6e6249cd158");

httpGet.setHeader("x-consumer-id", consumerId);

httpGet.setHeader("x-consumer-id-test", consumerId);

httpGet.setHeader("x-z", "-z-");

httpGet.setHeader("x-za", "-za-");

httpGet.setHeader("x-h", "-h-");

httpGet.setHeader("x-ha", "-ha-");

httpGet.setHeader("Content-Type", contentType);

httpGet.setHeader("Content-MD5", contentMD5);

httpGet.setHeader("Authorization", authHeader);

response = httpClient.execute(httpGet);

}

if (httpMethod.toUpperCase() == HTTP_METHOD_POST) {

HttpPost httpPost = new HttpPost(url);

httpPost.setHeader("Accept", acceptHeader);

httpPost.setHeader("Host", host);

httpPost.setHeader("x-date", xDate);

httpPost.setHeader("x-consumer-timestamp", xlongDate.toString());

httpPost.setHeader("x-consumer-id", consumerId);

httpPost.setHeader("x-consumer-id-test", consumerId);

httpPost.setHeader("x-z", "-z-");

httpPost.setHeader("x-za", "-za-");

httpPost.setHeader("x-h", "-h-");

httpPost.setHeader("x-ha", "-ha-");

httpPost.setHeader("x-consumer-code",

"1c315a127bc12e6ffbe159a370e4fade");

httpPost.setHeader("Content-Type", contentType);

httpPost.setHeader("Authorization", authHeader);

StringEntity stringEntity = new StringEntity(reqBody, ENCODING);

httpPost.setEntity(stringEntity);

response = httpClient.execute(httpPost);

}

// Receive response

HttpEntity responseEntity = response.getEntity();

if (responseEntity != null) {

System.out.println("Response status code: " + response.getStatusLine());

System.out.println("Response body: " +

EntityUtils.toString(responseEntity));

}

}

}


4.8 监控管理

限制与指导

使用前需要开启接口监控中的 Prometheus 策略。 

查看服务监控/API 监控

(1) 在 CECSTACK 专属云控制台,鼠标悬浮在页面左上角的1.jpg 上,选择“产品与服务 > API 网关 CGW”,进入 API 网关实例列表页。

(2) 单击运行中的目标实例操作列的“访问”,进入实例详情页。

(3) 在左侧导航栏,选择“监控管理”。

· 在服务监控页签,设置服务和时间范围,查看服务监控情况。

· 在 API 监控页签,设置服务、API 和时间范围,查看 API 监控情况。


4.9 日志管理

CGW 已经接入日志服务,可先在 API 启用日志策略,再前往日志服务控制台查看和检索日志。

4.10 策略使用详解

本章介绍各种策略的功能、参数、使用方法等。

4.10.1 认证

4.10.1.1 basic-auth

basic-auth 是一个认证策略,添加 basic-auth 到服务或 API,然后将其用户名或密码添加到请求头中以验证其请求。如果用户名或密码不正确,网关将会拦截请求。

image.png启用方法

在指定的服务中,创建相应的服务策略,然后发布服务策略。 

测试策略

正确请求:

curl -i -u 用户名:密码 http://xx.xx.xx.xx/aae87773/9162e537/hello(请求地址)

错误请求:

curl -i http://xx.xx.xx.xx/aae87773/9162e537/hello

image.png

4.10.1.2 key-auth

key-auth 是一个认证策略,添加 key-auth 到服务或 API,将其密钥添加到查询字符串参数或标头中以验证其请求。如果密钥不正确,网关将会拦截请求。

image.png启用方法

在指定的服务中,创建相应的服务策略,然后发布服务策略。 

测试策略

正确请求:

curl http://xx.xx.xx.xx/aae87773/9162e537/hello -H 'apikey: key 值' -i

4.10.1.3 consumer-auth

consumer -auth 是一个认证策略,配合调用者一起使用。 

启用方法

在指定的 API 中,创建相应的策略,然后发布 API 策略。


4.10.2 安全

4.10.2.1 ip-restriction

ip-restriction 是一个认证策略,ip-restriction 可以通过以下方式限制对服务或路线的访问,将 IP 地址列入白名单或黑名单。

image.png

启用方法

ip-restriction 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。

4.10.2.2 uri-restriction

uri-restriction 是一个安全策略,uri-restriction 该插件可帮助我们拦截用户请求,只需要指定需要拦截的 uri 即可。

image.png

image.png

启用方法

uri-restriction 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。

4.10.2.3 ua-restriction

ua-restriction 可以通过将指定 User-Agent 列入白名单或黑名单的方式来限制对服务或接口的访问。

image.png

启用方法

ua-restriction 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。 

测试策略

正确请求:

curl http://xx.xx.xx.xx/aae87773/9162e537/hello --header 'User-Agent:YourApp/2.0.0(User-Agent)' 

4.10.2.4 referer- restriction

referer-restriction 策略可以根据 Referer 请求头限制访问。

image.png

启用方法

referer-restriction 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。 

测试策略

正确请求

curl h http://xx.xx.xx.xx/aae87773/9162e537/hello -H 'Referer: http://xx.com/x' (注意:请求时 referer 中要加上 http:// )

4.10.2.5 cors

cors 插件可为服务端启用 CORS 的返回头。

image.png

启用方法

referer-restriction 策略可以应用在服务层面。

在指定的服务中,创建相应的服务策略,然后发布服务策略。


4.10.3 流控

4.10.3.1 limit-req

限制请求速度的策略。

image.png

启用方法

limit-req 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。

4.10.3.2 limit-count

和 GitHub API 的限速类似,在指定的时间范围内,限制总的请求个数。并且在 HTTP 响应头中返回剩余可以请求的个数。

image.png

启用方法

limit-count 策略可以应用在服务层面也可以应用在 API 层面。

· 服务层面

在指定的服务中,创建相应的服务策略,然后发布服务策略。

· API 层面

在指定的 API 中,创建相应的策略,然后发布 API 策略。

4.10.3.3 canary-test

canary-test 是一个根据设置的表达式转发流量到指定后端的策略。

image.png表 4-2 表达式字段参数说明

image.png

启用方法

canary-test 策略应用在 API 层面。

在指定的 API 中,创建相应的策略,然后发布 API 策略。

4.10.3.4 redirect

redirect 策略根据设置的表达式重定向到相应的 URL。

image.png表 4-3 Rules 字段说明

image.pngimage.png

启用方法

redirect 策略应用在 API 层面。

在指定的 API 中,创建相应的策略,然后发布 API 策略。


4.10.4 协议转化

4.10.4.1 dubbo-proxy

dubbo-proxy 策略将请求转化为 dubbo 请求。

image.png

启用方法

dubbo-proxy 策略应用在 API 层面。

在指定的 API 中,创建相应的策略,然后发布 API 策略。


4.10.5 日志

4.10.5.1 http-logger

http-logger 用于记录日志。

image.png 

启用方法

http-logger 策略应用在 API 层面。

在指定的 API 中,创建相应的策略,然后发布 API 策略。


4.10.6 接口监控

4.10.6.1 prometheus

用于监控接口的相关数据,开启后可以在 CGW 监控管理和云监控页面查看相关数据。 

启用方法

promtheues 策略应用在 API 层面。

在指定的 API 中,创建相应的策略,然后发布 API 策略。


意见反馈

文档内容是否对您有帮助?

如您有其他疑问,您也可以通过在线客服来与我们联系探讨 在线客服

联系我们
回到顶部