全部產品
Search
文件中心

Resource Orchestration Service:資源棧策略

更新時間:Jun 25, 2024

使用資源棧策略可以防止資源棧資源在資源棧更新過程中被意外更新或刪除。本文為您介紹資源棧策略的定義,以及如何設定和更新資源棧策略。

背景資訊

資源棧策略是一個JSON或YAML類型的文檔,該文檔定義可對指定資源執行的更新操作。建立資源棧時,允許對所有資源執行更新操作,具有資源棧更新許可權的使用者可以更新資源棧中的所有資源。更新時,一些資源可能需要中斷。設定資源棧策略後,ROS將保護資源棧中的所有資源。您可以在資源棧策略中為資源指定明確的Allow語句,允許對特定資源進行更新。

說明
  • 您只能為每個資源棧定義一個資源棧策略,但一個策略可以保護多個資源。

  • 在資源棧更新期間,ROS自動更新依賴其他更新的資源。例如:ROS自動更新引用更新的資源。但如果這些資源與資源棧策略關聯,您必須具有許可權才能進行更新。

資源棧策略僅在資源棧更新過程中適用。與RAM策略不同,它不提供存取控制,僅將資源棧策略用作故障保護功能來防止意外更新特定資源棧資源。

定義資源棧策略

建立資源棧時,如果未設定資源棧策略,則允許對所有資源執行更新操作。要阻止對資源棧資源執行更新操作,可定義一個資源棧策略,然後對資源棧設定該策略。在建立資源棧時,您可以指定一個包含資源棧策略的文字檔或輸入該策略來設定資源棧策略。在資源棧上設定資源棧策略時,預設情況下會拒絕未顯式允許的任何更新。

您可定義一個帶5個元素的資源棧策略:EffectActionPrincipalResourceCondition

Statement:
  - Effect: Deny_or_Allow
    Action: update_actions
    Principal: '*'
    Resource: LogicalResourceId/resource_logical_ID
    Condition:
      StringEquals_or_StringLike:
        ResourceType:
          - resource_type
          - ...
            

各元素說明如下:

  • Effect

    確定是拒絕還是允許對指定資源執行指定的操作。您只能指定DenyAllow,例如:

    Effect: Deny
    說明

    如果資源棧策略包含重疊語句(同時允許和拒絕對資源進行更新),則Deny語句始終將覆蓋Allow語句。要確保某一資源受到保護,請對該資源使用Deny語句。

  • Action

    拒絕或允許的更新操作:

    • Update:Modify

      在對資源應用更改期間不會中斷或有某些中斷的更新操作。

    • Update:Delete

      刪除資源的更新操作。從資源棧模板中完全刪除資源的更新都需要此操作。

    • Update:*

      所有更新操作。星號(*)是萬用字元,代表所有更新操作。

    說明

    Action還可以指定Update:Replace作為保留功能。目前暫不支援替換功能。

    以下樣本說明如何只指定更新和刪除操作:

    Action:
      - Update:Modify
      - Update:Delete

    要允許除某個更新操作之外的所有更新操作,請使用NotAction。例如:要允許除Update:Delete之外的所有更新操作,請使用NotAction

    Statement:
      - Effect: Allow
        NotAction: Update:Delete
        Principal: '*'
        Resource: '*'
  • Principal

    策略應用的實體。僅支援星號(*),表示策略應用於所有主體。

  • Resource

    應用策略的資源的邏輯ID。要指定資源類型,請使用Condition元素。

    要指定一個資源,請使用其邏輯ID。例如:

    Resource: - LogicalResourceId/myECS

    您可以對邏輯ID使用星號(*)。例如:如果您對所有相關資源使用一個通用邏輯ID首碼,則可使用星號(*)指定所有資源。

    Resource: - LogicalResourceId/Prefix*

    您還可以對資源使用Not元素。例如:要允許對所有資源執行除某個更新之外的所有更新,請使用NotResource元素保護該資源。

    Statement:
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        NotResource: LogicalResourceId/WebServers

    設定資源棧策略時,會拒絕未顯式允許的任何更新。通過允許更新WebServers資源之外的所有資源,會拒絕更新WebServers資源。

  • Condition

    應用策略的資源類型。要指定特定資源的邏輯ID,請使用Resource元素。

    您可以指定資源類型(例如:所有ECS和RDS資料庫執行個體)。

    Statement:
      - Effect: Deny
        Principal: '*'
        Action: Update:*
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::ECS::Instance
              - ALIYUN::RDS::DBInstance
      - Effect: Allow
        Principal: '*'
        Action: Update:*
        Resource: '*'

    Allow語句授予對所有資源的更新許可權,而Deny語句拒絕對ECS和RDS資料庫執行個體的更新。Deny語句始終覆蓋允許操作。

    您可以對資源類型使用星號(*)。例如:您可以使用星號(*)拒絕所有ECS資源(例如:執行個體、安全性群組和子網)的更新許可權。

    Condition:
      StringLike:
        ResourceType:
          - ALIYUN::ECS::*
    說明

    使用星號(*)時,必須使用StringLike條件。

設定資源棧策略

您可以使用控制台或ALIYUN CLI在建立資源棧時應用資源棧策略。您也可以使用ALIYUN CLI將資源棧策略應用於現有資源棧。應用資源棧策略後,無法將其從資源棧中刪除,但可以使用ALIUN CLI進行更新。

  • 在建立資源棧時設定資源棧策略(控制台)

    1. 登入Resource Orchestration Service控制台

    2. 在左側導覽列單擊資源棧

    3. 在頂部功能表列的地區下拉式清單,選擇資源棧的所在地區,例如:華東1(杭州)。

    4. 資源棧列表頁面,單擊建立資源棧,然後在下拉式清單中選擇使用ROS

    5. 建立資源棧嚮導的選擇模板頁面,根據所需選擇模板,然後單擊下一步

    6. 建立資源棧嚮導的配置參數頁面,根據控制台提示,配置資源棧名稱和配置模板參數。

    7. 配置資源棧區塊,選擇資源棧策略輸入資源棧策略

    8. 配置資源棧策略,然後單擊下一步

      • 輸入資源棧策略:直接輸入資源棧策略。

      • 上傳檔案:上傳包含資源棧策略的JSON或YAML格式的檔案。

    9. 合規預檢頁面,完成合規檢測,然後單擊下一步

      說明

      目前合規預檢功能僅支援為部分資源提供合規預檢功能。更多資訊,請參見Resource Orchestration Service支援合規預檢

      1. 檢測規則地區,添加檢測規則。

        您可以根據ROS模板中的雲資源選擇需要檢測的規則。

      2. 單擊開始檢測

        您可以根據不合規或不適用資源的修正方案修改模板內容,從而保證資源的合規性。

    10. 按照控制台提示繼續配置,完成資源棧建立。

  • 在建立資源棧時設定資源棧策略(CLI)

    您可以使用以下兩種方式設定資源棧策略:

    • 調用CreateStack介面設定

      使用aliyun ros CreateStack--StackPolicyBody設定可更新的策略,或使用aliyun ros CreateStack--StackPolicyURL指定包含策略的檔案。

    • 調用CreateChangeSet介面設定

      使用aliyun ros CreateChangeSet--StackPolicyBody設定可更新的策略,或使用aliyun ros CreateChangeSet--StackPolicyURL指定包含策略的檔案。

  • 在現有資源棧上設定資源棧策略(僅限CLI)

    使用aliyun ros SetStackPolicy--StackPolicyBody 設定可更新的策略,或使用aliyun ros SetStackPolicy--StackPolicyURL指定包含策略的檔案。

    說明

    要將策略添加到現有資源棧中,您必須具有SetStackPolicy操作許可權。

更新受保護資源

當您需要更新受保護資源時,可以建立一個覆蓋資源棧策略並允許對這些資源進行更新的臨時策略。覆蓋策略不會永久更改資源棧策略。

要更新保護的資源,您必須具有SetStackPolicy操作許可權。關於如何設定ROS許可權,請參見使用RAM控制資源訪問

  • 更新受保護的資源(控制台)

    1. 登入Resource Orchestration Service控制台

    2. 在左側導覽列單擊資源棧

    3. 在頂部功能表列的地區下拉式清單,選擇資源棧的所在地區,例如:華東1(杭州)。

    4. 資源棧列表頁面,單擊目標資源棧右側操作列的更新

    5. 配置資源棧區塊,根據控制台提示,選擇輸入資源棧策略

    6. 配置臨時資源棧策略。

      指定臨時的資源棧策略,僅本次更新生效。覆蓋策略必須為您要更新的受保護資源指定Allow語句。例如:要更新所有受保護資源,可以指定允許所有更新的臨時覆蓋策略。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          Resource: '*'
    7. 按照控制台提示繼續配置,完成資源棧更新。

  • 更新受保護資源(CLI)

    您可以通過以下兩種方式更新受保護資源:

    • 調用UpdateStack介面更新

      使用aliyun ros UpdateStack--StackPolicyDuringUpdateBody設定可更新的策略,或使用aliyun ros UpdateStack--StackPolicyDuringUpdateURL 指定包含策略的檔案。

    • 調用CreateChangeSet介面更新

      使用aliyun ros CreateChangeSet--StackPolicyDuringUpdateBody設定可更新的策略,或使用aliyun ros CreateChangeSet--StackPolicyDuringUpdateURL指定包含策略的檔案。

    說明

    ROS僅在此更新期間應用覆蓋策略。覆蓋策略不會永久更改資源棧策略。

更新資源棧策略

當您需要保護其他資源或從資源中刪除保護時,可以更新資源棧策略。例如:當您將要保護的資料庫添加到資源棧時,會將該資料庫的Deny語句添加到資源棧策略。如果需要更新策略,您必須具有SetStackPolicy的使用許可權。

  • 更新資源棧策略(控制台)

    1. 登入Resource Orchestration Service控制台

    2. 在左側導覽列單擊資源棧

    3. 在頂部功能表列的地區下拉式清單,選擇資源棧的所在地區,例如:華東1(杭州)。

    4. 資源棧列表頁面,單擊目標資源棧名稱列的資源棧ID。

    5. 資源棧資訊頁簽的資源棧策略地區,單擊編輯

    6. 修改資源棧策略對話方塊,輸入資源棧策略。

    7. 單擊確定

  • 更新資源棧策略(CLI)

    使用aliyun ros SetStackPolicy--StackPolicyBody設定更新的策略,或使用aliyun ros SetStackPolicy--StackPolicyURL指定包含策略的檔案。

    以下策略允許對所有資源進行全部更新:

    Statement:
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • 在更新資源棧時更新資源棧策略(CLI)

    使用aliyun ros UpdateStack--StackPolicyBody設定可更新的策略,或使用aliyun ros UpdateStack--StackPolicyURL指定包含策略的檔案。

    使用aliyun ros CreateChangeSet--StackPolicyBody設定可更新的策略,或使用aliyun ros CreateChangeSet--StackPolicyURL指定包含策略的檔案。

資源棧策略樣本

以下樣本策略說明如何阻止對所有資源棧資源和特定資源進行更新,並阻止特定類型的更新。

  • 阻止對所有資源棧資源的更新

    要阻止對所有資源棧資源的更新,以下策略為所有資源的所有更新操作指定Deny語句。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • 阻止對單個資源(WebServers)的更新

    • 樣本一:使用Deny語句阻止對WebServers資源的更新。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          Resource: '*'
        - Effect: Deny
          Action: Update:*
          Principal: '*'
          Resource: LogicalResourceId/WebServers

      各元素說明如下:

      • Allow:允許對所有資源執行的操作。

      • Deny:為具有WebServers邏輯ID的資源阻止執行的操作。

      • Principal:策略應用的實體。僅支援星號(*),表示策略應用於所有實體。

    • 樣本二:使用Allow語句允許對WebServers之外的所有資源進行更新。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          NotResource: LogicalResourceId/WebServers
      說明
      • 設定資源棧策略時,如果對某個資源沒有寫明是否支援更新,則預設不支援更新該資源。

      • 使用預設拒絕存在風險。如果您策略中的其他位置具有Allow語句 (例如:使用萬用字元的 Allow 語句),則可能意外授予對資源的更新許可權。由於顯示拒絕將覆蓋任何允許操作,因此可以使用Deny語句確保保護資源。

  • 阻止對資源類型的所有執行個體進行更新

    以下策略拒絕針對RDS資料庫執行個體資源類型的所有更新操作。使用Allow語句允許對所有其他資源棧資源進行全部更新操作。Allow語句不應用於RDS資料庫執行個體資源,因為Deny語句始終覆蓋允許操作。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::RDS::DBInstance
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • 阻止對嵌套資源棧進行更新

    以下策略拒絕針對ROS資源棧資源類型(嵌套資源棧)的所有更新操作。使用Allow語句允許對所有其他資源棧資源進行全部更新操作。Allow語句不會應用於ROS資源棧資源,因為Deny語句始終覆蓋Allow操作。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::ROS::Stack
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'