
# 基于IAM授权的策略示例
如果系统策略不满足授权要求，管理员可以创建自定义策略，并通过给用户组授予自定义策略来进行精细的访问控制，自定义策略是对系统策略的扩展和补充。您可以参考以下的策略示例配置常用云服务的自定义策略。
其他云服务的策略配置示例，请参考各云服务《用户指南》中的"权限管理"章节。
#### ECS自定义策略示例
- 示例1：授权仅允许用户批量开机、关机、重启云服务器
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ecs:cloudServerFlavors:get",
                  "ecs:cloudServers:reboot",
                  "ecs:cloudServers:start",
                  "ecs:cloudServers:get",
                  "ecs:cloudServers:list",
                  "ecs:cloudServers:stop"
              ]
          }
      ]
  }
  ```
  
- 示例2：授权仅允许用户批量关闭云服务器、删除云服务器
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ecs:cloudServers:get",
                  "ecs:cloudServers:delete",
                  "ecs:cloudServers:list",
                  "ecs:cloudServers:stop"
              ]
          }
      ]
  }
  ```
  
- 示例3：授权仅允许用户通过VNC进行登录
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "ecs:cloudServerFlavors:get",
                  "ecs:cloudServers:vnc",
                   "ecs:cloudServers:get",
                  "ecs:cloudServers:list"
               ]
          }
      ]
  }
  ```
  
- 示例4：授权拒绝用户删除云服务器 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先。
  如果您给用户授予ECSFullAccess的系统策略，但不希望用户拥有ECSFullAccess中定义的删除云服务器权限，您可以创建一条拒绝删除云服务的自定义策略，然后同时将ECSFullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对ECS执行除了删除云服务器外的所有操作。拒绝策略示例如下：
  ```
  { 
        "Version": "1.1", 
        "Statement": [ 
              { 
    "Effect": "Deny", 
                    "Action": [ 
                          "ecs:cloudServers:delete" 
                    ] 
              } 
        ] 
  }
  ```
  
#### VPC自定义策略示例
- 示例1：授权用户创建和查看VPC
  ```
  { 
      "Version": "1.1", 
      "Statement": [ 
          { 
              "Effect": "Allow", 
              "Action": [ 
                  " 
                       vpc:vpcs:create 
                       vpc:vpcs:list 
                   " 
              ] 
          } 
      ] 
  }
  ```
  
- 示例2：拒绝用户删除VPC 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先。
  如果您给用户授予VPC FullAccess的系统策略，但不希望用户拥有VPC FullAccess中定义的删除VPC权限，您可以创建一条拒绝删除VPC的自定义策略，然后同时将VPC FullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对VPC执行除了删除外的所有操作。拒绝策略示例如下：
  ```
  { 
        "Version": "1.1", 
        "Statement": [ 
              { 
    "Effect": "Deny", 
                    "Action": [ 
                          "vpc:vpcs:delete" 
                    ] 
              } 
        ] 
  }
  ```
  
- 示例3：多个授权项策略 一个自定义策略中可以包含多个授权项，且除了可以包含本服务的授权项外，还可以包含其他服务的授权项，可以包含的其他服务必须跟本服务同属性，即都是项目级服务或都是全局级服务。多个授权语句策略描述如下:
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Action": [
                  "vpc:vpcs:create",
                  "vpc:vpcs:update"
              ],
              "Effect": "Allow"
          },
          {
              "Action": [
                  "ecs:servers:delete"
              ],
              "Effect": "Allow"
          }
      ]
  }
  ```
  
  
- 示例4：授权用户查看关联资源
  查看资源A关联了哪些其他资源，不仅需要授权资源A的查询策略，还需要授权其他资源的查询策略。以查看安全组关联实例举例，安全组可以关联的实例类型包括服务器、扩展网卡、辅助弹性网卡等。查看安全组关联实例列表的授权语句策略描述如下：
  ```
  {  
      "Version": "1.1",  
      "Statement": [  
          {  
              "Effect": "Allow",  
              "Action": [  
                      "vpc:ports:get",
                      "vpc:securityGroups:get",  
                      "vpc:subNetworkInterfaces:list"  
                   "  
              ]  
          }  
      ]  
  }
  ```
  
  
 
#### ELB自定义策略示例
- 示例1：授权用户更新负载均衡器
  ```
  {  
       "Version": "1.1",  
       "Statement": [  
           {  
               "Effect": "Allow",  
               "Action": [  
                   "elb:loadbalancers:put"  
               ]  
           }  
       ]  
   }
  ```
  

- 示例2：拒绝用户删除负载均衡器 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先。
  如果您给用户授予ELB FullAccess的系统策略，但不希望用户拥有ELB FullAccess中定义的删除负载均衡器权限，您可以创建一条拒绝删除负载均衡器的自定义策略，然后同时将ELB FullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对ELB执行除了删除负载均衡器外的所有操作。拒绝策略示例如下：
  ```
  {  
         "Version": "1.1",  
         "Statement": [  
               {  
             "Effect": "Deny",  
                     "Action": [  
                           "elb:loadbalancers:delete"  
                     ]  
               }  
         ]  
   }
  ```
  
- 示例3：多个授权项策略 一个自定义策略中可以包含多个授权项，且除了可以包含本服务的授权项外，还可以包含其他服务的授权项，可以包含的其他服务必须跟本服务同属性，即都是项目级服务或都是全局级服务。多个授权语句策略描述如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "elb:loadbalancers:get",
                  "elb:loadbalancers:list",
                  "elb:loadbalancers:delete",
                  "ecs:cloudServers:delete"
              ]
          }
      ]
  }
  ```
  
#### CCE自定义策略示例
- 示例1：创建集群
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "cce:cluster:create"
              ]
          }
      ]
  }
  ```
  
- 示例2：拒绝用户删除节点 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循**Deny优先原则**。
  如果您给用户授予CCEFullAccess的系统策略，但不希望用户拥有CCEFullAccess中定义的删除节点权限（cce:node:delete），您可以创建一条相同Action的自定义策略，并将自定义策略的Effect设置为Deny，然后同时将CCEFullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对CCE执行除了删除节点外的所有操作。拒绝策略示例如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "cce:node:delete"
              ]
          }
      ]
  }
  ```
  
- 示例3：多个授权项策略 一个自定义策略中可以包含多个授权项，且除了可以包含本服务的授权项外，还可以包含其他服务的授权项，可以包含的其他服务必须跟本服务同属性，即都是项目级服务或都是全局级服务。多个授权语句策略描述如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Action": [
                  "ecs:cloudServers:resize",
                  "ecs:cloudServers:delete",
                  "ecs:cloudServers:delete",
                  "ims:images:list",
                  "ims:serverImages:create"
              ],
              "Effect": "Allow"
          }
      ]
  }
  ```
  
#### EVS自定义策略示例
- 示例1：授权用户创建云硬盘
  ```
  {
          "Version": "1.1",
          "Statement": [
                  {
                          "Action": [
                                  "evs:volumes:list",
                                  "evs:volumes:get",
                                  "evs:quotas:get",
                                  "evs:volumeTags:list",
                                  "evs:types:get",
                                  "evs:volumes:create",
                                  "ecs:cloudServerFlavors:get",
                                  "ecs:cloudServers:list",
                                  "bss:balance:view",
                                  "bss:order:pay",
                                  "bss:order:update"
                          ],
                          "Effect": "Allow"
                  }
          ]
  }
  ```
  
- 示例2：拒绝用户删除云硬盘 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循**Deny优先原则**。
  如果您给用户授予EVS FullAccess的系统策略，但不希望用户拥有EVS FullAccess中定义的删除云硬盘权限，您可以创建一条拒绝删除云硬盘的自定义策略，然后同时将EVS FullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对EVS执行除了删除云硬盘外的所有操作。拒绝策略示例如下：
  ```
  {
          "Version": "1.1",
          "Statement": [
                  {
                          "Effect": "Deny",
                          "Action": [
                                  "evs:volumes:delete"
                          ]
                  }
          ]
  }
  ```
  
- 示例3：授权用户创建强制加密的云硬盘 您可以添加一条自定义策略，用于限制用户只能创建加密的云硬盘。授权语句策略描述如下：
  ```
  {
      "Version": "5.0",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "evs:volumes:create"
              ],
              "Condition": {
                  "Bool": {
                      "evs:Encrypted": [
                          "false"
                      ]
                  }
              }
          }
      ]
  }
  ```
  
- 示例4：授权用户创建强制备份的云硬盘 您可以添加一条自定义策略，用于限制用户创建云硬盘时必须使用云备份功能。
  ![](https://support.huaweicloud.com/bestpractice-iam/public_sys-resources/note_3.0-zh-cn.png)
  如果您在创建包年/包月云硬盘时，配置了强制备份，则只能选择已有的备份存储库。
  授权语句策略描述如下：
  ```
  {
      "Version": "5.0",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "evs:volumes:create"
              ],
              "Condition": {
                  "Null": {
                      "cbr:VaultId": [
                          "true"
                      ]
                  }
              }
          }
      ]
  }
  ```
  
#### CBR自定义策略示例
- 示例1：授权用户创建、修改和删除存储库
  ```
  {
        "Version": "1.1",
        "Statement": [
              {
                    "Effect": "Allow",
                    "Action": [
                          "cbr:*:get*",
                          "cbr:*:list*",
                          "cbr:vaults:update",
                          "cbr:vaults:delete",
                          "cbr:vaults:create"
                    ]
              }
        ]
  }
  ```
  
- 示例2：拒绝用户删除存储库和备份 拒绝策略需要同时配合其他策略使用，否则没有实际作用。用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先原则。
  如果您给用户授予CBR FullAccess的系统策略，但不希望用户拥有CBR FullAccess中定义的删除存储库权限，您可以创建一条拒绝删除存储库和备份的自定义策略，然后同时将CBR FullAccess和拒绝策略授予用户，根据Deny优先原则，则用户可以对CBR执行除了删除存储库和备份外的所有操作。拒绝策略示例如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "cbr:backups:delete",
                  "cbr:vaults:delete"
              ]
          }
      ]
  }
  ```
  
- 示例3：多个授权项策略 一个自定义策略中可以包含多个授权项，且除了可以包含本服务的授权项外，还可以包含其他服务的授权项，可以包含的其他服务必须跟本服务同属性，即都是项目级服务或都是全局级服务。多个授权语句策略描述如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "cbr:vaults:create",
                  "cbr:vaults:update",
                  "cbr:vaults:delete"
              ]
          },
          {
              "Effect": "Allow",
              "Action": [
                  "sfs:shares:createShare"
              ]
          }
      ]
  }
  ```
  
#### DLI自定义策略示例
- 示例1：允许
  - 授权用户拥有在所有区域中所有数据库的创建表权限。
    ```
    {
        "Version": "1.1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dli:database:createTable"
                ],
                "Resource": [
                    "dli:*:*:database:*"
                ]
            }
        ]
    }
    ```
    
  
  - 授权用户拥有在数据库db中表tb中列col的查询权限。
    ```
    {
        "Version": "1.1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "dli:column:select"
                ],
                "Resource": [
                    "dli:*:*:column:databases.db.tables.tb.columns.col"
                ]
            }
        ]
    }
    ```
    
   
- 示例2：拒绝 拒绝策略需要同时配合其他策略使用，即用户需要先被授予部分操作权限策略后，才可以在权限内设置拒绝策略，否则用户无任何权限的情况下，拒绝策略无实际作用。
  用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先。
  - 授权用户不能创建数据库，删除数据库，提交作业（default队列除外），删除表。
    ```
    {
        "Version": "1.1",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "dli:database:createDatabase",
                    "dli:database:dropDatabase",
                    "dli:queue:submitJob",
                    "dli:table:dropTable"
                ],
                "Resource": [
                    "dli:*:*:database:*",
                    "dli:*:*:queue:*",
                    "dli:*:*:table:*"
                ]
            }
        ]
    }
    ```
    
  
  - 授权用户不能在队列名为demo的队列上提交作业。
    ```
    {
        "Version": "1.1",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "dli:queue:submitJob"
                ],
                "Resource": [
                    "dli:*:*:queue:queues.demo"
                ]
            }
        ]
    }
    ```
    
   
 
