RAM中使用权限策略描述授权的具体内容,权限策略由效果(Effect)、操作(Action)、资源(Resource)、条件(Condition)和授权主体(Principal)等基本元素组成。
元素名称 | 描述 |
效果(Effect) | 授权效果包括两种:允许(Allow)和拒绝(Deny)。 |
操作(Action) | 操作是指对具体资源的操作。 |
资源(Resource) | 资源是指被授权的具体对象。 |
条件(Condition) | 条件是指授权生效的条件。 |
授权主体(Principal) | 授权主体是指允许或拒绝访问资源的主体,仅适用于基于资源的策略。例如:RAM角色的信任策略。 |
效果(Effect)
Effect元素用于指定授权的效果是允许或拒绝,是必选元素。Effect元素的取值:Allow和Deny。
当权限策略中既有Allow又有Deny时,遵循Deny优先原则。
示例如下:
"Effect": "Allow"
操作(Action)
Action元素用于描述允许或拒绝的特定操作,是必选元素。Action元素的取值:云服务所定义的API操作名称。
Action元素的格式为<ram-code>:<action-name>
。
ram-code
:云服务的RAM代码。更多信息,请参见支持RAM的云服务的RAM代码列。action-name
:相关的API操作接口名称。
Action元素的值在大部分情况下不区分大小写,但为了保持业务行为的一致性,请按照云服务提供的鉴权文档使用准确的操作前缀<ram-code>
和操作名称<action-name>
。
示例如下:
"Action": [
"oss:ListBuckets",
"ecs:Describe*",
"rds:Describe*"
]
资源(Resource)
Resource元素用于描述被授权的一个或多个对象,适用于基于身份的策略,是必选元素。Resource元素的取值:云服务所定义的资源ARN(Aliyun Resource Name)。
Resource元素的格式为acs:<ram-code>:<region>:<account-id>:<relative-id>
,请按照云服务提供的鉴权文档使用准确的资源ARN。格式说明如下:
acs
:Alibaba Cloud Service的首字母缩写,表示阿里云的公共云平台。ram-code
:云服务RAM代码。更多信息,请参见支持RAM的云服务的RAM代码列。region
:地域信息。对于全局资源(无需指定地域就可以访问的资源),该字段用星号(*)表示。更多信息,请参见地域和可用区。account-id
:阿里云账号ID。例如:123456789012****
。relative-id
:与服务相关的资源描述部分,其语义由具体云服务指定。这部分的格式支持树状结构(类似文件路径)。以OSS为例,表示一个OSS对象的格式为:relative-id = “mybucket/dir1/object1.jpg”
。
示例如下:
"Resource": [
"acs:ecs:*:*:instance/inst-001",
"acs:ecs:*:*:instance/inst-002",
"acs:oss:*:*:mybucket",
"acs:oss:*:*:mybucket/*"
]
条件(Condition)
Condition元素用于指定授权生效的限制条件,是可选元素。Condition元素也称为条件块(Condition Block),它是由一个或多个条件子句构成。一个条件子句由条件操作类型、条件关键字和条件值组成。
因为Condition元素为可选元素,所以系统不会强制校验Condition元素的存在性。如要使用Condition元素指定授权生效的限制条件,请使用正确的拼写并注意区分大小写。
条件关键字的名称(key)严格区分大小写,条件值(value)是否区分大小写取决于您使用的条件运算符。例如:针对字符串类型的条件关键字,如果使用StringEquals运算符,则会将策略内容中的值和请求中的值进行匹配,区分大小写。如果使用StringEqualsIgnoreCase运算符,则会将策略内容中的值和请求中的值进行匹配,忽略大小写。
Condition元素的具体说明如下:
逻辑说明
条件满足:一个条件关键字可以指定一个或多个值,在条件检查时,如果条件关键字的值与指定值中的某一个相同(OR),即可判定条件满足。
条件子句满足:同一条件操作类型的条件子句下,若有多个条件关键字,所有条件关键字必须同时满足(AND),才能判定该条件子句满足。
条件块满足:条件块下的所有条件子句同时满足(AND)的情况下,才能判定该条件块满足。
条件操作类型
条件操作类型包括:字符串类型(String)、数字类型(Number)、日期类型(Date and time)、布尔类型(Boolean)和IP地址类型(IP address)。
条件操作类型
支持类型
字符串类型(String)
StringEquals
StringNotEquals
StringEqualsIgnoreCase
StringNotEqualsIgnoreCase
StringLike
StringNotLike
数字类型(Number)
NumericEquals
NumericNotEquals
NumericLessThan
NumericLessThanEquals
NumericGreaterThan
NumericGreaterThanEquals
日期类型(Date and time)
DateEquals
DateNotEquals
DateLessThan
DateLessThanEquals
DateGreaterThan
DateGreaterThanEquals
布尔类型(Boolean)
Bool
IP地址类型(IP address)
IpAddress
NotIpAddress
条件关键字
阿里云通用条件关键字命名格式:
acs:<condition-key>
。通用条件关键字
类型
描述
acs:CurrentTime
Date and time
Web Server接收到请求的时间。
说明使用UTC时间并按照ISO 8601标准。
例如:北京时间2023年01月10日20点00分00秒,表示为
2023-01-10T20:00:00+08:00
或2023-01-10T12:00:00Z
。acs:SecureTransport
Boolean
发送请求是否使用了安全信道。例如:HTTPS。
acs:SourceIp
IP address
发送请求时的客户端IP地址。
说明acs:SourceIp
的取值支持具体IP地址和CIDR形式的IP地址段。 禁止将具体IP地址写成CIDR形式,例如:10.0.0.1不能写成10.0.0.1/32。acs:MFAPresent
Boolean
用户登录时是否使用了多因素认证(MFA)。
说明如果RAM用户安全设置中的登录时必须使用MFA为仅异常登录时使用,那么
acs:MFAPresent
条件就会失效。更多信息,请参见管理RAM用户安全设置。acs:PrincipalARN
String
请求主体的身份。仅限在资源目录管控策略和RAM角色信任策略中使用。例如:
acs:ram:*:*:role/*resourcedirectory*
。说明目前,只支持指定RAM角色的ARN,且必须为小写英文字母。(您可以在RAM控制台的角色详情页面查看RAM角色的ARN)。
acs:PrincipalRDId
String
请求主体所属云账号所在的资源目录ID。仅限在RAM角色信任策略和OSS Bucket Policy中使用。
acs:PrincipalRDPath
String
请求主体所属云账号所在的资源目录中的路径。仅限在RAM角色信任策略和OSS Bucket Policy中使用。
acs:RequestTag/<tag-key>
String
请求中传递的标签信息。<tag-key>为标签键,请在使用时替换为实际值。支持的云服务及资源类型,请参见支持标签的云服务中的资源类型鉴权信息。
acs:ResourceTag/<tag-key>
String
请求访问的资源上绑定的标签信息。<tag-key>为标签键,请在使用时替换为实际值。支持的云服务及资源类型,请参见支持标签的云服务中的资源类型鉴权信息。
阿里云服务级别条件关键字命名格式:
<ram-code>:<condition-key>
。例如:OSS的条件关键字
oss:Delimiter
,用于ListObjects请求时,对Object名字进行分组的字符。各云服务的条件关键字,请参见各云服务的授权信息文档。
条件示例
一条授权语句中的条件是同时满足(AND)的关系,如果您想设置的条件是或(OR)的关系,您需要将条件分别写在两条授权语句中。
示例1:限制只有开启了MFA且从IP地址203.0.113.2发起访问的RAM用户才能访问ECS实例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ecs:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "203.0.113.2" ] }, "Bool": { "acs:MFAPresent": [ "true" ] } } } ] }
示例2:限制只有开启了MFA的RAM用户或从IP地址203.0.113.2发起访问的RAM用户才能访问ECS实例。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "ecs:*", "Resource": "*", "Condition": { "IpAddress": { "acs:SourceIp": [ "203.0.113.2" ] } } }, { "Effect": "Allow", "Action": "ecs:*", "Resource": "*", "Condition": { "Bool": { "acs:MFAPresent": [ "true" ] } } } ] }
授权主体(Principal)
Principal元素用于指定允许或拒绝访问资源的主体,仅适用于基于资源的策略。例如:在RAM角色的信任策略中,使用Principal元素指定允许扮演该角色的对象。在基于资源的策略中,Principal元素是必选元素。
基于身份的策略中无法使用Principal元素。基于身份的策略是授予给RAM身份(RAM用户、用户组或RAM角色)的权限策略,被授予的RAM身份即为授权主体。
Principal元素中可以添加多种主体类型,也可以对每个主体类型指定多个主体。多种主体类型间使用半角逗号(,)分隔,同一主体类型包含多个值时,使用方括号([ ])并用半角逗号(,)分隔。多个主体间是或的关系,即策略中的所有主体都是被授权的对象。
授权主体示例:
"Principal": {
"RAM": [
"acs:ram::123456789012****:root",
"acs:ram::987654321098****:root"
],
"Service": "ecs.aliyuncs.com"
}
授权主体是经过身份验证的RAM实体,包含以下几种类型:
阿里云账号
您可以在Principal元素中设置授权主体为阿里云账号,这意味着为该阿里云账号下的RAM用户和RAM角色授权。在指定阿里云账号时,您需要使用阿里云账号ARN(
acs:ram::<account-id>:root
)。示例如下:"Principal": { "RAM": "acs:ram::123456789012****:root" }
说明Principal元素中使用的阿里云账号ARN不包含该账号的主账号身份。
RAM用户
您可以在Principal元素中设置授权主体为RAM用户,您需要指定RAM用户的ARN(
acs:ram::<account-id>:user/<user-name>
),<user-name>
需要与RAM用户的名称保持一致。示例如下:"Principal": { "RAM": [ "acs:ram::123456789012****:user/<user1-name>", "acs:ram::123456789012****:user/<user2-name>" ] }
当在Principal元素中指定RAM用户时,不能使用通配符星号(*)进行部分匹配,需要明确指明该RAM用户。
重要在RAM角色信任策略中,如果Principal元素中包含指定RAM用户的ARN,则在保存信任策略时系统会将此ARN转换为ID(例如:29695932303672****)。您通常不会感知这个ID,只有当该RAM用户被删除时,才会在信任策略中展示该ID。此时,您可以删除该ID或者修改为正确的RAM用户ARN。该方案将有助于降低安全风险,同时,您在创建或更新信任策略时,无需关注
<user-name>
大小写,系统会自动帮您转化为标准的ARN。RAM角色
您可以在Principal元素中设置授权主体为RAM角色,您需要指定RAM角色的ARN(
acs:ram::<account-id>:role/<role-name>
)。<role-name>
需要与RAM角色的名称保持一致。示例如下:"Principal": { "RAM": [ "acs:ram::123456789012****:role/<role-name>" ] }
当在Principal元素中指定RAM角色时,不能使用通配符星号(*)进行部分匹配,需要明确指明该RAM角色。
重要在RAM角色信任策略中,如果Principal元素中包含指定RAM角色的ARN,则在保存信任策略时系统会将此ARN转换为ID(例如:38915594982675****)。您通常不会感知这个ID,只有当该RAM角色被删除时,才会在信任策略中展示该ID。此时,您可以删除该ID或者修改为正确的RAM角色ARN。该方案将有助于降低安全风险,同时,您在创建或更新信任策略时,无需关注
<role-name>
大小写,系统会自动帮您转化为标准的ARN。阿里云服务
您可以在Principal元素中设置授权主体为阿里云服务,您需要指定阿里云服务对应的服务名称。服务名称是云服务的标识,通常采用的格式为(
<service-name>.aliyuncs.com
)。<service-name>
的取值请参见云服务提供的完整服务名称。示例如下:"Principal": { "Service": [ "ecs.aliyuncs.com" ] }
身份提供商
您可以在Principal元素中设置授权主体为身份提供商,您需要指定身份提供商的ARN。阿里云支持基于SAML 2.0和OIDC的SSO(Single Sign On,单点登录)。使用SAML协议的SSO需要创建SAML身份提供商,对应的ARN为
acs:ram::<account-id>:saml-provider/<provider-name>
。使用OIDC协议的SSO需要创建OIDC身份提供商,对应的ARN为acs:ram::<account-id>:oidc-provider/<provider-name>
。Principal元素中,ARN的值区分大小写, 请使用系统提供的身份提供商的标准ARN信息。"Principal": { "Federated": [ "acs:ram::123456789012****:saml-provider/<provider-name>" ] }