开发者社区> 问答> 正文

如何进行偏差检测?

资源编排如何进行偏差检测?

展开
收起
小天使爱美 2020-03-24 17:30:28 780 0
1 条回答
写回答
取消 提交回答
  • 使用偏差检测可以识别在ROS管理之外进行配置更改的资源栈资源。您可以采取纠正措施,使资源栈资源再次与其在资源栈模板中的定义同步。例如直接更新存在偏差的资源,以便它们与其模板定义一致,或者通过模板修正功能直接修正模板。解决偏差有助于确保资源配置一致性。

    即使您通过ROS管理您的资源,用户也可以在ROS之外更改这些资源。用户可以使用创建资源的底层服务直接编辑资源。例如,您可以使用ECS控制台来更新作为ROS资源栈一部分创建的服务器实例。

    有些更改是偶然的,而有些更改会响应对时间敏感的操作事件。无论如何,在ROS之外进行的更改会使资源栈的更新或删除操作复杂化。使用偏差检测可以识别在ROS管理之外进行配置更改的资源栈资源。

    主题

    什么是偏差 偏差检测状态码 检测偏差时的注意事项 检测资源栈的偏差状态 检测资源的偏差状态 支持偏差检测的资源 检测资源栈组的偏差状态 什么是偏差 通过偏差检测,您可以检测资源栈的实际配置是否与其预期配置不同或已经存在偏差。使用ROS可以在整个资源栈或资源栈内的单个资源上检测偏差,您可以检测属性、资源是否被删除。如果某个资源的实际属性值与预期属性值不同,则认为该资源已经存在偏差。如果资源栈的一个或多个资源已经存在偏差,则认为资源栈已经存在偏差。

    为了确定资源是否已经存在偏差,ROS将预期的资源属性值(如资源栈模板中所定义)指定为模板参数的值,并将预期值与这些资源属性的实际值进行比较。如果资源的一个或多个属性值被删除或修改,则认为该资源已经存在偏差。ROS将生成已经存在偏差的资源栈中每个资源的详细信息。

    ROS仅在支持偏差检测的资源上检测偏差,不支持偏差检测的资源会显示NOT_CHECKED状态。详情请参考支持偏差检测的资源。

    您可以在具有以下状态的资源栈上执行偏差检测:CREATE_COMPLETE、UPDATE_COMPLETE、ROLLBACK_COMPLETE 、ROLLBACK_FAILED和CHECK_COMPLETE。

    当在资源栈上检测偏差时,ROS不会在任何属于该资源栈的嵌套资源栈上检测偏差。您也可以直接在嵌套资源栈上启动偏差检测操作。

    注意 ROS仅通过资源栈模板或指定模板参数来确定属性值的偏差,这不包括资源属性的默认值。要使ROS跟踪资源属性以确定偏差,需要显示设置的属性值。 偏差检测状态码 以下给出了资源偏差状态的具体解释。

    偏差检测操作状态:描述偏差操作的当前状态。 偏差状态。 资源栈组:根据属于资源栈组的资源栈实例的偏差状态来描述资源栈组的总体偏差状态。 资源栈实例:根据资源栈实例关联资源栈的偏差状态来描述资源栈实例的偏差状态。 资源栈:根据资源栈资源的偏差状态来描述资源栈的总体偏差状态。 资源偏差状态:描述单个资源的偏差状态。 下表列出了ROS分配给资源栈偏差检测操作的状态码。 资源偏差状态 描述 DELETED 资源与预期的模板配置不同,因为资源已被删除。 MODIFIED 资源与预期的模板配置不同。 NOT_CHECKED ROS没有检查资源是否与预期的模板配置不同。 IN_SYNC 资源的当前配置与其预期的模板配置相匹配。 下表列出了ROS分配给资源栈的偏差状态码。 偏差状态 描述 DRIFTED 资源栈:资源栈与其预期模板配置不同或已经存在偏差。如果资源栈的一个或多个资源已经存在偏差,则认为资源栈已经存在偏差。 资源栈实例:如果与资源栈实例关联的资源栈已经存在偏差,则认为该实例已经存在偏差。 资源栈组:如果一个或多个资源栈实例已经存在偏差,则认为资源栈组已经存在偏差。 NOT_CHECKED ROS尚未检查资源栈、资源栈组或资源栈实例是否与其预期模板配置不同。 IN_SYNC 偏差检测支持资源的当前配置与其预期的模板配置相匹配。 说明 不支持偏差检测的资源,其他资源栈、资源栈组或资源栈实例也具有IN_SYNC状态。 下表列出了ROS分配给资源栈资源的偏差代码。

    偏差检测操作状态 描述 DETECTION_COMPLETE 已经对支持偏差检测的资源栈中的所有资源成功完成了资源栈偏差检测操作。 DETECTION_FAILED 资源栈偏差检测操作对于资源栈中的至少一个资源检测失败。 DETECTION_IN_PROGRESS 资源栈偏差检测操作目前正在进行中。 下表列出了ROS分配给与预期模板配置不同的资源属性的差异类型状态代码。 属性差异类型 描述 ADD 已将值添加到数据类型为数组或列表的资源属性。 REMOVE 属性已从当前资源配置中删除。 NOT_EQUAL 当前属性值与资源栈模板中定义的预期值不同。 检测偏差时的注意事项 为了在资源栈上成功执行偏差检测,用户必须具有以下权限:

    支持在资源栈中包含的偏差检测的每个资源的读取权限。例如,如果资源栈包含ALIYUN::VPC::EIP资源,则您必须具有vpc:DescribeEipAddresses权限才能在资源栈上执行偏差检测。 如果需要对资源栈进行偏差检测,则需要具有ros:DetectStackDrift权限。 如果需要对资源进行偏差检测,则需要具有ros:DetectStackResourceDrift权限。 在某些情况下,ROS可能无法返回准确的偏差结果。您应该了解这些情况,以便正确解释您的偏差检测结果。

    在某些情况下,属性数组中包含的对象将报告为偏差,而实际上它们是从负责该资源的底层服务提供给属性的默认值。 您可以在资源栈模板中指定某些资源属性。ROS无法将其与生成的资源栈资源中的属性进行比较,因此这些属性不能包括在偏差检测结果中。这些属性可分为四大类: ROS无法在资源栈模板中映射回初始资源属性值的属性值。 负责资源的服务不返回的属性值。 某些属性值被有意设计成永远不会由资源所属的服务返回。这些属性值往往包含机密信息,例如密码或其他不应泄露的敏感数据。 ROS尚未支持的资源属性。 资源的属性究竟是否支持偏差检查,可以通过GetResourceType接口查询。以查询ALIYUN::ESS::ScalingRule资源的返回值为例,最外层的SupportDriftDetection字段表明资源是否支持偏差检查。如果取值为true,表明资源支持偏差检查,此时每个属性都有SupportDriftDetection字段表明该属性是否支持偏差检查。

    { "RequestId": "29C238D7-2D47-4689-966C-DAA80741E7EA", "Attributes": { "ScalingRuleAri": { "Description": "Unique identifier of a scaling rule." }, "ScalingRuleId": { "Description": "ID of a scaling rule, generated by the system and globally unique." } }, "ResourceType": "ALIYUN::ESS::ScalingRule", "Properties": { "ScalingRuleName": { "Immutable": false, "Type": "string", "Description": "Name shown for the scaling group, which is a string containing 2 to 40 English or Chinese characters. It must begin with a number, a letter (case-insensitive) or a Chinese character and can contain numbers, "_", "-" or ".". The account name in the same scaling group is unique in the same region. If this parameter value is not specified, the default value is ScalingRuleId.", "Constraints": [ { "AllowedPattern": "^[a-zA-Z0-9\u4e00-\u9fa5][-_.a-zA-Z0-9\u4e00-\u9fa5]{1,63}$" } ], "Required": false, "UpdateAllowed": true, "SupportDriftDetection": true }, "AdjustmentValue": { "Immutable": false, "Type": "integer", "Description": "Adjusted value of a scaling rule. Value range:\n- QuantityChangeInCapacity: [-500, 500]\n- PercentChangeInCapacity: [-100, 10000]\n- TotalCapacity: [0, 1000]", "Constraints": [ { "Range": { "Min": -500, "Max": 10000 } } ], "Required": false, "UpdateAllowed": true, "SupportDriftDetection": true }, "Cooldown": { "Immutable": false, "Type": "integer", "Description": "Cool-down time of a scaling rule. Value range: [0, 86,400], in seconds. The default value is empty.", "Constraints": [ { "Range": { "Min": 0, "Max": 86400 } } ], "Required": false, "UpdateAllowed": true, "SupportDriftDetection": true }, "ScalingGroupId": { "Immutable": false, "Type": "string", "Description": "ID of the scaling group of a scaling rule.", "Required": true, "UpdateAllowed": false, "SupportDriftDetection": true }, "AdjustmentType": { "Immutable": false, "Type": "string", "Description": "Adjustment mode of a scaling rule. Optional values:\n- QuantityChangeInCapacity: It is used to increase or decrease a specified number of ECS instances.\n- PercentChangeInCapacity: It is used to increase or decrease a specified proportion of ECS instances.\n- TotalCapacity: It is used to adjust the quantity of ECS instances in the current scaling group to a specified value.", "Constraints": [ { "AllowedValues": [ "QuantityChangeInCapacity", "PercentChangeInCapacity", "TotalCapacity" ] } ], "Required": true, "UpdateAllowed": true, "SupportDriftDetection": true } }, "SupportDriftDetection": true }

    您可以在资源栈上执行偏差检测操作,以便确定资源栈是否已偏离其预期的模板配置,并返回有关支持偏差检测的资源栈中每个资源的偏差状态详情。

    前提条件 请确保您已经创建资了源栈,操作方法请参见创建资源栈。 检测偏差(控制台) 登录ROS控制台 。 在左侧导航栏单击资源栈。 在资源栈列表中,单击资源栈名称下的ID。 在资源栈信息页,选择1>检测偏差。 说明 ROS会弹出提示窗口,说明已经为选定的资源栈启动偏差检测。 您一次只能在资源栈上运行一个偏差检测操作。 偏差检测操作可能需要几分钟,具体时间取决于资源栈中包含的资源数量,请耐心等待。即使您关闭信息窗口,ROS也会继续执行偏差检测操作。 查看偏差检测结果。 在资源栈信息页的基本信息中查看资源栈的偏差状态和上一次偏差检查时间。 在偏差检测页的资源栈偏移状态中查看资源栈的偏差状态和上一次偏差检查时间。 在偏差检测页的资源偏差状态中,单击资源名称右侧的查看偏差详细信息,查看资源物理ID、偏差状态、资源类型以及上一次偏差检查时间。 说明 如果资源栈的一个或多个资源已经存在偏差,则认为资源栈已经存在偏差。 检测偏差(ALIYUN CLI) 通过命令aliyun ros在资源栈上检测偏差。

    命令 描述 DetectStackDrift 对资源栈启动偏差检测操作。 GetStackDriftDetectionStatus 监控资源栈偏差检测操作的状态。 ListStackResourceDrifts 查询资源栈偏差检测操作的详细信息。 使用DetectStackDrift可以在资源栈上检测偏差。您需要指定资源栈ID,以及用于此次偏差检测操作筛选条件的特定资源名称。 $ aliyun ros DetectStackDrift --StackId 4334b961-3bfd-419e-9a00-23a95e****** { "DriftDetectionId": "13b48934-6818-4765-8ae1-744241******", "RequestId": "B288A0BE-D927-4888-B0F7-B35EF84B6E6F" } 由于资源栈偏差检测操作可能会长时间运行,请使用GetStackDriftDetectionStatus监控偏差操作的状态。此命令将获取DetectStackDrift返回的资源栈偏差检测ID。 在以下示例中,我们采用了如上DetectStackDrift示例返回的资源栈偏差检测ID,并将其作为参数传递给GetStackDriftDetectionStatus。此参数返回操作详细信息,显示偏差检测操作已完成。

    $ aliyun ros GetStackDriftDetectionStatus --StackDriftDetectionId 13b48934-6818-4765-8ae1-744241****** { "RequestId": "52398D3A-E868-4F95-8B5E-6A2DFB778B16", "DriftDetectionTime": "2020-03-17T07:21:17", "DriftDetectionStatusReason": "Detect stack drift successfully", "DriftedStackResourceCount": 2, "DriftDetectionStatus": "DETECTION_COMPLETE", "StackDriftStatus": "DRIFTED", "DriftDetectionId": "13b48934-6818-4765-8ae1-744241******", "StackId": "4334b961-3bfd-419e-9a00-23a95e******" } 资源栈偏差检测操作完成后,使用ListStackResourceDrifts可以查看结果,包括经存在偏差的资源的实际和预期属性值。 $ aliyun ros ListStackResourceDrifts --StackId 4334b961-3bfd-419e-9a00-23a95e****** { "ResourceDrifts": [ { "ResourceDriftStatus": "MODIFIED", "LogicalResourceId": "Vpc1", "PropertyDifferences": [ { "ActualValue": "test11", "PropertyPath": "/Description", "ExpectedValue": "test1", "DifferenceType": "NOT_EQUAL" } ], "PhysicalResourceId": "vpc-m5euqfvmzygb7xq******", "ExpectedProperties": "{"CidrBlock": "192.168.0.0/16", "Description": "test1", "VpcName": "test1"}", "DriftDetectionTime": "2020-03-17T07:21:17", "ResourceType": "ALIYUN::ECS::VPC", "ActualProperties": "{"CidrBlock": "192.168.0.0/16", "Description": "test11", "VpcName": "test1"}", "StackId": "4334b961-3bfd-419e-9a00-23a95e******" }, { "ResourceDriftStatus": "DELETED", "LogicalResourceId": "Vpc2", "PhysicalResourceId": "vpc-m5exf3skxrxtvtk******", "DriftDetectionTime": "2020-03-17T07:21:17", "ResourceType": "ALIYUN::ECS::VPC", "StackId": "4334b961-3bfd-419e-9a00-23a95e******" } ], "RequestId": "8E1DE57B-6124-482B-8283-EF5562653308" }

    您可以对资源栈上单个资源执行偏差检测操作,以便确定资源是否已偏离其预期的模板配置。

    前提条件 请确保您已经在整个资源栈上进行了偏差检测,操作方法请参见检测资源栈的偏差状态。 检测偏差(控制台) 登录ROS控制台 。 在左侧导航栏单击资源栈。 在资源栈列表中,单击资源栈名称下的ID。 单击偏差检测。 在资源偏差状态中,单击资源名称右侧的检测资源偏差,检测单个资源的偏差状态。单资源检测 在资源偏差状态中,单击资源名称右侧的查看偏差详细信息,查看资源物理ID、偏差状态、资源类型以及上一次偏差检查时间。 检测偏差(ALIYUN CLI) 使用aliyun ros DetectStackResourceDrift在单个资源上检测偏差指定资源的逻辑ID,以及包含它的资源栈。

    $ aliyun ros DetectStackResourceDrift --StackId 4334b961-3bfd-419e-9a00-23a95e****** --LogicalResourceId Vpc1 { "ResourceDriftStatus": "MODIFIED", "LogicalResourceId": "Vpc1", "PropertyDifferences": [ { "ActualValue": "test11", "PropertyPath": "/Description", "ExpectedValue": "test1", "DifferenceType": "NOT_EQUAL" } ], "RequestId": "A488767B-7440-4A74-81FD-BCF91A2EE1BB", "PhysicalResourceId": "vpc-m5euqfvmzygb7xq******", "ExpectedProperties": "{"CidrBlock": "192.168.0.0/16", "Description": "test1", "VpcName": "test1"}", "DriftDetectionTime": "2020-03-17T08:35:34", "ResourceType": "ALIYUN::ECS::VPC", "ActualProperties": "{"CidrBlock": "192.168.0.0/16", "Description": "test11", "VpcName": "test1"}", "StackId": "4334b961-3bfd-419e-9a00-23a95e******" }

    本文介绍了支持偏差检测的资源类型。

    说明 支持偏差检测的资源类型逐步增加中,敬请期待。 服务 资源 ECS ALIYUN::ECS::VPC ALIYUN::ECS::VSwitch

    ALIYUN::ECS::NatGateway

    ALIYUN::ECS::SecurityGroup

    ESS ALIYUN::ESS::ScalingRule ALIYUN::ESS::ScalingConfiguration

    ALIYUN::ESS::ScalingGroup

    ALIYUN::ESS::ScalingGroupEnable

    RAM ALIYUN::RAM::Role SLB ALIYUN::SLB::Listener ALIYUN::SLB::LoadBalancer

    ALIYUN::SLB::VServerGroup

    ALIYUN::SLB::BackendServerAttachment

    VPC ALIYUN::VPC::EIP ALIYUN::VPC::EIPAssociation

    通过对资源栈组执行偏差检测,您可以确定属于该资源栈组的任何资源栈实例是否与它们的预期配置不同或已经存在偏差。

    前提条件 请确保您已经创建资了源栈组,操作方法请参见创建资源栈组。 背景信息 ROS对资源栈组执行偏差检测时,会对与资源栈组中的每个资源栈实例关联的资源栈执行偏差检测。ROS将资源栈中的每个资源的当前状态与该资源的预期状态(通过资源栈的模板以及指定输入参数定义)进行比较,如果资源的当前状态不同于预期状态,则认为该资源已经存在偏差。

    如果资源栈中的一个或多个资源已经存在偏差,则将资源栈本身视为已经存在偏差,并将与资源栈关联的资源栈实例也视为已经存在偏差。 如果资源栈组中的一个或多个资源栈实例已经存在偏差,则将资源栈组本身视为已经存在偏差。 偏差检测判定标准是是在ROS外部对资源栈进行的更改,直接通过ROS对资源栈进行的更改(而不是在资源栈组级别)不会被视为存在偏差。例如,假设您具有一个与资源栈组的资源栈实例关联的资源栈。如果您使用ROS更新该资源栈来使用不同模板,则不会被视为偏差,即使该资源栈现在具有与属于资源栈组的其他资源栈不同的模板。这是因为,该资源栈仍与它在ROS中的预期模板和参数配置相匹配。

    在资源栈组偏差检测时,ROS会分别对资源栈组中的每个资源栈执行偏差检测,它在确定资源栈是否偏离时考虑所有覆盖的参数值。如果直接对与资源栈实例关联的资源栈执行偏差检测,则无法从资源栈组页面中查看这些偏差结果。

    检测偏差(控制台) 登录ROS控制台 。 在左侧导航栏单击资源栈组。 在资源栈组列表中,单击资源栈组名称下的ID。 在详细信息页,选择1>检测偏差。资源栈组检测偏差 说明 ROS会弹出提示窗口,说明已经为选定的资源栈组启动偏差检测。 (可选)单击操作,找到偏差检测操作,单击查看偏差详细信息,可以监控偏差检测操作进度。 说明 您每次只能对给定资源栈组运行一次偏差检测操作。即使您关闭信息窗口,ROS也会继续执行偏差检测操作。 偏差检测操作可能需要几分钟,具体时间取决于资源栈组中包含的资源栈实例数量以及资源栈组中包含的资源数量。 单击实例,查看偏差检测结果。 在资源栈ID列查看与每个资源栈实例关联的资源栈ID,在偏差状态列查看该资源栈的偏差状态。如果资源栈的一个或多个资源已偏离,则认为资源栈已偏离。

    要查看与特定资源栈实例关联的资源栈的偏差检测结果,您可以记录资源栈实例的阿里云账号、资源栈名称和地域,登录包含资源栈实例的阿里云账户查看偏差结果,详情请参考检测资源栈的偏差状态。

    检测偏差(ALIYUN CLI) 使用aliyun ros在资源栈组上检测偏差。

    命令 描述 DetectStackGroupDrift 对资源栈组启动偏差检测操作。 GetStackGroupOperation 监控资源栈组偏差检测操作的状态。 StopStackGroupOperation 停止资源栈组的偏差检查操作。 在偏差检测操作完成后,可以通过以下命令返回所需的偏差信息:

    使用GetStackGroup返回有关资源栈组的详细信息,包括有关资源栈组上次完成的偏差操作的详细信息(不包括有关正在执行的偏差操作的信息)。 使用ListStackInstances返回属于资源栈组的资源栈实例列表,包括每个实例的偏差状态和上次偏差检查时间。 使用GetStackInstance返回有关特定资源栈实例的详细信息,包括其偏差状态和上次偏差检查时间。

    2020-03-24 18:33:48
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
机器学习在恶意样本检测方面 的实践之路 立即下载
机器学习在恶意样本检测方面的实践之路 立即下载
安全值-量化安全风险 立即下载