
# 用户授权最小化权限实践
#### 实践场景及目标
假设某工程师专职负责图引擎服务相关工作，且仅需要GES服务的管理员权限。则在为该用户授权时，如果项目管理员直接赋予该工程师IAM账号GES FullAccess或GES Administrator权限，则会出现非必需权限过大的风险：GES FullAccess系统策略预置了依赖服务（ECS、VPC服务）的所有权限，GES Administrator角色依赖Server Administrator权限和Tenant Guest权限，均会导致其拥有ECS和VPC服务的管理员权限。
为解决此问题，项目管理员可以按照如下解决方案进行权限最小化配置，这样既能满足实际业务使用，也避免了权限过大的风险。
1. 创建自定义策略，包含GES服务所有权限及GES服务依赖服务最小权限合集。
2. 创建用户组，将该工程师IAM账号加入到用户组中，并授予上一步中创建的自定义策略。
 
#### 操作流程
1. 创建自定义策略：创建自定义策略，授予GES服务所有权限以及GES服务依赖服务的最小权限合集。
2. 创建用户组并授权：创建用户组，并授予上一步中创建的自定义策略。
3. 创建IAM用户并加入用户组：为工程师创建IAM账号，并加入到用户组中。
 
#### 创建自定义策略
1. 使用华为账号登录"统一身份认证服务 IAM"控制台。
2. 在IAM服务控制台中，单击"权限管理 \> 权限"，在权限页面单击右上方的"创建自定义策略"。 
   图1创建自定义策略   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451609504.png)
   
   
3. 在"创建自定义策略"界面，策略配置方式切换至JSON视图，然后按照如下策略内容，分别创建GES_PermissionsOfDependentService_global和GES_PermissionsOfDependentService_region自定义策略。 
   ![](https://support.huaweicloud.com/bestpractice-ges/public_sys-resources/note_3.0-zh-cn.png)
   创建自定义策略时，暂不支持同时选全局级云服务和项目级云服务，因此需要将依赖服务自定义策略拆分为两条分别创建。
   图2创建自定义策略示例   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451626770.png)
   依赖的全局级（global级）云服务的自定义策略GES_PermissionsOfDependentService_global：
   ```
   {
       "Version": "1.1",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "obs:object:GetObject",
                   "obs:bucket:GetBucketLocation",
                   "obs:bucket:HeadBucket",
                   "obs:object:PutObject",
                   "obs:bucket:ListAllMyBuckets",
                   "obs:bucket:ListBucket",
                   "rms:resources:list",
                   "tms:*:list",
                   "eps:enterpriseProjects:list",
                   "eps:enterpriseProjects:get",
                   "iam:users:listUsers",
                   "iam:agencies:listAgencies",
                   "iam:permissions:listRolesForAgencyOnDomain",
                   "iam:permissions:listRolesForAgencyOnProject",
                   "iam:permissions:listRolesForAgency"
               ]
           }
       ]
   }
   ```
   依赖的项目级（region级）云服务的自定义策略GES_PermissionsOfDependentService_region：
   ```
   {
       "Version": "1.1",
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ges:*:*",
                   "ecs:cloudServerNics:update",
                   "ecs:flavors:get",
                   "ecs:cloudServerFlavors:get",
                   "ecs:availabilityZones:list",
                   "evs:types:get",
                   "vpc:ports:get",
                   "vpc:ports:create",
                   "vpc:ports:update",
                   "vpc:ports:delete",
                   "vpc:quotas:list",
                   "vpc:securityGroups:get",
                   "vpc:subnets:get",
                   "vpc:vpcs:list",
                   "vpc:vpcs:get",
                   "ces:*:list*",
                   "ces:*:get*",
                   "lts:*:list",
                   "lts:*:get"
               ]
           }
       ]
   }
   ```
   ![](https://support.huaweicloud.com/bestpractice-ges/public_sys-resources/note_3.0-zh-cn.png)
   - 当图实例需要绑定EIP时，全局级策略GES_PermissionsOfDependentService_global需要增加以下action用于创建委托： "iam:roles:listRoles","iam:roles:createRole","iam:permissions:grantRoleToAgencyOnDomain","iam:agencies:getAgency","iam:agencies:createAgency","iam:roles:updateRole","iam:permissions:grantRoleToAgency","iam:permissions:grantRoleToAgencyOnProject"
     项目级策略GES_PermissionsOfDependentService_region需要增加以下action用于绑定eip：
     "vpc:publicIps:get","vpc:publicIps:list","vpc:publicIps:update"
     
   
   - 当需要在创建图实例时自动创建eip时，项目级策略GES_PermissionsOfDependentService_region需要增加以下action用于创建eip： "vpc:publicIps:create"
     
   
   - 当需要在删除图实例时删除绑定的eip时，项目级策略GES_PermissionsOfDependentService_region需要增加以下action用于删除eip： "vpc:publicIps:delete"
     
    
   
   
 
#### 创建用户组并授权
1. 在IAM服务控制台中，左侧导航窗格中，选择"用户组"，单击右上角的"创建用户组"。 
   图3创建用户组   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002484982065.png)
   
   
2. 在"创建用户组"界面，输入用户组名称"GES_Policy"。 
   图4用户组名称   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451904664.png)
   
   
3. 单击"确定"，用户组创建完成，用户组列表中显示新创建的用户组。
4. 在用户组列表中，单击新建用户组右侧的"授权"。 
   图5用户组授权   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002484986173.png)
   
   
5. 在搜索框中输入GES_PermissionsOfDependentService_global，勾选搜索到的自定义策略，单击"下一步"。 
   图6授权global自定义策略   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002485109977.png)
   
   
6. 授权范围方案选择"全局服务资源"，单击"确定"，完成授权。 
   图7设置授权范围   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002484991157.png)
   
   
7. 重复步骤4，在搜索框中输入GES_PermissionsOfDependentService_region，勾选搜索到的自定义策略，单击"下一步"。 
   图8授权region自定义策略   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002485111973.png)
   
   
8. 授权范围方案选择"指定区域项目资源"下需要授予的区域项目，单击"确定"，完成授权。 
   图9设置授权范围   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451753800.png)
   
   
 
 #### 创建IAM用户并加入用户组
1. 在IAM服务控制台中，左侧导航窗格中，选择"用户"，单击右上方的"创建用户"。 
   图10创建用户   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451915384.png)
   
   
2. 在"创建用户"页面按照下图配置"用户信息"，完成配置后单击页面右下角的"下一步"。 
   - 用户信息：用户名自定义填写。
   
   - 访问方式：选择"管理控制台访问"和"编程访问"。
   
   - 凭证类型：勾选访问密钥和密码，推荐为用户自定义初始密码。
   
   - 登录保护：根据实际需求选择。
   
   
   图11配置用户信息   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002451756660.png)
   
   
3. 选择将用户加入到GES_Policy用户组，单击页面右下角的"创建用户"。 
   图12加入用户组   
   ![](https://support.huaweicloud.com/bestpractice-ges/zh-cn_image_0000002484997621.png)
   
   
 
#### 用户登录并验证权限
1. 以[创建IAM用户并加入用户组]章节中新建的IAM账号登录华为云控制台，切换至授权区域。
2. 在"服务列表"中选择图引擎服务，进入图引擎服务控制台。
3. 进入图引擎服务控制台的各个页面，验证各项功能是否正常。
 
