API网关权限管理

如果您需要对华为云上购买的API网关资源,给企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,您可以使用统一身份认证服务(Identity and Access Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全的控制华为云资源的访问。

通过IAM,您可以在华为云帐号中给员工创建IAM用户,并使用策略来控制员工对API网关资源的访问范围。

如果华为云帐号已经能满足您的需求,不需要创建独立的IAM用户进行权限管理,您可以跳过以下内容,不影响您使用API网关服务的其它功能。

IAM是华为云提供权限管理的基础服务,无需付费即可使用,您只需要为您帐号中的资源进行付费。关于IAM的详细介绍,请参见《IAM产品介绍》

API网关系统角色

默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。

API网关服务部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问API网关服务时,需要先切换至授权区域。

权限根据授权精细程度分为角色和策略,策略是角色的升级版。

角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。

策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对API网关服务,管理员能够控制IAM用户进行指定的管理操作。权限策略以API接口为粒度进行权限拆分,API网关服务支持的API授权项请参见权限策略和授权项

如表所示,包括了API网关的所有系统角色和策略。

系统角色/策略名称
描述
类别
依赖关系

APIG Administrator

API网关服务的管理员权限。拥有该权限的用户可以使用共享版和专享版API网关服务的所有功能。

系统角色

无。

APIG FullAccess

API网关服务所有权限。拥有该权限的用户可以使用专享版API网关服务的所有功能。

系统策略

无。

APIG ReadOnlyAccess

API网关服务的只读访问权限。拥有该权限的用户只能查看专享版API网关的各类信息。

系统策略

无。

给用户授权API网关权限流程

1.创建用户组并授权

在IAM控制台创建用户组,并授予API网关服务的权限“APIG Administrator”或“APIG FullAccess”。

2.创建用户并加入用户组

在IAM控制台创建用户,并将其加入1中创建的用户组。

3.用户登录并验证权限

新创建的用户登录控制台,验证API网关服务的权限。


API网关自定义策略

如果系统预置的API网关权限,不满足您的授权要求,可以创建自定义策略。自定义策略中可以添加的授权项(Action)请参考权限策略和授权项

目前华为云支持以下两种方式创建自定义策略:

可视化视图创建自定义策略:无需了解策略语法,按可视化视图导航栏选择云服务、操作、资源、条件等策略内容,可自动生成策略。

JSON视图创建自定义策略:可以在选择策略模板后,根据具体需求编辑策略内容;也可以直接在编辑框内编写JSON格式的策略内容。

具体创建步骤请参见创建自定义策略。以下为常用的API网关自定义策略样例。

示例1:授权用户创建API、调试API的权限

{

"Version": "1.1",

"Statement": [

{

"Effect": "Allow",

"Action": [

"

apig:apis:create

apig:apis:debug

"

]

}

]

}


示例2:拒绝用户创建API分组

拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先。

如果您给用户授予APIG FullAccess的系统策略,但不希望用户拥有APIG FullAccess中定义的创建API分组权限,您可以创建一条拒绝创建API分组的自定义策略,然后同时将APIG FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以执行除创建API分组外的所有操作。拒绝策略示例如下:

{

"Version": "1.1",

"Statement": [

{

"Effect": "Allow",

"Action": [

"

apig:apis:create

apig:apis:debug

"

]

}

]

}

API网关权限策略和授权项

如果您需要对您所拥有的API网关服务进行精细的权限管理,您可以使用统一身份认证服务。

默认情况下,新建的IAM用户没有任何权限,您需要将其加入用户组,并给用户组授予策略(以JSON格式描述权限集的语言),才能使用户组中的用户获得策略定义的权限,这一过程称为授权。授权后,用户就可以基于策略对云服务进行操作。关于策略的语法结构及示例,请参见上文。

华为云帐号具备所有接口的调用权限,如果使用帐号下的IAM用户发起API请求时,该IAM用户必须具备调用该接口所需的权限,否则,API请求将调用失败。每个接口所需要的权限,与各个接口所对应的授权项相对应,只有发起请求的IAM用户被授予授权项所对应的策略,该用户才能成功调用该接口。例如,IAM用户要调用接口来创建API,那么这个IAM用户被授予的策略中必须包含允许“apig:apis:create”的授权项,该接口才能调用成功。

支持的授权项

细粒度策略支持的操作与API相对应,授权项列表说明如下:

  • 权限:自定义策略中授权项定义的内容即为权限。
  • 授权项:自定义策略中支持的Action,在自定义策略中的Action中写入授权项,可以实现授权项对应的权限功能。
  • 对应API接口:自定义策略实际调用的API接口。
  • 授权范围:自定义策略的授权范围,包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目,表示此授权项对应的自定义策略,可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目,不支持企业项目,表示仅能在IAM中给用户组授权并生效,如果在企业管理中授权,则该自定义策略不生效。

以下仅给出部分授权项,更多API网关权限明细请参考权限明细

权限描述
授权项
对应的API
IAM项目(Project)
企业项目(Enterprise Project)

创建API网关专享版实例

apig:instances:create

POST /v2/{project_id}/apigw/instances

更新API网关专享版实例

apig:instances:update

PUT /v2/{project_id}/apigw/instances/{instance_id}

查看API网关专享版实例

apig:instances:get

GET /v2/{project_id}/apigw/instances/{instance_id}

创建API分组

apig:groups:create

POST /v2/{project_id}/apigw/instances/{instance_id}/api-groups

查看API分组

apig:groups:get

GET /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}

分组域名绑定证书

apig:domains:bindCertificat

POST /v2/{project_id}/apigw/instances/{instance_id}/api-groups/{group_id}/domains/{domain_id}/certificate

查看环境变量

apig:variables:get

GET /v2/{project_id}/apigw/instances/{instance_id}/env-variables/{env_variable_id}

创建API

apig:apis:create

POST /v2/{project_id}/apigw/instances/{instance_id}/apis

发布API

apig:apis:publish

POST /v2/{project_id}/apigw/instances/{instance_id}/apis/action

下线API

apig:apis:offline

POST /v2/{project_id}/apigw/instances/{instance_id}/apis/action

调试API

apig:apis:debug

POST /v2/{project_id}/apigw/instances/{instance_id}/apis/debug/{api_id}

导入API

apig:apis:import

POST /v2/{project_id}/apigw/instances/{instance_id}/openapi/import