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>" ] }