全部產品
Search
文件中心

Resource Access Management:權限原則基本元素

更新時間:Feb 22, 2024

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