權(quán)限策略基本元素
RAM中使用權(quán)限策略描述授權(quán)的具體內(nèi)容,權(quán)限策略由效果(Effect)、操作(Action)、資源(Resource)、條件(Condition)和授權(quán)主體(Principal)等基本元素組成。
元素名稱 | 描述 |
效果(Effect) | 授權(quán)效果包括兩種:允許(Allow)和拒絕(Deny)。 |
操作(Action) | 操作是指對具體資源的操作。 |
資源(Resource) | 資源是指被授權(quán)的具體對象。 |
條件(Condition) | 條件是指授權(quán)生效的條件。 |
授權(quán)主體(Principal) | 授權(quán)主體是指允許或拒絕訪問資源的主體,僅適用于基于資源的策略。例如:RAM角色的信任策略。 |
效果(Effect)
Effect元素用于指定授權(quán)的效果是允許或拒絕,是必選元素。Effect元素的取值:Allow和Deny。
當(dāng)權(quán)限策略中既有Allow又有Deny時(shí),遵循Deny優(yōu)先原則。
示例如下:
"Effect": "Allow"
操作(Action)
Action元素用于描述允許或拒絕的特定操作,是必選元素。Action元素的取值:云服務(wù)所定義的API操作名稱。
Action元素的格式為<ram-code>:<action-name>
。
ram-code
:云服務(wù)的RAM代碼。更多信息,請參見支持RAM的云服務(wù)的RAM代碼列。action-name
:相關(guān)的API操作接口名稱。
Action元素的值在大部分情況下不區(qū)分大小寫,但為了保持業(yè)務(wù)行為的一致性,請按照云服務(wù)提供的鑒權(quán)文檔使用準(zhǔn)確的操作前綴<ram-code>
和操作名稱<action-name>
。
示例如下:
"Action": [
"oss:ListBuckets",
"ecs:Describe*",
"rds:Describe*"
]
資源(Resource)
Resource元素用于描述被授權(quán)的一個(gè)或多個(gè)對象,適用于基于身份的策略,是必選元素。Resource元素的取值:云服務(wù)所定義的資源ARN(Aliyun Resource Name)。
Resource元素的格式為acs:<ram-code>:<region>:<account-id>:<relative-id>
,請按照云服務(wù)提供的鑒權(quán)文檔使用準(zhǔn)確的資源ARN。格式說明如下:
acs
:Alibaba Cloud Service的首字母縮寫,表示阿里云的公共云平臺(tái)。ram-code
:云服務(wù)RAM代碼。更多信息,請參見支持RAM的云服務(wù)的RAM代碼列。region
:地域信息。對于全局資源(無需指定地域就可以訪問的資源),該字段用星號(hào)(*)表示。更多信息,請參見地域和可用區(qū)。account-id
:阿里云賬號(hào)ID。例如:123456789012****
。relative-id
:與服務(wù)相關(guān)的資源描述部分,其語義由具體云服務(wù)指定。這部分的格式支持樹狀結(jié)構(gòu)(類似文件路徑)。以O(shè)SS為例,表示一個(gè)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元素用于指定授權(quán)生效的限制條件,是可選元素。Condition元素也稱為條件塊(Condition Block),它是由一個(gè)或多個(gè)條件子句構(gòu)成。一個(gè)條件子句由條件操作類型、條件關(guān)鍵字和條件值組成。
因?yàn)镃ondition元素為可選元素,所以系統(tǒng)不會(huì)強(qiáng)制校驗(yàn)Condition元素的存在性。如要使用Condition元素指定授權(quán)生效的限制條件,請使用正確的拼寫并注意區(qū)分大小寫。
條件關(guān)鍵字的名稱(key)嚴(yán)格區(qū)分大小寫,條件值(value)是否區(qū)分大小寫取決于您使用的條件運(yùn)算符。例如:針對字符串類型的條件關(guān)鍵字,如果使用StringEquals運(yùn)算符,則會(huì)將策略內(nèi)容中的值和請求中的值進(jìn)行匹配,區(qū)分大小寫。如果使用StringEqualsIgnoreCase運(yùn)算符,則會(huì)將策略內(nèi)容中的值和請求中的值進(jìn)行匹配,忽略大小寫。
Condition元素的具體說明如下:
邏輯說明
條件滿足:一個(gè)條件關(guān)鍵字可以指定一個(gè)或多個(gè)值,在條件檢查時(shí),如果條件關(guān)鍵字的值與指定值中的某一個(gè)相同(OR),即可判定條件滿足。
條件子句滿足:同一條件操作類型的條件子句下,若有多個(gè)條件關(guān)鍵字,所有條件關(guān)鍵字必須同時(shí)滿足(AND),才能判定該條件子句滿足。
條件塊滿足:條件塊下的所有條件子句同時(shí)滿足(AND)的情況下,才能判定該條件塊滿足。
條件操作類型
條件操作類型包括:字符串類型(String)、數(shù)字類型(Number)、日期類型(Date and time)、布爾類型(Boolean)和IP地址類型(IP address)。
條件操作類型
支持類型
字符串類型(String)
StringEquals
StringNotEquals
StringEqualsIgnoreCase
StringNotEqualsIgnoreCase
StringLike
StringNotLike
數(shù)字類型(Number)
NumericEquals
NumericNotEquals
NumericLessThan
NumericLessThanEquals
NumericGreaterThan
NumericGreaterThanEquals
日期類型(Date and time)
DateEquals
DateNotEquals
DateLessThan
DateLessThanEquals
DateGreaterThan
DateGreaterThanEquals
布爾類型(Boolean)
Bool
IP地址類型(IP address)
IpAddress
NotIpAddress
條件關(guān)鍵字
阿里云通用條件關(guān)鍵字命名格式:
acs:<condition-key>
。通用條件關(guān)鍵字
類型
描述
acs:CurrentTime
Date and time
Web Server接收到請求的時(shí)間。
說明使用UTC時(shí)間并按照ISO 8601標(biāo)準(zhǔn)。
例如:北京時(shí)間2023年01月10日20點(diǎn)00分00秒,表示為
2023-01-10T20:00:00+08:00
或2023-01-10T12:00:00Z
。acs:SecureTransport
Boolean
發(fā)送請求是否使用了安全信道。例如:HTTPS。
acs:SourceIp
IP address
發(fā)送請求時(shí)的客戶端IP地址。
說明acs:SourceIp
的取值支持具體IP地址和CIDR形式的IP地址段。 禁止將具體IP地址寫成CIDR形式,例如:10.0.0.1不能寫成10.0.0.1/32。acs:MFAPresent
Boolean
用戶登錄時(shí)是否使用了多因素認(rèn)證(MFA)。
說明如果RAM用戶安全設(shè)置中的登錄時(shí)必須使用MFA為僅異常登錄時(shí)使用,那么
acs:MFAPresent
條件就會(huì)失效。更多信息,請參見管理RAM用戶安全設(shè)置。acs:PrincipalARN
String
請求主體的身份。僅限在資源目錄管控策略和RAM角色信任策略中使用。例如:
acs:ram:*:*:role/*resourcedirectory*
。說明目前,只支持指定RAM角色的ARN,且必須為小寫英文字母。(您可以在RAM控制臺(tái)的角色詳情頁面查看RAM角色的ARN)。
acs:PrincipalRDId
String
請求主體所屬云賬號(hào)所在的資源目錄ID。僅限在RAM角色信任策略和OSS Bucket Policy中使用。
acs:PrincipalRDPath
String
請求主體所屬云賬號(hào)所在的資源目錄中的路徑。僅限在RAM角色信任策略和OSS Bucket Policy中使用。
acs:RequestTag/<tag-key>
String
請求中傳遞的標(biāo)簽信息。<tag-key>為標(biāo)簽鍵,請?jiān)谑褂脮r(shí)替換為實(shí)際值。支持的云服務(wù)及資源類型,請參見支持標(biāo)簽的云服務(wù)中的資源類型鑒權(quán)信息。
acs:ResourceTag/<tag-key>
String
請求訪問的資源上綁定的標(biāo)簽信息。<tag-key>為標(biāo)簽鍵,請?jiān)谑褂脮r(shí)替換為實(shí)際值。支持的云服務(wù)及資源類型,請參見支持標(biāo)簽的云服務(wù)中的資源類型鑒權(quán)信息。
阿里云服務(wù)級別條件關(guān)鍵字命名格式:
<ram-code>:<condition-key>
。例如:OSS的條件關(guān)鍵字
oss:Delimiter
,用于ListObjects請求時(shí),對Object名字進(jìn)行分組的字符。各云服務(wù)的條件關(guān)鍵字,請參見各云服務(wù)的授權(quán)信息文檔。
條件示例
一條授權(quán)語句中的條件是同時(shí)滿足(AND)的關(guān)系,如果您想設(shè)置的條件是或(OR)的關(guān)系,您需要將條件分別寫在兩條授權(quán)語句中。
示例1:限制只有開啟了MFA且從IP地址203.0.113.2發(fā)起訪問的RAM用戶才能訪問ECS實(shí)例。
{ "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發(fā)起訪問的RAM用戶才能訪問ECS實(shí)例。
{ "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" ] } } } ] }
授權(quán)主體(Principal)
Principal元素用于指定允許或拒絕訪問資源的主體,僅適用于基于資源的策略。例如:在RAM角色的信任策略中,使用Principal元素指定允許扮演該角色的對象。在基于資源的策略中,Principal元素是必選元素。
基于身份的策略中無法使用Principal元素?;谏矸莸牟呗允鞘谟杞oRAM身份(RAM用戶、用戶組或RAM角色)的權(quán)限策略,被授予的RAM身份即為授權(quán)主體。
Principal元素中可以添加多種主體類型,也可以對每個(gè)主體類型指定多個(gè)主體。多種主體類型間使用半角逗號(hào)(,)分隔,同一主體類型包含多個(gè)值時(shí),使用方括號(hào)([ ])并用半角逗號(hào)(,)分隔。多個(gè)主體間是或的關(guān)系,即策略中的所有主體都是被授權(quán)的對象。
授權(quán)主體示例:
"Principal": {
"RAM": [
"acs:ram::123456789012****:root",
"acs:ram::987654321098****:root"
],
"Service": "ecs.aliyuncs.com"
}
授權(quán)主體是經(jīng)過身份驗(yàn)證的RAM實(shí)體,包含以下幾種類型:
阿里云賬號(hào)
您可以在Principal元素中設(shè)置授權(quán)主體為阿里云賬號(hào),這意味著為該阿里云賬號(hào)下的RAM用戶和RAM角色授權(quán)。在指定阿里云賬號(hào)時(shí),您需要使用阿里云賬號(hào)ARN(
acs:ram::<account-id>:root
)。示例如下:"Principal": { "RAM": "acs:ram::123456789012****:root" }
說明Principal元素中使用的阿里云賬號(hào)ARN不包含該賬號(hào)的主賬號(hào)身份。
RAM用戶
您可以在Principal元素中設(shè)置授權(quán)主體為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>" ] }
當(dāng)在Principal元素中指定RAM用戶時(shí),不能使用通配符星號(hào)(*)進(jìn)行部分匹配,需要明確指明該RAM用戶。
重要在RAM角色信任策略中,如果Principal元素中包含指定RAM用戶的ARN,則在保存信任策略時(shí)系統(tǒng)會(huì)將此ARN轉(zhuǎn)換為ID(例如:29695932303672****)。您通常不會(huì)感知這個(gè)ID,只有當(dāng)該RAM用戶被刪除時(shí),才會(huì)在信任策略中展示該ID。此時(shí),您可以刪除該ID或者修改為正確的RAM用戶ARN。該方案將有助于降低安全風(fēng)險(xiǎn),同時(shí),您在創(chuàng)建或更新信任策略時(shí),無需關(guān)注
<user-name>
大小寫,系統(tǒng)會(huì)自動(dòng)幫您轉(zhuǎn)化為標(biāo)準(zhǔn)的ARN。RAM角色
您可以在Principal元素中設(shè)置授權(quán)主體為RAM角色,您需要指定RAM角色的ARN(
acs:ram::<account-id>:role/<role-name>
)。<role-name>
需要與RAM角色的名稱保持一致。示例如下:"Principal": { "RAM": [ "acs:ram::123456789012****:role/<role-name>" ] }
當(dāng)在Principal元素中指定RAM角色時(shí),不能使用通配符星號(hào)(*)進(jìn)行部分匹配,需要明確指明該RAM角色。
重要在RAM角色信任策略中,如果Principal元素中包含指定RAM角色的ARN,則在保存信任策略時(shí)系統(tǒng)會(huì)將此ARN轉(zhuǎn)換為ID(例如:38915594982675****)。您通常不會(huì)感知這個(gè)ID,只有當(dāng)該RAM角色被刪除時(shí),才會(huì)在信任策略中展示該ID。此時(shí),您可以刪除該ID或者修改為正確的RAM角色ARN。該方案將有助于降低安全風(fēng)險(xiǎn),同時(shí),您在創(chuàng)建或更新信任策略時(shí),無需關(guān)注
<role-name>
大小寫,系統(tǒng)會(huì)自動(dòng)幫您轉(zhuǎn)化為標(biāo)準(zhǔn)的ARN。阿里云服務(wù)
您可以在Principal元素中設(shè)置授權(quán)主體為阿里云服務(wù),您需要指定阿里云服務(wù)對應(yīng)的服務(wù)名稱。服務(wù)名稱是云服務(wù)的標(biāo)識(shí),通常采用的格式為(
<service-name>.aliyuncs.com
)。<service-name>
的取值請參見云服務(wù)提供的完整服務(wù)名稱。示例如下:"Principal": { "Service": [ "ecs.aliyuncs.com" ] }
身份提供商
您可以在Principal元素中設(shè)置授權(quán)主體為身份提供商,您需要指定身份提供商的ARN。阿里云支持基于SAML 2.0和OIDC的SSO(Single Sign On,單點(diǎn)登錄)。使用SAML協(xié)議的SSO需要?jiǎng)?chuàng)建SAML身份提供商,對應(yīng)的ARN為
acs:ram::<account-id>:saml-provider/<provider-name>
。使用OIDC協(xié)議的SSO需要?jiǎng)?chuàng)建OIDC身份提供商,對應(yīng)的ARN為acs:ram::<account-id>:oidc-provider/<provider-name>
。Principal元素中,ARN的值區(qū)分大小寫, 請使用系統(tǒng)提供的身份提供商的標(biāo)準(zhǔn)ARN信息。"Principal": { "Federated": [ "acs:ram::123456789012****:saml-provider/<provider-name>" ] }