资源编排ROS之资源栈策略

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 背景 资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。 在创建资源栈时,允许对所有资源执行所有更新操

背景

资源编排服务(Resource Orchestration Service, 简称ROS)是阿里云提供的一项简化云计算资源管理的服务。您可以遵循ROS定义的模板规范编写资源栈模板,在模板中定义所需的云计算资源(例如ECS实例、RDS数据库实例)、资源间的依赖关系等。ROS的编排引擎将根据模板自动完成所有资源的创建和配置,实现自动化部署及运维。

在创建资源栈时,允许对所有资源执行所有更新操作。默认情况下,具有资源栈更新权限的任何人均可更新资源栈中的所有资源。在更新期间,一些资源可能需要中断。使用资源栈策略可以防止资源栈资源在资源栈更新过程中被意外更新或删除。资源栈策略是一个 JSON/YAML 文档,该文档定义可对指定资源执行的更新操作。

设置资源栈策略后,默认情况下将保护资源栈中的所有资源。要允许对特定资源进行更新,您可在资源栈策略中为这些资源指定明确的 Allow 语句。您只能为每个资源栈定义一个资源栈策略,但在一个策略中可以保护多个资源。资源栈策略适用于所有尝试更新资源栈的 ROS 用户。您不能将不同的资源栈策略与不同的用户关联。

资源栈策略仅在资源栈更新过程中适用。与 RAM 策略不同,它不提供访问控制。仅将资源栈策略用作故障保护功能来防止意外更新特定资源栈资源。

关于资源栈策略的更多功能,可以参考这里

功能介绍

简单示例

我们先看一个简单示例。下面的示例资源栈策略阻止更新 WebServers 资源:

{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    },
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/WebServers"
    }
  ]
}

当您设置资源栈策略时,将默认保护所有资源。为了允许对所有资源进行更新,我们添加了一个 Allow 语句来允许对所有资源执行的所有操作。虽然 Allow 语句指定所有资源,但显式 Deny 语句将为具有 WebServers 逻辑 ID 的资源覆盖前者。此 Deny 语句阻止对 WebServers 资源进行的所有更新操作。

如何定义资源栈策略

定义资源栈策略 在创建资源栈时,未设置资源栈策略,因此允许对所有资源执行所有更新操作。要阻止对资源栈资源执行更新操作,可定义一个资源栈策略,然后对资源栈设置该策略。资源栈策略是一个 JSON/YAML 文档,它定义 ROS 用户可以执行的 ROS 资源栈更新操作以及这些操作应用到的资源。在创建资源栈时,可通过指定一个包含资源栈策略的文本文件或键入该策略来设置资源栈策略。在资源栈上设置资源栈策略时,默认情况下会拒绝未显式允许的任何更新。

您可定义一个带 5 个元素的资源栈策略:EffectActionPrincipalResource 和 Condition。下面的伪代码显示了资源栈策略语法。

{
  "Statement" : [
    {
      "Effect" : "Deny_or_Allow",
      "Action" : "update_actions",
      "Principal" : "*",
      "Resource" : "LogicalResourceId/resource_logical_ID",
      "Condition" : {
        "StringEquals_or_StringLike" : {
          "ResourceType" : [resource_type, ...]
        }
      }
    }  
  ]
}
  • Effect

    确定是拒绝还是允许对指定资源执行指定的操作。您只能指定 Deny 或 Allow,例如:

    "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 语句始终覆盖允许操作。

    您可以对资源类型使用通配符。例如,您可以使用通配符拒绝所有 ALIYUN ECS 资源(如实例、安全组和子网)的更新权限,如以下示例所示:

    "Condition" : {
      "StringLike" : {
        "ResourceType" : ["ALIYUN::ECS::*"]
      }
    }

    使用通配符时,必须使用 StringLike 条件。

更多示例

以下示例策略说明如何阻止对所有资源栈资源和特定资源进行更新,并阻止特定类型的更新。

阻止对所有资源栈资源的更新

要阻止对所有资源栈资源的更新,以下策略为所有资源的所有更新操作指定 Deny 语句。

{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}

阻止对单个资源的更新

以下策略拒绝对带 WebServers 逻辑 ID 的虚拟机执行的所有更新操作。它使用 Allow 语句允许对所有其他资源栈资源进行全部更新操作。Allow 语句不应用于 WebServers 资源,因为 Deny 语句始终覆盖允许操作。

{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/WebServers"
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}

您可以使用默认拒绝来获得与上一示例相同的结果。设置资源栈策略时,ROS 会拒绝未显式允许的任何更新。以下策略允许对除 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" : "*"
    }
  ]
}

测试验证

1. 在ROS控制台使用如下模板创建一个资源栈。这个模板包含一个名为WaitConditionHandle的资源,用于示例。

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  UpdateVersion:
    Type: Number
Resources:
  WaitConditionHandle:
    Type: ALIYUN::ROS::WaitConditionHandle
    Properties:
      UpdateVersion:
        Ref: UpdateVersion
Outputs:
  CurlCli:
    Value:
      Fn::GetAtt:
        - WaitConditionHandle
        - CurlCli

 

资源栈配置如下:

资源栈策略配置如下:

资源栈策略内容如下:

{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/WaitConditionHandle"
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}

2. 尝试更新资源栈。

发现更新失败回滚。失败原因是资源栈策略不允许更新WaitConditionHandle资源。

3.使用临时资源栈策略更新资源栈。

该策略允许所有更新。

{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}

发现资源栈更新成功。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
5月前
|
弹性计算 关系型数据库 MySQL
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
WordPress 是流行的开源CMS,阿里云的ROS(Resource Orchestration Service)提供模板化部署服务,简化云上环境如VPC、ECS、MySQL的创建。用户可通过ROS控制台选择模板一键部署WordPress,配置包括实例区、类型、系统盘及密码等参数。ROS模板定义了资源、参数和输出,自动处理依赖关系,实现云资源和应用的自动化部署。通过ROS,用户可以高效管理和更新整个资源栈,实现快速、可靠的云服务部署。
使用资源编排 ROS 轻松部署单点网站——以 WordPress 为例
|
6月前
|
弹性计算 JSON API
一键云部署:资源编排 ROS 轻松部署文本转语音系统 ChatTTS
ChatTTS是一款针对对话场景的文本转语音模型,支持英中两种语言,训练数据超过10万小时。ChatTTS可通过WebUI和API访问。阿里云的资源编排服务(ROS)提供了一键部署ChatTTS到云端的方案,用户只需在ROS控制台配置模板参数,如区域和实例类型,即可完成部署。部署后,从资源栈输出获取ChatTTS服务地址。ROS利用IaC理念自动化部署云资源和应用,提高了部署效率和稳定性。
一键云部署:资源编排 ROS 轻松部署文本转语音系统 ChatTTS
|
6月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
Flowise 是一个开源低代码平台,用于构建定制化的 LLM 流程和 AI 代理。阿里云的 Resource Orchestration Service (ROS) 提供了一键部署 Flowise 到 ECS 实例的方案。用户只需在 ROS 控制台配置模板参数,如可用区和实例类型,即可完成部署。部署后,从资源栈输出获取 Flowise 服务地址以开始使用。ROS 模板定义了 VPC、ECS 实例等资源,并通过 ROS 自动化部署,简化了云上资源和应用的管理。
一键云部署:资源编排 ROS 轻松部署 LLM 流程编排服务 Flowise
|
6月前
|
JSON 弹性计算 运维
深入浅出资源编排ROS:构建云环境下的自动化运维利器引言
**资源编排ROS是阿里云提供的自动化管理工具,通过声明式模板定义云资源生命周期,简化复杂IT架构的运维。它解析JSON或YAML模板,自动创建、更新资源,确保状态与模板一致。ROS用于环境一致性、故障恢复、成本优化,是现代云管理的关键,助力企业提升效率和成本效益。**
183 3
|
7月前
|
弹性计算 人工智能 JSON
一键云部署:资源编排 ROS 轻松部署 LLM 应用开发平台 Dify
Dify是一款开源的LLM应用开发平台,融合BaaS和LLMOps理念,助力开发者快速构建生产级AI应用。阿里云的ROS提供IaC自动化部署服务,通过JSON/YAML/Terraform模板轻松部署Dify环境。以下是简化的部署步骤: 1. 登录ROS控制台的Dify部署页面。 2. 配置ECS实例参数。 3. 创建资源栈,完成部署后从输出获取Dify服务地址。 ROS模板定义了VPC、VSwitch、ECS实例等资源,通过ROS控制台创建资源栈实现自动化部署。这种方式高效、稳定,体现了IaC的最佳实践。
|
7月前
|
弹性计算 运维 数据处理
资源编排ROS之模块:实现模板代码复用(进阶篇)
资源编排ROS模块能够实现模板代码复用。支持输入输出、公共模块、版本管理、共享模块等功能。在使用场景上,除了对基础设施模块化外,还可作为配置、数据处理工具或资源包装器。
|
7月前
|
弹性计算 关系型数据库 API
ECS安装问题之安装资源编排服务(ROS)如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
|
2月前
|
Ubuntu 机器人 Linux
|
28天前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
70 14
|
1月前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。

推荐镜像

更多