
# 身份策略授权参考（新版IAM）
云服务在IAM预置了常用的权限，称为系统身份策略。如果IAM系统身份策略无法满足授权要求，管理员可以根据各服务支持的授权项，创建IAM自定义身份策略来进行精细的访问控制，IAM自定义身份策略是对系统身份策略的扩展和补充。
除IAM服务外，[Organizations](https://support.huaweicloud.com/productdesc-organizations/org_01_0011.html)服务中的[服务控制策略](https://support.huaweicloud.com/usermanual-organizations/org_03_0065.html)（Service Control Policy，以下简称SCP）也可以使用这些授权项元素设置访问控制策略。
SCP不直接进行授权，只划定权限边界。将SCP绑定到组织单元或者成员账号时，并没有直接对组织单元或成员账号授予操作权限，而是规定了成员账号或组织单元包含的成员账号的授权范围。IAM身份策略授予权限的有效性受SCP限制，只有在SCP允许范围内的权限才能生效。
IAM服务与Organizations服务在使用这些元素进行访问控制时，存在着一些区别，详情请参见：[IAM服务与Organizations服务权限访问控制的区别](https://support.huaweicloud.com/organizations_faq/org_06_0004.html)。
本章节介绍IAM服务身份策略授权场景中自定义身份策略和组织服务中SCP使用的元素，这些元素包含了操作（Action）、资源（Resource）和条件（Condition）。
- 如何使用这些元素编辑IAM自定义身份策略，请参考[创建自定义身份策略](https://support.huaweicloud.com/usermanual-iam5/iam_01_0917.html)。
- 如何使用这些元素编辑SCP自定义策略，请参考[创建SCP](https://support.huaweicloud.com/usermanual-organizations/org_03_0035.html)。
#### 操作（Action）
操作（Action）即为身份策略中支持的授权项。
- "访问级别"列描述如何对操作进行分类（List、Read和Write等）。此分类可帮助您了解在身份策略中相应操作对应的访问级别。
- "资源类型"列指每个操作是否支持资源级权限。
  - 资源类型支持通配符号\*表示所有。如果此列没有值（-），则必须在身份策略语句的Resource元素中指定所有资源类型（"\*"）。
  
  - 如果该列包含资源类型，则必须在具有该操作的语句中指定该资源的URN。
  
  - 资源类型列中必需资源在表中用星号（\*）标识，表示使用此操作必须指定该资源类型。
  
  
  关于UCS定义的资源类型的详细信息请参见[资源类型（Resource）]。
  
- "条件键"列包括了可以在身份策略语句的Condition元素中支持指定的键值。
  - 如果该授权项资源类型列存在值，则表示条件键仅对列举的资源类型生效。
  
  - 如果该授权项资源类型列没有值（-），则表示条件键对整个授权项生效。
  
  - 如果此列条件键没有值（-），表示此操作不支持指定条件键。
  
  
  关于UCS定义的条件键的详细信息请参见[条件（Condition）]。
  
- "别名"列包括了可以在身份策略中配置的策略授权项。通过这些授权项，可以控制支持策略授权的API访问。详细信息请参见[身份策略兼容性说明](https://support.huaweicloud.com/iam5_faq/iam_01_1103.html)。
您可以在身份策略语句的Action元素中指定以下UCS的相关操作。
表1UCS支持的授权项 
| 授权项                                      | 描述                       | 访问级别  | 资源类型（\*为必须）          | 条件键 | 别名                          |
|:---|:---|:---|:---|:---|:---|
| ucs:clustergroups:createFleet            | 授予创建舰队的权限                | write | clustergroup         | -   | ucs:clustergroups:create    |
| ucs:clustergroups:deleteFleet            | 授予删除舰队的权限                | write | clustergroup         | -   | ucs:clustergroups:delete    |
| ucs:clustergroups:getFleet               | 授予查询舰队详情的权限              | read  | clustergroup         | -   | ucs:clustergroups:get       |
| ucs:clustergroups:listFleets             | 授予查询舰队列表的权限              | list  | clustergroup         | -   | ucs:clustergroups:list      |
| ucs:clustergroups:updateFleet            | 授予更新舰队的权限                | write | clustergroup         | -   | ucs:clustergroups:update    |
| ucs:clustergroups:addClusters            | 授予向舰队中添加集群的权限            | write | clustergroup         | -   | ucs:clustergroups:update    |
| ucs:clustergroups:enablePolicy           | 授予为舰队开启策略管理的权限           | write | clustergroup         | -   | ucs:permissionsRules:create |
| ucs:clustergroups:disablePolicy          | 授予为舰队关闭策略管理的权限           | write | clustergroup         | -   | ucs:permissionsRules:delete |
| ucs:clustergroups:createPolicy           | 授予为舰队创建策略实例的权限           | write | clustergroup         | -   | ucs:permissionsRules:create |
| ucs:clustergroups:enableFederation       | 授予为舰队开启集群联邦的权限           | write | clustergroup         | -   | ucs:clustergroups:create    |
| ucs:clustergroups:disableFederation      | 授予为舰队关闭集群联邦的权限           | write | clustergroup         | -   | ucs:clustergroups:delete    |
| ucs:clustergroups:upgradeFederation      | 授予为舰队升级集群联邦的权限           | write | clustergroup         | -   | ucs:clustergroups:create    |
| ucs:clustergroups:rollbackFederation     | 授予为舰队回滚集群联邦的权限           | write | clustergroup         | -   | ucs:clustergroups:create    |
| ucs:clustergroups:getOperation           | 授予查询舰队操作详情的权限            | read  | clustergroup         | -   | ucs:clustergroups:get       |
| ucs:clustergroups:updateFederationDomain | 授予为舰队集群联邦更新域名的权限         | write | clustergroup         | -   | ucs:clustergroups:update    |
| ucs:clustergroups:generateCredential     | 授予生成舰队集群联邦访问凭证的权限        | write | clustergroup         | -   | ucs:clustergroups:get       |
| ucs:clustergroups:generateConnection     | 授予创建舰队集群联邦连接的权限          | write | clustergroup         | -   | ucs:clustergroups:get       |
| ucs:clustergroups:connect                | 授予连接舰队集群联邦的权限            | write | clustergroup         | -   | ucs:clustergroups:get       |
| ucs:clustergroups:updateRule             | 授予修改舰队集群权限规则的权限          | write | clustergroup         | -   | ucs:clustergroups:update    |
| ucs:clusters:createCluster               | 授予创建集群的权限                | write | cluster              | -   | ucs:clusters:create         |
| ucs:clusters:deleteCluster               | 授予删除集群的权限                | write | cluster              | -   | ucs:clusters:delete         |
| ucs:clusters:getCluster                  | 授予查询集群详情的权限              | read  | cluster              | -   | ucs:clusters:get            |
| ucs:clusters:listClusters                | 授予查询集群列表的权限              | list  | cluster              | -   | ucs:clusters:list           |
| ucs:clusters:updateCluster               | 授予更新集群的权限                | write | cluster              | -   | ucs:clusters:update         |
| ucs:clusters:activate                    | 授予激活集群的权限                | write | cluster              | -   | ucs:clusters:update         |
| ucs:clusters:getConnectManifest          | 授予获取manifest将集群连接到UCS的权限 | read  | cluster              | -   | ucs:clusters:create         |
| ucs:clusters:generateConfig              | 授予生成集群配置的权限              | write | cluster              | -   | ucs:clusters:update         |
| ucs:clusters:getPackageVersion           | 授予查询集群软件包版本列表的权限         | read  | cluster              | -   | ucs:clusters:get            |
| ucs:clusters:getCredential               | 授予查询集群访问凭证的权限            | read  | cluster              | -   | ucs:clusters:get            |
| ucs:clusters:join                        | 授予将集群加入舰队的权限             | write | cluster              | -   | ucs:clusters:update         |
| ucs:clusters:unjoin                      | 授予将集群移出舰队的权限             | write | cluster              | -   | ucs:clusters:update         |
| ucs:clusters:enablePolicy                | 授予为集群开启策略管理的权限           | write | cluster              | -   | ucs:permissionsRules:create |
| ucs:clusters:disablePolicy               | 授予为集群关闭策略管理的权限           | write | cluster              | -   | ucs:permissionsRules:delete |
| ucs:clusters:createPolicy                | 授予为集群创建策略实例的权限           | write | cluster              | -   | ucs:permissionsRules:create |
| ucs:clusters:generateCredential          | 授予生成集群访问凭证的权限            | write | cluster              | -   | ucs:clusters:get            |
| ucs:clusters:updateRule                  | 授予修改集群权限规则的权限            | write | cluster              | -   | ucs:clusters:update         |
| ucs::getAddonTemplate                    | 授予查询插件模板详情的权限            | read  | \*                   | -   | ucs:addonTemplates:get      |
| ucs::listAddonTemplates                  | 授予查询插件模板列表的权限            | list  | \*                   | -   | ucs:addonTemplates:list     |
| ucs:addons:get                           | 授予查询插件实例详情的权限            | read  | cluster              | -   | -                           |
| ucs:addons:update                        | 授予更新插件实例的权限              | write | cluster              | -   | -                           |
| ucs:configsets:create                    | 授予创建配置集合的权限              | write | cluster              | -   | -                           |
| ucs:configsets:delete                    | 授予删除配置集合的权限              | write | cluster              | -   | -                           |
| ucs:configsets:get                       | 授予查询配置集合详情的权限            | read  | cluster              | -   | -                           |
| ucs:configsets:list                      | 授予查询配置集合列表的权限            | list  | cluster              | -   | -                           |
| ucs:configsets:update                    | 授予更新配置集合的权限              | write | cluster              | -   | -                           |
| ucs:permissions:listRules                | 授予查询规则列表的权限              | list  | \*                   | -   | ucs:permissionsRules:list   |
| ucs:permissions:updateRule               | 授予更新规则的权限                | write | \*                   | -   | ucs:permissionsRules:update |
| ucs:permissions:deleteRule               | 授予删除规则的权限                | write | \*                   | -   | ucs:permissionsRules:delete |
| ucs:permissions:createRule               | 授予创建规则的权限                | write | \*                   | -   | ucs:permissionsRules:create |
| ucs::getPolicyDefinition                 | 授予查询策略定义详情的权限            | read  | \*                   | -   | ucs:permissionsRules:get    |
| ucs::listPolicyDefinitions               | 授予查询策略定义列表的权限            | list  | \*                   | -   | ucs:permissionsRules:get    |
| ucs::updatepolicyDefinition              | 授予更新策略定义的权限              | write | \*                   | -   | ucs:permissionsRules:update |
| ucs:policyInstances:delete               | 授予删除策略实例的权限              | write | cluster/clustergroup | -   | ucs:permissionsRules:delete |
| ucs:policyInstances:get                  | 授予查询策略实例详情的权限            | read  | cluster/clustergroup | -   | ucs:permissionsRules:get    |
| ucs:policyInstances:list                 | 授予查询策略实例列表的权限            | list  | cluster/clustergroup | -   | ucs:permissionsRules:get    |
| ucs:policyInstances:update               | 授予更新策略实例的权限              | write | cluster/clustergroup | -   | ucs:permissionsRules:update |
| ucs:policyInstances:operate              | 授予对策略实例进行重试操作的权限         | write | cluster/clustergroup | -   | ucs:permissionsRules:update |
| ucs:policyInstances:getOperation         | 授予查询策略实例操作状态的权限          | read  | \*                   | -   | ucs:permissionsRules:get    |
| ucs:policyInstances:listOperations       | 授予查询策略实例批量操作状态的权限        | write | \*                   | -   | ucs:permissionsRules:get    |
| ucs:traffic:create                       | 授予创建域名解析记录集的权限           | write | \*                   | -   | -                           |
| ucs:traffic:list                         | 授予查询域名解析记录集的权限           | list  | \*                   | -   | -                           |
| ucs:workloads:create                     | 授予创建工作负载的权限              | write | cluster/clustergroup | -   | -                           |
| ucs:workloads:delete                     | 授予删除工作负载的权限              | write | cluster/clustergroup | -   | -                           |
| ucs:workloads:get                        | 授予查询工作负载的权限              | read  | cluster/clustergroup | -   | -                           |
| ucs:workloads:update                     | 授予更新工作负载的权限              | write | cluster/clustergroup | -   | -                           |
   
 #### 资源类型（Resource）
资源类型（Resource）表示身份策略所作用的资源。如[表2]中的某些操作指定了可以在该操作指定的资源类型，则必须在具有该操作的身份策略语句中指定该资源的URN，身份策略仅作用于此资源；如未指定，Resource默认为"\*"，则身份策略将应用到所有资源。您也可以在身份策略中设置条件，从而指定资源类型。
UCS定义了以下可以在自定义身份策略的Resource元素中使用的资源类型。
 表2UCS支持的资源类型 
| 资源类型         | URN                                                  |
|:---|:---|
| clustergroup | ucs::\<account-id\>:clustergroup:\<clustergroup-id\> |
| cluster      | ucs::\<account-id\>:cluster:\<cluster-id\>           |
   
 #### 条件（Condition）
**条件键概述**
条件（Condition）是身份策略生效的特定条件，包括[条件键](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html)和[运算符](https://support.huaweicloud.com/usermanual-iam5/iam_01_1289.html#iam_01_1289__li13495143171719)。
- 条件键表示身份策略语句的Condition元素中的键值。根据适用范围，分为全局级条件键和服务级条件键。
  - 全局级条件键（前缀为g:）适用于所有操作，在鉴权过程中，云服务不需要提供用户身份信息，系统将自动获取并鉴权。详情请参见：[表3]。更多全局条件键说明，可参见[全局条件键](https://support.huaweicloud.com/usermanual-iam5/iam_01_1287.html)。
  
  - 服务级条件键（前缀通常为服务缩写，如ucs:）仅适用于对应服务的操作，UCS服务不支持在身份策略中的条件键中配置服务级的条件键。
  
  - 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值，多值条件键在API调用时请求可以包含多个值。例如：g:SourceVpce是单值条件键，表示仅允许通过某个VPC终端节点发起请求访问某资源，一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键，表示请求中携带的所有标签的key组成的列表，当用户在调用API请求时传入标签可以传入多个值。
   
- 运算符与条件键、条件值一起构成完整的条件判断语句，当请求信息满足该条件时，身份策略才能生效。支持的运算符请参见：[运算符](https://support.huaweicloud.com/usermanual-iam5/iam_01_1289.html#iam_01_1289__li13495143171719)。
UCS定义了以下可以在身份策略的Condition元素中使用的条件键，您可以使用这些条件键进一步细化身份策略语句应用的条件。
 表3UCS支持的全局条件键 
| 全局级条件键                            | 类型      | 单值/多值 | 说明                                                                                                                                |
|:---|:---|:---|:---|
| g:CalledVia                       | string  | 多值    | 可通过该属性控制跨服务访问                                                                                                                     |
| g:CalledViaFirst                  | string  | 单值    | 特指g:CalledVia属性中的第一个元素                                                                                                            |
| g:CalledViaLast                   | string  | 单值    | 特指g:CalledVia属性中的最后一个元素                                                                                                           |
| g:CurrentTime                     | date    | 单值    | 可通过该属性控制云服务API在什么时间段内可以被访问                                                                                                        |
| g:MFAAge                          | number  | 单值    | 指当前请求者自多因素认证后经过的时间，单位为秒                                                                                                           |
| g:MFAPresent                      | boolean | 单值    | 可通过该属性控制云服务API仅能被经过多因素认证的身份调用                                                                                                     |
| g:DomainId                        | string  | 单值    | 指请求者的 Domain/Account ID                                                                                                           |
| g:DomainName                      | string  | 单值    | 指请求者的 Domain/Account Name                                                                                                         |
| g:PrincipalAccount                | string  | 单值    | 与 g:DomainId 属性完全一致                                                                                                               |
| g:PrincipalUrn                    | string  | 单值    | 指请求者身份的Urn，不同身份类型的Urn格式有所区别。                                                                                                      |
| g:PrincipalIsService              | boolean | 单值    | 指请求者身份是否是云服务，用户可以通过该属性控制只有云服务身份才能访问指定API                                                                                          |
| g:PrincipalIsRootUser             | boolean | 单值    | 指请求者身份是否是IAM根用户                                                                                                                   |
| g:PrincipalOrgId                  | string  | 单值    | 指请求者身份所属的组织ID，用户可以通过该属性控制只有特定组织内的身份才能访问指定API                                                                                      |
| g:PrincipalOrgManagementAccountId | string  | 单值    | 指请求者身份所属组织的管理账号ID                                                                                                                 |
| g:PrincipalOrgPath                | string  | 单值    | 指请求者账号所属组织中的路径，用户可以通过该属性控制只有组织中特定层级的账号才能访问指定API                                                                                   |
| g:PrincipalType                   | string  | 单值    | 指请求者身份携带的标签，目前仅请求者为带有标签的IAM用户、带有标签的信任委托、或带有会话标签的委托会话时其标签作为该属性                                                                     |
| g:Referer                         | string  | 单值    | 指请求携带的 HTTP referer header 注意： 该属性是由客户端指定的，故不推荐使用它作为访问控制的安全依赖         |
| g:ResourceAccount                 | string  | 单值    | 指请求所访问的资源的属主账号ID                                                                                                                  |
| g:SecureTransport                 | boolean | 单值    | 指请求是否使用了SSL协议                                                                                                                     |
| g:SourceIdentity                  | string  | 单值    | 特指 IAM 临时凭据STSToken中的 source_identity字段                                                                                           |
| g:SourceIp                        | IP      | 单值    | 指发起请求的源 IP 地址，专指来自公网的请求源IP                                                                                                        |
| g:TokenIssueTime                  | date    | 单值    | 指访问凭据中的STSToken的签发时间                                                                                                              |
| g:UserAgent                       | string  | 单值    | 指请求携带的HTTP User-Agent header 注意： 该属性是由客户端指定的，故不推荐使用它作为访问控制的安全依赖。 |
| g:PrincipalId                     | string  | 单值    | 指请求者的身份ID，不同身份类型的ID格式有所区别。                                                                                                        |
| g:UserName                        | string  | 单值    | 指请求者IAM User的名称                                                                                                                   |
| g:ViaService                      | boolean | 单值    | 指该请求是否是由云服务通过Impersonate协议代表用户身份发起的，特别的，当且仅当g:CalledVia 属性非空时，该属性值为true                                                           |
| g:UserId                          | string  | 单值    | 指请求者IAM User的ID                                                                                                                   |
   
