身份策略授权参考(新版IAM)
云服务在IAM预置了常用的权限,称为系统身份策略。如果IAM系统身份策略无法满足授权要求,管理员可以根据各服务支持的授权项,创建IAM自定义身份策略来进行精细的访问控制,IAM自定义身份策略是对系统身份策略的扩展和补充。
除IAM服务外,Organizations服务中的服务控制策略(Service Control Policy,以下简称SCP)也可以使用这些授权项元素设置访问控制策略。
SCP不直接进行授权,只划定权限边界。将SCP绑定到组织单元或者成员账号时,并没有直接对组织单元或成员账号授予操作权限,而是规定了成员账号或组织单元包含的成员账号的授权范围。IAM身份策略授予权限的有效性受SCP限制,只有在SCP允许范围内的权限才能生效。
IAM服务与Organizations服务在使用这些元素进行访问控制时,存在着一些区别,详情请参见:IAM服务与Organizations服务权限访问控制的区别。
本章节介绍IAM服务身份策略授权场景中自定义身份策略和组织服务中SCP使用的元素,这些元素包含了操作(Action)、资源(Resource)和条件(Condition)。
操作(Action)
操作(Action)即为身份策略中支持的授权项。
- “访问级别”列描述如何对操作进行分类(List、Read和Write等)。此分类可帮助您了解在身份策略中相应操作对应的访问级别。
- “资源类型”列指每个操作是否支持资源级权限。
- 资源类型支持通配符号*表示所有。如果此列没有值(-),则必须在身份策略语句的Resource元素中指定所有资源类型(“*”)。
- 如果该列包含资源类型,则必须在具有该操作的语句中指定该资源的URN。
- 资源类型列中必需资源在表中用星号(*)标识,表示使用此操作必须指定该资源类型。
关于UCS定义的资源类型的详细信息请参见资源类型(Resource)。
- “条件键”列包括了可以在身份策略语句的Condition元素中支持指定的键值。
- 如果该授权项资源类型列存在值,则表示条件键仅对列举的资源类型生效。
- 如果该授权项资源类型列没有值(-),则表示条件键对整个授权项生效。
- 如果此列条件键没有值(-),表示此操作不支持指定条件键。
关于UCS定义的条件键的详细信息请参见条件(Condition)。
- “别名”列包括了可以在身份策略中配置的策略授权项。通过这些授权项,可以控制支持策略授权的API访问。详细信息请参见身份策略兼容性说明。
您可以在身份策略语句的Action元素中指定以下UCS的相关操作。
授权项 | 描述 | 访问级别 | 资源类型(*为必须) | 条件键 | 别名 |
|---|---|---|---|---|---|
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元素中使用的资源类型。
条件(Condition)
条件键概述
条件(Condition)是身份策略生效的特定条件,包括条件键和运算符。
- 条件键表示身份策略语句的Condition元素中的键值。根据适用范围,分为全局级条件键和服务级条件键。
- 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,系统将自动获取并鉴权。详情请参见:表3。更多全局条件键说明,可参见全局条件键。
- 服务级条件键(前缀通常为服务缩写,如ucs:)仅适用于对应服务的操作,UCS服务不支持在身份策略中的条件键中配置服务级的条件键。
- 单值/多值表示API调用时请求中与条件关联的值数。单值条件键在API调用时的请求中最多包含一个值,多值条件键在API调用时请求可以包含多个值。例如:g:SourceVpce是单值条件键,表示仅允许通过某个VPC终端节点发起请求访问某资源,一个请求最多包含一个VPC终端节点ID值。g:TagKeys是多值条件键,表示请求中携带的所有标签的key组成的列表,当用户在调用API请求时传入标签可以传入多个值。
- 运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,身份策略才能生效。支持的运算符请参见:运算符。
UCS定义了以下可以在身份策略的Condition元素中使用的条件键,您可以使用这些条件键进一步细化身份策略语句应用的条件。
全局级条件键 | 类型 | 单值/多值 | 说明 |
|---|---|---|---|
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 |

