如何使用面向 AWS Config 的 AWS 托管规则“cloudformation-stack-drift-detection-check”来解决 CloudFormation 中的偏差检测错误?

上次更新日期:2021 年 4 月 6 日

我想使用面向 AWS Config 的 AWS 托管规则“cloudformation-stack-drift-detection-check”来解决 AWS CloudFormation 中的偏差检测错误。

简短描述

即使堆栈的偏差状态在 CloudFormation 控制台中显示为 IN_SYNC,您也可能会收到以下错误:

  • “AWS CloudFormation 未能检测到偏差,默认错误为 NON_COMPLIANT。请重新评估规则,然后重试。如果问题仍然存在,请联系 AWS CloudFormation 支持。”
  • “您针对特定堆栈的堆栈偏差检测操作已失败。请检查您现有的 AWS CloudFormation 角色权限并添加缺失的权限。”

根据收到的错误,选择以下选项之一:

  • 如果收到 NON-COMPLIANT 错误,请完成更新 AWS Config 规则部分中给出的步骤。
  • 如果收到权限错误,请完成设置正确的权限部分给出中的步骤。

注意:AWS 托管规则 cloudformation-stack-drift-detection-check 检查 CloudFormation 堆栈以使用 DetectStackDrift API 进行偏差检测。此规则具有定期和配置更改触发器类型。如果偏差检测失败,您会收到错误消息。

解决方法

更新 AWS Config 规则

出于以下原因,您可能会在 AWS Config 控制台中收到 NON_COMPLIANT 错误消息:

  • CloudFormation 堆栈中的资源不支持偏差检测。您会收到针对 AWS Config 规则的 NON_COMPLIANT 资源错误(以注释形式提供)。例如,您会在 AWS CloudTrail 日志中收到“ResourceType 不支持偏差检测”错误。
  • 您的 AWS Config 规则取决于 DetectStackDrift 的可用性。您会收到限流或“超出速率”错误,因为在发生限流时,AWS Config 会将规则默认设置为 NON_COMPLIANT。

要解决由于不支持偏差检测而导致的错误:

忽略处于 NON_COMPLIANT 状态的 CloudFormation 堆栈。在这种情况下,错误即为误报。有关详细信息,请参阅评估您的资源

-或者-

创建自定义 AWS Config规则,其中包含的预置可将您的堆栈排除在评估之外。有关 AWS Config 规则示例,请参阅 AWS Config 规则存储库RDKLib

要解决因 DetectStackDrift 的可用性而导致的错误:

1.    再次评估您的 AWS Config 规则。

注意:例如,可以为角色的 Amazon 资源名称 (ARN) 附加 config.amazonaws.com 受信任权限和 ReadOnlyAccess(AWS Managed) 策略权限,该名称在必需的规则参数 CloudformationRoLearn 中提供。有关详细信息,请参阅检测偏差时的注意事项

2.    在 CloudFormation 堆栈上执行偏差检测

3.    通过 AWS Config 规则运行评估。

设置正确的权限

如果所需 cloudformationRoleArn 参数的 AWS Identity and Access Management (IAM) 角色没有 DetectStackDrift API、DetectStackResourceDrift API 或其他必需的服务权限,您就会收到权限错误。

要解决此错误,请为您的 IAM 角色编辑信任策略。您必须为 cloudformationRoleArn 附加 config.amazonaws.comReadOnlyAccess(AWS Managed) 权限


这篇文章对您有帮助吗?


您是否需要账单或技术支持?