我想使用面向 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.com 和 ReadOnlyAccess(AWS Managed) 权限。
相关信息
CloudFormation 研讨会:偏差检测实验室