身份策略授权参考(新版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:PrincipalServiceName |
string |
单值 |
指请求者的云服务Service Principal名称 |
|
g:PrincipalType |
string |
单值 |
指请求者身份携带的标签,目前仅请求者为带有标签的IAM用户、带有标签的信任委托、或带有会话标签的委托会话时其标签作为该属性 |
|
g:Referer |
string |
单值 |
指请求携带的 HTTP referer header
注意:
该属性是由客户端指定的,故不推荐使用它作为访问控制的安全依赖 |
|
g:ResourceAccount |
string |
单值 |
指请求所访问的资源的属主账号ID |
|
g:SecureTransport |
boolean |
单值 |
指请求是否使用了SSL协议 |
|
g:SourceAccount |
string |
单值 |
指跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceAccount 表示的是该资源的属主账号。该属性主要是为了解决跨服务访问场景下的confused deputy问题 |
|
g:SourceUrn |
string |
单值 |
指跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceUrn 表示的是该资源 Urn。与 g:SourceAccount 相同,该属性也是为了解决跨服务访问场景下的 confused deputy 问题 |
|
g:SourceIdentity |
string |
单值 |
特指 IAM 临时凭据STSToken中的 source_identity字段 |
|
g:SourceIp |
IP |
单值 |
指发起请求的源 IP 地址,专指来自公网的请求源IP
注意:
如果请求是从 VPC 内的主机发起并经过 VPC Endpoint 时,则会使用 g:VpcSourceIp 来取代 g:SourceIp。 |
|
g:SourceVpc |
string |
单值 |
指VPC Endpoint 所在的VPC ID |
|
g:SourceVpce |
string |
单值 |
指发起请求使用的VPC Endpoint ID |
|
g:SourceVpceAccount |
string |
单值 |
指发起请求使用的VPC Endpoint ID所属账号ID |
|
g:SourceVpceOrgId |
string |
单值 |
指发起请求使用的VPC Endpoint ID所属账号所属组织ID |
|
g:SourceVpceOrgPath |
string |
单值 |
指发起请求使用的VPC Endpoint ID所属账号所属组织中的路径 |
|
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:VpcSourceIp |
IP |
单值 |
指VPC内访问VPC Endpoint上一跳节点所使用的地址 |
|
g:UserId |
string |
单值 |
指请求者IAM User的ID |
|
g:AssumedByService |
string |
单值 |
指云服务切换到委托上发起访问时,该云服务的service_principal |