RAM中使用權限原則描述授權的具體內容,權限原則由效果(Effect)、操作(Action/NotAction)、資源(Resource)、條件(Condition)和授權主體(Principal)等基本元素組成。
元素名稱 | 描述 |
效果(Effect) | 授權效果。包括兩種:
|
操作(Action/NotAction) | 操作是指對具體資源的操作。在一條策略語句中Action/NotAction只能二選一:
|
資源(Resource) | 資源是指被授權的具體對象。 |
條件(Condition) | 條件是指授權生效的條件。 |
授權主體(Principal) | 授權主體是指允許或拒絕訪問資源的主體,僅適用於基於資源的策略。例如:RAM角色的信任策略。 |
效果(Effect)
Effect元素用於指定授權的效果是允許或拒絕,是必選元素。
Effect元素的取值:Allow和Deny。
當權限原則中既有Allow又有Deny時,遵循Deny優先原則。
樣本如下:
"Effect": "Allow"操作(Action/NotAction)
Action元素用於描述允許或拒絕的指定操作,NotAction元素用於描述允許或拒絕時例外的指定操作,即除了NotAction中指定的操作外,其餘操作都允許或拒絕。Action/NotAction只能二選一,是必選元素。
Action/NotAction元素的取值:雲端服務所定義的API操作名稱。
Action/NotAction元素的格式:<ram-code>:<action-name>。
ram-code:雲端服務的RAM代碼。更多資訊,請參見支援RAM的雲端服務的RAM代碼列。action-name:相關的API操作介面名稱。
Action/NotAction元素的值在大部分情況下不區分大小寫,但為了保持業務行為的一致性,請按照雲端服務提供的鑒權文檔使用準確的操作首碼<ram-code>和操作名稱<action-name>。
樣本如下:
Action樣本
"Action": [ "oss:ListBuckets", "ecs:Describe*", "rds:Describe*" ]NotAction樣本
以下樣本表示允許除RAM之外的所有操作。策略中僅列出了允許時的例外操作(ram:*),而不是允許的全部巨集指令清單,策略語句較短。但是,允許的範圍比較大,請務必謹慎使用,確保策略符合您的預期。
{ "Effect": "Allow", "NotAction": "ram:*", "Resource": "*" }
資源(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)。 條件運算子含義及樣本,請參見條件運算子。
條件關鍵字
阿里雲通用條件關鍵字命名格式:
acs:<condition-key>。通用條件關鍵字
類型
描述
acs:CurrentTimeDate 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:SecureTransportBoolean
發送請求是否使用了安全通道。例如:HTTPS。
acs:SourceIpIP address
發送請求時的用戶端IP地址。
說明acs:SourceIp的取值支援具體IP地址和CIDR形式的IP位址區段。 禁止將具體IP地址寫成CIDR形式,例如:10.0.0.1不能寫成10.0.0.1/32。acs:MFAPresentBoolean
使用者登入時是否使用了多因素認證(MFA)。
說明如果RAM使用者安全設定中的登入時必須使用MFA為僅異常登入時使用,那麼
acs:MFAPresent條件就會失效。更多資訊,請參見管理RAM使用者安全設定。acs:PrincipalARNString
請求主體的身份。僅限在資來源目錄管控策略和RAM角色信任策略中使用。例如:
acs:ram:*:*:role/*resourcedirectory*。說明目前,只支援指定RAM角色的ARN,且必須為小寫英文字母。(您可以在RAM控制台的角色詳情頁面查看RAM角色的ARN)。
acs:PrincipalRDIdString
請求主體所屬雲帳號所在的資來源目錄ID。僅限在RAM角色信任策略和OSS Bucket Policy中使用。
acs:PrincipalRDPathString
請求主體所屬雲帳號所在的資來源目錄中的路徑。僅限在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>" ] }