
# 权限管理
如果您需要对FunctionGraph的函数资源，给企业中的员工设置不同的访问权限，以达到不同员工之间的权限隔离，您可以使用统一身份认证服务（Identity and Access Management，简称IAM）进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能，可以帮助您安全地控制公有云资源的访问。
通过IAM，您可以在账号中给员工创建IAM用户，并使用策略来控制员工对云资源的访问范围。例如您的员工中有负责软件开发的人员，您希望开发人员拥有FunctionGraph的使用权限，但是不希望开发人员拥有删除等高危操作的权限，那么您可以使用IAM为开发人员创建用户，通过授予仅能使用FunctionGraph，但是不允许删除的权限策略，控制开发人员对FunctionGraph资源的使用范围。
如果账号已经能满足您的要求，不需要创建独立的IAM用户进行权限管理，您可以跳过本章节，不影响您使用FunctionGraph服务的其它功能。
IAM是提供权限管理的基础服务，无需付费即可使用，您只需要为您账号中的资源进行付费。关于IAM的详细介绍，请参见[《IAM产品介绍》](https://support.huaweicloud.com/productdesc-iam/iam_01_0026.html)。
#### 约束与限制
当添加了FunctionGraph FullAccess权限的子账号在创建触发器或使用其他功能时仍没有操作权限，是因为该服务或功能不支持细粒度鉴权，因此需要您单独添加对应服务或功能的Admin权限。具体详情如下：
- CTS、APIG、DIS当前不支持细粒度鉴权，需要添加对应admin权限。
- SMN目前部分局点已支持细粒度鉴权，如您遇到无法细粒度鉴权情况，则需要添加对应admin权限。
- IoTDA是新增加的触发器，FullAccess中缺少对应权限。您在创建该触发器时会提示需要创建委托并添加相应权限，创建委托需要您先添加iam: agencies:list，iam:agencies:createAgency 权限；
- TMS、DNS、BSS、CES、EG、DMS是新增加功能，FullAccess中缺少对应权限，需单独添加；
更多触发器及相关功能需要的权限，请参见[表2]所示。
#### 企业项目授权后仍报权限不足的说明
IAM项目(Project)/企业项目(Enterprise Project)：自定义策略的授权范围，包括IAM项目与企业项目。授权范围如果同时支持IAM项目和企业项目，表示此授权项对应的自定义策略，可以在IAM和企业管理两个服务中给用户组授权并生效。如果仅支持IAM项目，不支持企业项目，表示仅能在IAM中给用户组授权并生效，如果在企业管理中授权，则该自定义策略不生效。关于IAM项目与企业项目的区别，详情请参见：[IAM和企业管理的区别](https://support.huaweicloud.com/usermanual-em/01_0101.html)。
FunctionGraph当前仅函数资源接口支持企业项目方式授权，除函数资源外的部分接口仅支持IAM项目方式授权，因此针对仅支持IAM项目方式授权时需注意：
1. 授权时选择"IAM项目视图"。
   图1IAM项目视图   
   ![](https://support.huaweicloud.com/productdesc-functiongraph/zh-cn_image_0000001991000329.png "点击放大") 
2. 选择授权范围时，建议根据最小化授权原则，选择"指定区域项目资源"，具体请根据实际业务情况选择授权范围。
 
#### FunctionGraph权限
默认情况下，新建的IAM用户没有任何权限，您需要将其加入用户组，并给用户组授予策略，才能使得用户组中的用户获得策略定义的权限，这一过程称为授权。授权后，用户就可以基于策略对云服务进行操作。
FunctionGraph资源通过物理区域划分，为项目级服务。授权时，"作用范围"需要选择"区域级项目"，然后在各区域（如华北-北京1）对应的项目（cn-north-1）中设置相关权限，并且该权限仅对此项目生效；如果在"所有项目"中设置权限，则该权限在所有区域项目中都生效。访问FunctionGraph时，需要先切换至授权区域。
根据授权精细程度分为角色和策略。
- 角色：IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度，提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系，因此给用户授予角色时，可能需要一并授予依赖的其他角色，才能正确完成业务。角色并不能满足用户对精细化授权的要求，无法完全达到企业对权限最小化的安全管控要求。
- 策略：IAM最新提供的一种细粒度授权的能力，可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式，能够满足企业对权限最小化的安全管控要求。
如[表1]所示，包括了FunctionGraph的所有系统权限。
 表1系统权限说明 
| 系统角色/策略名称                      | 描述                                                               | 类别   | 依赖关系         |
|:---|:---|:---|:---|
| FunctionGraph Administrator    | 函数工作流（FunctionGraph）管理员，具有管理函数、工作流、触发器以及调用函数的权限（该权限后期会下线，建议您不使用） | 系统角色 | Tenant Guest |
| FunctionGraph Invoker          | 函数工作流（FunctionGraph）调用者，具有查询函数、工作流、触发器以及调用函数的权限                  | 系统角色 | 无            |
| FunctionGraph FullAccess       | 函数工作流服务所有权限                                                      | 系统策略 | 无            |
| FunctionGraph ReadOnlyAccess   | 函数工作流服务只读权限                                                      | 系统策略 | 无            |
| FunctionGraph CommonOperations | 函数工作流（FunctionGraph）调用者，具有查询函数和触发器，以及调用函数的权限                     | 系统策略 | 无            |
   
 表2触发器及相关功能的权限 
| 触发器/服务功能       | 权限                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
|:---|:---|
| APIG           | apig:groups:get apig:groups:list apig:apis:create apig:apis:delete apig:apis:update apig:apis:publish apig:apis:list apig:apis:get apig:apis:offline apig:apps:list apig:envs:list                                                                                                                |
| APIG专享版        | apig:instances:get apig:instances:create apig:instances:update apig:instances:list apig:sharedInstance:operate                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| CTS            | cts:notification:create cts:notification:delete cts:notification:update cts:operation:list cts:tracker:list cts:trace:list                                                                                                                                                                                                                                                                                                                                                                                   |
| DDS            | dds:instance:get dds:instance:list                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| DIS            | dis:streams:list                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| IoTDA          | iotda:routingrules:create iotda:routingrules:delete iotda:routingrules:queryList iotda:routingrules:query iotda:routingactions:create iotda:routingactions:delete iotda:routingactions:query iotda:routingactions:queryList iotda:subscriptions:queryList iotda:rules:modifyStatus iotda:apps:queryList |
| LTS            | lts:groups:create lts:groups:get lts:groups:list lts:groups:put lts:logstreams:delete lts:logstreams:list lts:topics:get lts:subscriptions:create lts:subscriptions:delete lts:subscriptions:put lts:structConfig:create lts:structConfig:get            |
| OBS            | obs:bucket:GetBucketLocation obs:bucket:GetBucketNotification obs:bucket:PutBucketNotification obs:bucket:ListBucket                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| SMN            | smn:topic:list smn:topic:update                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| TMS            | tms:predefineTags:list tms:tagValues:list                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DNS            | dns:recordset:create, dns:recordset:list, dns:recordset:update, dns:zone:create, dns:zone:delete, dns:zone:get, dns:zone:list                                                                                                                                                                                                                                                                                                                                              |
| BSS            | bss:bill:view bss:renewal:view                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| CES            | ces:alarms:get ces:alarms:list ces:alarms:create                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DMS            | dms:instance:get                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| EG             | eg:subscriptions:get eg:subscriptions:list eg:sources:list eg:sources:get eg:agency:create eg:subscriptions:create eg:subscriptions:delete eg:subscriptions:operate                                                                                                                                                                                                                                                               |
| 分布式消息服务 Kafka版 | dms:instance:list dms:instance:get dms:group:delete                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
[表3]列出了FunctionGraph常用操作与系统权限的授权关系，您可以参照该表选择合适的系统权限。
 表3常用操作与系统权限之间的关系 
| 操作       | FunctionGraph Invoker | FunctionGraph Administrator | FunctionGraph ReadOnlyAccess | FunctionGraph CommonOperations | FunctionGraph FullAccess |
|:---|:---|:---|:---|:---|:---|
| 创建函数     | ×                     | √                           | ×                            | ×                              | √                        |
| 查询函数     | √                     | √                           | √                            | √                              | √                        |
| 修改函数     | ×                     | √                           | ×                            | ×                              | √                        |
| 删除函数     | ×                     | √                           | ×                            | ×                              | √                        |
| 调用函数     | √                     | √                           | ×                            | √                              | √                        |
| 查看函数日志   | √                     | √                           | √                            | √                              | √                        |
| 查看函数指标数据 | √                     | √                           | √                            | √                              | √                        |
   
#### 相关链接
- [IAM产品介绍](https://support.huaweicloud.com/productdesc-iam/iam_01_0026.html)。
- [创建用户组、用户并授予FunctionGraph权限](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0215.html)。
- [策略支持的授权项](https://support.huaweicloud.com/api-functiongraph/functiongraph_06_1100.html)。
 
