网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
云化数据中心 CloudDC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
本文导读

SCP语法介绍

更新时间:2025-01-22 GMT+08:00
分享

下面以RAM的自定义策略为例,说明策略的语法。

{
  "Version": "5.0",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": [
        "ram:resourceShares:create"
      ],
      "Resource": [
        "*"
      ],
      "Condition": {
       "ForAnyValue:StringNotEquals": {
          "g:RequestTag/owner": [
            "Alice",
            "Jack"
          ]
        }
      }
    }
  ]
}
说明:

SCP的语法与IAM身份策略的语法一致。

策略结构

策略结构包括Version(策略版本号)和Statement(策略权限语句)两部分,其中Statement元素的值可以是多个对象组成的数组,表示不同的权限约束。

图1 策略结构

策略参数

策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。

表1 策略参数说明

参数

是否必选

含义

Version

必选

策略的版本。

5.0(不可自定义)

Statement:

策略的授权语句

Statement Sid

可选

策略语句标识符。您可为语句数组中的每个策略语句指定Sid值。

用户自定义字符串。

Effect:作用

必选

定义Action中的操作权限是否允许执行。

  • Allow:允许执行。
  • Deny:不允许执行。
说明:
  • 当同一个Action的Effect既有Allow又有Deny时,遵循Deny优先的原则。
  • 当Effect为Allow时,不能有Condition元素。

Action:授权项

Allow时必选。

Deny时与NotAction二选一。

操作权限。

格式为“服务名:资源类型:操作”。授权项支持通配符号*,通配符号*表示所有。

参数中的通配符*和?只能单独使用或放在字符串结尾处。它不能出现在字符串的开头或中间部分。

例如“vpc:subnets:list”:表示查看VPC子网列表权限,其中vpc为服务名,subnets为资源类型,list为操作。

NotAction

Allow时不可选。

Deny时与Action二选一。

Deny时,NotAction列出的操作或服务不受当前策略影响,即除了NotAction列表中的操作之外,其他操作deny。

格式同Action。

Condition:条件

Allow时不可选。

使策略生效的特定条件,包括条件键运算符

格式为“条件运算符:{条件键:[条件值1,条件值2]}”。

如果您设置多个条件,同时满足所有条件时,该策略才生效。

示例:

"StringEndWithIfExists":{"g:UserName":["specialCharactor"]}:表示当用户输入的用户名以"specialCharactor"结尾时该条statement生效。

Resource:资源类型

可选

未指定时,Resource默认为“*”,策略应用到所有资源。

策略所作用的资源。

Allow时,只能为“*”。

Deny时,可选择“*”或具体资源,格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。

示例:"ecs:*:*:instance:*":表示所有的ECS实例。

说明:

SCP中不支持以下元素:

  • Principal
  • NotPrincipal
  • NotResource

条件键

条件键表示策略语句的Condition元素中的键值。根据适用范围,分为全局条件键和服务条件键。
  • 全局级条件键(前缀为g:)适用于所有操作,在鉴权过程中,云服务不需要提供用户身份信息,组织将自动获取并鉴权。
  • 服务级条件键(前缀为服务缩写,如ram:)仅适用于对应服务的操作。详情请参见SCP授权参考中各服务支持的服务级条件键。
表2 通用全局条件键

全局条件键

类型

说明

g:CalledVia

字符串数组

用于控制跨服务访问。当身份主体向云服务发起访问时,该服务可能会转发身份主体的访问请求至其他服务,g:CalledVia包含服务转发访问的请求链中代表身份主体发出请求的服务列表。如服务转发身份主体的访问时,此条件键存在;如身份主体直接访问,则此条件键不存在。示例参见1

g:CalledViaFirst

字符串

与g:CalledVia相同,特指g:CalledVia属性中的第一个元素,即第一个转发身份主体访问的服务。

g:CalledViaLast

字符串

与g:CalledVia相同,该属性特指g:CalledVia属性中的最后一个元素,即最后一个转发身份主体访问的服务。

g:CurrentTime

时间

接收到请求的时间。以ISO 8601格式表示,例如:2012-11-11T23:59:59Z。示例参见2

g:DomainName

字符串

指请求者的账号名称。

g:DomainId

字符串

指请求者的账号ID。

g:EnterpriseProjectId

字符串

指该请求对应的企业项目ID或者请求操作的资源所属的企业项目ID。当请求指定了具体的企业项目ID或访问的资源属于具体的企业项目时,如该API所对应授权项(Action)支持g:EnterpriseProjectId,则此条件键存在。此条件键为鉴权场景下使用的条件键,并非过滤条件,即不会过滤出符合该条件键所指定的企业项目下的资源。示例参见3

g:MFAPresent

布尔值

指是否使用MFA多因素认证方式获取STS Security Token。仅在使用MFA认证登录控制台访问或使用MFA获取的委托会话发出请求时,此条件键为true。仅在STS Security Token发出请求时,此条件键存在。示例参考见4

g:MFAAge

数值

指通过MFA多因素认证方式获取的STS Security Token的生效时长。仅在使用MFA认证登录控制台访问,或使用MFA获取的委托会话发出请求时,此条件键存在。单位为秒。

g:PrincipalAccount

字符串

与g:DomainId属性完全一致。

g:PrincipalUrn

字符串

指请求者身份主体的URN。不同身份类型的URN格式如下:

IAM用户:iam::<domain-id>:user:<user-name>

IAM委托会话:sts::<domain-id>:assumed-agency:<agency-name>/<session-name>

虚拟联邦用户:sts::<domain-id>:external-user:<idp-id>/<session-name>

示例参见5

g:PrincipalIsRootUser

布尔值

指请求者身份主体是否是IAM根用户。所有请求中都会携带该属性。

g:PrincipalIsService

布尔值

指请求者身份主体是否是云服务,可以通过该属性控制只有云服务身份才能访问指定API。

g:PrincipalOrgId

字符串

指请求者身份主体所属的组织ID,用户可以通过该属性控制只有特定组织内的身份才能访问指定API,仅在请求者存在所属组织时,此条件键存在。示例参见6

g:PrincipalOrgManagementAccountId

字符串

指请求者身份主体所属组织的管理账号ID,仅在请求者存在所属组织时,此条件键存在。示例参见7

g:PrincipalOrgPath

字符串

指请求者身份主体所属组织中的路径,可以通过该属性控制只有组织中特定层级的账号才能访问指定API,仅在请求者存在所属组织时,此条件键存在。示例参见8。一个账号的组织路径的格式如下:

<organization-id>/<root-id>/(<ou-id>/)*<account-id>

g:PrincipalServiceName

字符串

指请求者的身份主体名称,仅在请求者为云服务时,此条件键存在。示例参见9

g:PrincipalTag/<tag-key>

字符串

指请求者身份主体携带的标签,标签键<tag-key>不区分大小写,仅请求者为带有标签的IAM用户、带有标签的信任委托、或带有会话标签的委托会话时,此条件键存在。示例参见10

g:PrincipalType

字符串

指请求者的身份主体类型,共有三种类型:User、AssumedAgency、ExternalUser。当以IAM用户访问时,该属性取值为User;当以IAM委托会话访问时,取值为AssumedAgency;当以虚拟联邦用户访问时,取值为ExternalUser。

g:Referer

字符串

指请求携带的HTTP referer header,注意由于该属性是由客户端指定的,故不推荐使用它作为访问控制的安全依赖。

g:RequestedRegion

字符串

指请求的目标区域(Region)。请求的目标云服务是区域级服务时,设置为对应的区域ID以进行控制,例如cn-north-4。仅在请求为部分区域级服务时,此条件键存在。

g:RequestTag/<tag-key>

字符串

指请求中携带的标签,标签键<tag-key>不区分大小写。当请求者在调用API时传入了标签(例如给资源添加标签的API、创建资源同时支持传入标签的API等),可以通过此条件键检查此请求是否包含对应标签。仅在支持g:RequestTag/<tag-key>的授权项(Action)中,当前请求的API传入标签时,此条件键存在。更多内容请参见SCP授权参考。示例参见11

g:ResourceAccount

字符串

指请求所访问的资源的属主账号ID,仅在支持资源细粒度授权服务的授权项(Action)中,此条件键存在。更多内容请参见SCP授权参考。示例参见12

g:ResourceOrgId

字符串

指请求所访问的资源的属主账号所在的组织ID。仅在支持资源细粒度鉴权的授权项(Action)中,且资源属主账号在组织内时,此条件键存在。更多内容请参见SCP授权参考。示例参见13

g:ResourceOrgPath

字符串

指请求所访问的资源的属主账号在组织中的路径。仅在支持资源细粒度鉴权的授权项(Action)中,且资源属主账号在组织内时,此条件键存在。更多内容请参见SCP授权参考。示例参见14

g:ResourceTag/<tag-key>

字符串

指请求所访问的资源身上携带的标签,标签键<tag-key>不区分大小写。用户可以通过该属性控制只能访问带有特定标签的资源。仅在支持 g:ResourceTag/<tag-key>的授权项(Action)中,当前访问资源携带标签,此条件键存在。更多内容请参见SCP授权参考。示例参见15

g:SecureTransport

布尔值

指请求是否使用了SSL协议。

g:SourceAccount

字符串

指云服务跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceAccount表示的是该资源的所属主账号。仅在支持g:SourceAccount的授权项(Action)中,此条件键存在。仅应在Principal是服务主体的资源策略中使用此条件键。示例参见16

g:SourceUrn

字符串

指云服务跨服务访问场景下,云服务是为哪一个资源所发起的请求,g:SourceUrn表示的是该资源URN。仅在支持g:SourceUrn的授权项(Action)中,此条件键存在。仅应在Principal是服务主体的资源策略中使用此条件键。示例参见17

g:SourceIdentity

字符串

指用户第一次通过STS服务的AssumeAgency API获取IAM临时凭据时指定其中的source_identity字段,且在后续的委托切换中不可再更改。仅在指定了source_identity的STS Security Token版本发出请求时,此条件键存在。示例参见18

g:SourceIp

IP

指发起请求的源IP地址,专指来自公网的请求源IP。示例参见19

说明:

如果请求是从VPC内发起并经过VPC终端节点时,则会使用g:VpcSourceIp来取代g:SourceIp。如果不是通过VPC终端节点发起访问时,此条件键存在,但仅当通过公网发起访问时,该条件键可以作为有效的访问控制条件。云服务使用委托代表用户身份不经过公网发起访问时,此条件键不生效。

g:SourceVpc

字符串

指请求来源的VPC ID。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。

g:SourceVpce

字符串

指发起请求使用的VPC终端节点ID。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。示例参见20

g:TagKeys

字符串数组

指请求中携带的所有标签的key组成的列表。仅在支持g:TagKeys的授权项(Action)中,当前请求的API传入标签时,此条件键存在。

g:TokenIssueTime

时间

指访问凭据中的STS Security Token的签发时间。仅在STS Security Token发出请求时,此条件键存在。

g:UserAgent

字符串

指请求携带的HTTP User-Agent header,注意该属性是由客户端指定的,故不推荐使用它作为访问控制的安全依赖。

g:PrincipalId

字符串

指请求者的身份主体ID,不同身份类型的ID格式如下:

IAM用户:<user-id>

IAM委托会话:<agency-id>:<session-name>

虚拟联邦用户:<idp-id>:<session-name>

g:UserName

字符串

IAM用户名。仅当请求者为IAM用户时,此条件键存在。

g:UserId

字符串

IAM用户ID。仅当请求者为IAM用户时,此条件键存在。

g:ViaService

布尔值

指该请求是否是由云服务代表身份主体转发访问发起的,当且仅当g:CalledVia属性非空时,该属性值为true。仅在STS Security Token发出请求时,此条件键存在。

g:VpcSourceIp

IP

指从VPC内发起的请求的源IP地址。仅当请求从VPC内部通过VPC终端节点访问云服务类型的VPC终端节点服务时,此条件键存在。

  1. g:CalledVia

    用户身份主体请求服务A,服务A以用户身份主体请求服务B,服务B以用户身份主体请求服务C。在服务A收到的请求中,因为是用户身份主体直接请求,不会包含g:CalledVia属性;在服务B收到的请求中,因为是服务A代表用户身份主体发起,所以g:CalledVia会包含服务A的服务主体;在服务C收到的请求中g:CalledVia属性会包含服务A和服务B的服务主体,并且顺序与转发访问的请求链顺序一致,此时g:CalledViaFirst为服务A的服务主体,g:CalledViaLast则为服务B的服务主体,通过g:CalledViaFirst和g:CalledViaLast两个条件键可指定由哪个服务在转发访问链中第一个及最后一个调用。

    图2 g:CalledVia使用场景
    说明:

    用户通过管理控制台对云服务发起请求时,其CalledVia中将包含service.console。

    示例:表示不允许通过管理控制台发起的请求调用RAM服务的查询资源共享接口。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"ram:resourceShares:search"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"ForAnyValue:StringEquals": {
    				"g:CalledVia": "service.console"
    			}
    		}
    	}]
    }
  2. g:CurrentTime

    示例:表示用户通过该属性控制云服务API在2023年3月1日到2023年3月30日的时间段内禁止被访问。

    { 
         "Version": "5.0", 
         "Statement": [ 
             { 
                 "Effect": "Deny", 
                 "Action": ["ram:resourceShares:search"], 
                 "Resource": ["*"], 
                 "Condition": { 
                     "DateGreaterThan": {"g:CurrentTime": "2023-03-01T00:00:00Z"}, 
                     "DateLessThan": {"g:CurrentTime": "2023-03-30T23:59:59Z"} 
                 } 
             } 
         ] 
     }
  3. g:EnterpriseProjectId

    示例:此条件键为鉴权场景下使用的条件键,如下策略表示限制用户通过企业项目过滤查询虚拟私有云的访问执行操作:不允许用户请求GET /v1/{project_id}/vpcs时指定enterprise_project_id为xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,即请求为/v1/{project_id}/vpcs?enterprise_project_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx时不可访问。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"vpc:vpcs:list"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:EnterpriseProjectId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    			}
    		}
    	}]
    }
    说明:

    需要注意的是,g:EnterpriseProjectId并非过滤条件,即不会过滤出符合该条件键所指定的企业项目下的资源。仍以请求GET /v1/{project_id}/vpcs为例,当enterprise_project_id为all_granted_eps时,其接口行为是查询当前用户所有企业项目绑定的虚拟私有云。此时如用户已配置如上策略,接口将不会列出用户在策略中编写的g:EnterpriseProjectId所对应的企业项目下的虚拟私有云列表。

  4. g:MFAPresent

    g:MFAPresent仅在STS Security Token版本发出请求时存在,如使用永久凭据发起请求等场景则此条件键不存在。

    示例:表示用户可以通过该属性控制云服务API仅能被经过多因素认证的身份调用。需注意搭配IfExists后缀以包括永久凭据发起请求此类g:MFAPresent条件键不存在的场景。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"*"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"BoolIfExists": {
    				"g:MFAPresent": "false"
    			}
    		}
    	}]
    }
  5. g:PrincipalUrn

    示例:将以下SCP绑定至账号,不允许用户yyy创建资源共享实例。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"ram:resourceShares:create"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:PrincipalUrn": "iam::xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:user:yyy"
    			}
    		}
    	}]
    }
  6. g:PrincipalOrgId

    示例:表示用户通过该属性限制在组织o-xxxxxxxxxxx中的账号不允许访问RAM服务的查询资源共享接口。

    { 
         "Version": "5.0", 
         "Statement": [ 
             { 
                 "Effect": "Deny", 
                 "Action": ["ram:resourceShares:search"], 
                 "Resource": ["*"], 
                 "Condition": { 
                     "StringEquals": {  
                     "g:PrincipalOrgID": "o-xxxxxxxxxxx" 
    
                     } 
                 } 
             } 
         ] 
     }
  7. g:PrincipalOrgManagementAccountId

    示例:表示条件键Condition在请求者所在组织的管理账号ID为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx时视为匹配。

    {
    	"Condition": {
    		"StringEquals": {
    			"g:PrincipalOrgManagementAccountId": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    		}
    	}
    }
  8. g:PrincipalOrgPath

    示例:表示条件键Condition在请求者账号属于组织单元ou-qqq时视为匹配。

    {
    	"Condition": {
    		"StringMatch": {
    			"g:PrincipalOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/*"
    		}
    	}
    }

    示例:表示条件键Condition在请求者账号属于组织单元ou-qqq下任意子OU时视为匹配。

    {
    	"Condition": {
    		"StringMatch": {
    			"g:PrincipalOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/ou-*"
    		}
    	}
    }
  9. g:PrincipalServiceName

    示例:表示条件键Condition在请求者是RAM服务时视为匹配。

    {
        "Condition": {
            "StringEquals": {
                "g:PrincipalServiceName": "service.RAM"
            }
        }
    }
  10. g:PrincipalTag/<tag-key>

    示例:表示当IAM用户上携带了{"department": "hr"}标签时,不允许访问IAM相关API。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"iam:*"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:PrincipalTag/department": "hr"
    			}
    		}
    	}]
    }
  11. g:RequestTag/<tag-key>

    示例:表示策略不允许用户创建带有{"team": "engineering"}标签的资源共享实例。

    {
        "Version": "5.0",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": ["ram:resourceShares:create"],
                "Resource": ["*"],
                "Condition": {
                    "StringEquals": {
                        "g:RequestTag/team": "engineering"
                    }
                }
            }
        ]
    }
  12. g:ResourceAccount

    示例:表示拒绝用户使用指定用户以外的KMS密钥解密数据。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:ResourceAccount": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    			}
    		}
    	}]
    }
  13. g:ResourceOrgId

    示例:表示拒绝用户使用指定组织以外的KMS密钥解密数据。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:ResourceOrgId": "o-xxxxxxxx"
    			}
    		}
    	}]
    }
  14. g:ResourceOrgPath

    示例:表示不允许用户用组织单元ou-qqq内账号的KMS密钥解密数据。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringMatch": {
    				"g:ResourceOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/*"
    			}
    		}
    	}]
    }

    示例:表示不允许用户用组织单元ou-qqq下子OU内账号的KMS密钥解密数据。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringMatch": {
    				"g:ResourceOrgPath": "o-xxx/r-yyy/ou-zzz/ou-qqq/ou-*"
    			}
    		}
    	}]
    }
  15. g:ResourceTag/<tag-key>

    示例:表示策略禁止用户修改带有{"team": "engineering"}标签的资源共享实例。

    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "ram:resourceShares:delete",
            "ram:resourceShares:update"
          ],
          "Resource": [
            "*"
          ],
          "Condition": {
            "StringEquals": {
              "g:ResourceTag/team": "engineering"
            }
          }
        }
      ]
    }
  16. g:SourceAccount

    示例:Service A是一个用于记录活动的服务,能帮助用户(Account B)把其设备(Account C)触发的活动日志转储到用户指定的OBS桶里。为了能让Service A正常向桶中写入数据,Account B的管理员会为Service A创建一个委托/信任委托X来操作自己账号下的OBS桶。当用户(Account B)或某个设备(Account C)接入了Service A并触发请求后,Service A切换获取指定委托/信任委托X的临时身份凭据,然后向桶中写入数据。

    图3 混淆代理

    由于委托/信任委托X的名字并非保密内容,如果攻击者(Account D)获取到了委托名并以同样的方式触发Service A,则其活动记录会被错误地记录在用户的OBS桶里。请注意,攻击者利用Service A的委托,间接地修改了用户的OBS桶,Service A的行为即被称为混淆代理。

    g:SourceAccount用于控制云服务为了哪个账号访问此次资源。以下策略仅允许Service A为xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx或yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy切换至对应委托的会话。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Principal": {
    			"Service": [
    				"Service.A"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:sourceAccount": [
    					"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    					"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
    				]
    			}
    		}
    	}]
    }
  17. g:SourceUrn

    与g:SourceAccount相同,该条件键也用于解决混淆代理问题。假设用户设备(xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)的资源定义分为手表(watch)和手环(bracelet)两种,每种都有若干个。g:SourceUrn用于控制云服务为了哪个资源访问此次资源。以下策略表示仅允许Service A为符合条件的手表或手环切换至对应委托的会话。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Principal": {
    			"Service": [
    				"Service.A"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:sourceUrn": [
    					"alarm:*:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:watch:*",
    					"alarm:*:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:bracelet:*"
    				]
    			}
    		}
    	}]
    }
  18. g:SourceIdentity

    示例:表示不允许source_identity为yyyyy的身份切换该委托。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Principal": {
    			"IAM": [
    				"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    			]
    		},
    		"Action": [
    			"sts:agencies:assume"
    		],
    		"Condition": {
    			"StringEquals": {
    				"g:SourceIdentity": "yyyyy"
    			}
    		}
    	}]
    }
  19. g:SourceIp

    示例:将以下策略绑定至账号,当该账号源IP地址在xxx.xx.xx.0/24范围内时,不允许通过编程或控制台访问KMS。

    须知:

    源IP地址需要为公网IP,请勿在该条件键中包含内网地址。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"IpAddress": {
    				"g:SourceIp": "xxx.xx.xx.0/24"
    			}
    		}
    	}]
    }

    需注意:初始请求上下文中的g:SourceIp、g:SourceVpce、g:SourceVpc、g:VpcSourceIp不会在服务代表身份主体转发访问的后续请求中继续传递,因此使用这些条件键控制访问权限时,可能导致云服务需代表身份主体转发访问的请求被拒绝。实际场景中,建议使用g:CalledVia以允许转发访问请求。

    例外:身份主体由控制台发起的公网访问可视为身份主体直接由公网进行编程访问,因此由控制台代表身份主体转发访问的此次请求中将包含有初始的g:SourceIp。

    示例:将以下策略绑定至账号,拒绝该账号源IP地址在xxx.xx.xx.0/24范围外时,通过编程或控制台访问KMS;同时该策略允许云服务代表身份主体转发访问请求,即不会禁用其他云服务访问KMS。

    {
    	"Version": "5.0",
    	"Statement": [{
    			"Effect": "Deny",
    			"Action": [
    				"kms:cmk:decryptData"
    			],
    			"Resource": [
    				"*"
    			],
    			"Condition": {
    				"NotIpAddress": {
    					"g:SourceIp": "xxx.xx.xx.0/24"
    				},
    				"Bool": {
    					"g:ViaService": "false"
    				}
    			}
    		},
    		{
    			"Effect": "Deny",
    			"Action": [
    				"kms:cmk:decryptData"
    			],
    			"Resource": [
    				"*"
    			],
    			"Condition": {
    				"NotIpAddress": {
    					"g:SourceIp": "xxx.xx.xx.0/24"
    				},
    				"StringEqualsIfExists": {
    					"g:CalledViaFirst": "service.console",
    					"g:CalledViaLast": "service.console"
    				}
    			}
    		}
    	]
    }
  20. g:SourceVpce

    示例:将以下策略绑定至账号,拒绝该账号通过VPC终端节点 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 外的方式访问KMS;同时该策略允许云服务代表身份主体转发访问请求。

    {
    	"Version": "5.0",
    	"Statement": [{
    		"Effect": "Deny",
    		"Action": [
    			"kms:cmk:decryptData"
    		],
    		"Resource": [
    			"*"
    		],
    		"Condition": {
    			"StringNotEquals": {
    				"g:SourceVpce": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    			},
    			"Bool": {
    				"g:ViaService": "false"
    			}
    		}
    	}]
    }
  • 多值条件键
    1. (请求中的所有值)ForAllValues:测试请求集的每个成员的值是否为条件键集的子集。如果请求中的每个键值均与策略中的至少一个值匹配,则条件返回true。
    2. (请求中的任何值)ForAnyValue:测试请求值集的至少一个成员是否与条件键值集的至少一个成员匹配。如果请求中的任何一个键值与策略中的任何一个条件值匹配,则条件返回true。对于没有匹配的键或空数据集,条件返回false。
      条件键运算逻辑
      图4 条件键运算逻辑示意图
      1. 对于同一条件键的多个条件值,采用OR运算逻辑,即请求值按照条件运算符匹配到任意一个条件值则返回true。
        须知:

        当运算符表示否定含义的时候(例如:StringNotEquals),则请求值按照条件运算符不能匹配到所有的条件值。

      2. 同一运算符下的不同条件键之间,采用AND运算逻辑。不同运算符之间,采用AND运算逻辑。

运算符

运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,策略才能生效。运算符可以增加后缀“IfExists”,表示对应请求值为空或满足条件的请求值均使策略生效,如“StringEqualsIfExists”表示请求值为空或请求值等于条件值均使策略生效。运算符为字符串型运算符,表格中如未增加说明,不区分大小写。

  • String类型
    表3 String类型运算符

    类型

    运算符

    说明

    String

    StringEquals

    请求值与任意一个条件值相同(区分大小写)。

    StringNotEquals

    请求值与所有条件值都不同(区分大小写)。

    StringEqualsIgnoreCase

    请求值与任意一个条件值相同。

    StringNotEqualsIgnoreCase

    请求值与所有条件值都不同。

    StringMatch

    请求值符合任意一个条件值的正则表达式(区分大小写,正则表达式仅支持*和?)。

    StringNotMatch

    请求值不符合所有条件值的正则表达式(区分大小写,正则表达式仅支持*和?)。

    示例:禁止用户名为ZhangSan的请求者删除和修改资源共享实例。

    {
        "Version": "5.0",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "ram:resourceShares:delete",
                    "ram:resourceShares:update"
                ],
                "Condition": {
                    "StringEquals": {
                        "g:DomainName": [
                            "ZhangSan"
                        ]
                    }
                }
            }
        ]
    }
  • Number类型
    表4 Number类型运算符

    类型

    运算符

    说明

    Number

    NumberEquals

    请求值等于任意一个条件值。

    NumberNotEquals

    请求值不等于所有条件值。

    NumberLessThan

    请求值小于任意一个条件值。

    NumberLessThanEquals

    请求值小于或等于任意一个条件值。

    NumberGreaterThan

    请求值大于任意一个条件值。

    NumberGreaterThanEquals

    请求值大于或等于任意一个条件值。

  • Date类型
    表5 Date类型运算符

    类型

    运算符

    说明

    Date

    DateLessThan

    请求值早于任意一个条件值。

    DateLessThanEquals

    请求值早于或等于任意一个条件值。

    DateGreaterThan

    请求值晚于任意一个条件值。

    DateGreaterThanEquals

    请求值晚于或等于任意一个条件值。

    示例:请求者禁止在2022年8月1日前访问RAM服务。

    {
        "Version": "5.0",
        "Statement": [
            {
                "Effect": "Deny",
                "Action": [
                    "ram:*:*"
                ],
                "Condition": {
                    "DateLessThan": {
                        "g:CurrentTime": [
                            "2022-08-01T00:00:00Z"
                        ]
                    }
                }
            }
        ]
    }
  • Bool类型
    表6 Bool类型运算符

    类型

    运算符

    说明

    Bool

    Bool

    条件值可选值:true、false。请求值等于条件值。

  • Null类型
    表7 Null类型运算符

    类型

    运算符

    说明

    Null

    Null

    条件值可选值:true、false。条件值为true,要求请求值不存在或者值为null;条件值为false,要求请求值必须存在且值不为null。

  • IP类型
    表8 IP类型运算符

    类型

    运算符

    说明

    IP

    IpAddress

    指定IP地址或者IP范围。

    NotIpAddress

    指定IP地址或者IP范围之外的所有IP地址。

    示例:拒绝IP地址在10.27.128.0到10.27.128.255范围内的请求修改指定的永久访问密钥。

    {
      "Version": "5.0",
      "Statement": [
        {
          "Effect": "Deny",
          "Action": [
            "iam:credentials:updateCredentialV5"
          ],
          "Condition": {
            "IpAddress": {
              "g:SourceIp": [
                "10.27.128.0/24"
              ]
            }
          }
        }
      ]
    }
  • “IfExists”运算符后缀

    除Null运算符以外,您可以在任何条件运算符名称的末尾添加IfExists,例如:StringEqualsIfExists。如果请求的内容中存在条件键,则依照策略所述来进行匹配。如果该键不存在,则该条件元素的匹配结果将为true。

提示

您即将访问非华为云网站,请注意账号财产安全

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容