在 AWS 中强制标记 Terraform 资源

Forced tagging for terraform resources in AWS

我想知道是否有一种好方法可以为所有开发人员强制标记 AWS 资源。或者至少提供一组自动插入的预定义标签。这背后的原因是一些团队成员忘记标记他们的资源或使用不同的标签集。此外,如果您想为将来的部署更改标签,则必须在所有地方进行更改。 所以,到目前为止,我的想法是创建一个地图,其中包含所有应默认设置的标签(项目、版本、成本分配)。现在每个人都可以使用这个默认列表,并在需要时为他们的资源添加更多标签。但不能保证每个人都使用此地图进行默认标记。 我不知道如何实现这一目标,但也许有人有一个好主意...

为了解决这个问题,我们创建了一个 tags 模块,每个项目在定义资源时都希望使用该模块。该模块具有 product_nameservice_name 参数以及 extra_tags 参数。然后它将这些值与内部地图结合起来并导出最终地图,以便它可以在整个项目中使用。

在我们的团队文化中,每个团队都明白标记对于维护 AWS 中的资源和成本的控制和责任非常重要。不标记您的资源是获得标记为 declinedneeds work 的 PR 的原因。

我们确实使用 AWS Config 来监控未标记的资源并通知我们,但是保持资源标记的最佳防线是文化和拉取评论。

选项 1:在 Terraform Enterprise 中,您可以使用 Sentinel 来强制执行资源应该是什么样子的策略。请参阅强制标记的 Hashicorp 示例:https://github.com/hashicorp/terraform-guides/blob/master/governance/second-generation/aws/enforce-mandatory-tags.sentinel

选项 2:如果您没有 Terraform Enterprise,请使用填充模块内标签的参数创建模块,并阻止使用 "plain" aws 资源。

选项 3:将标签检查作为自动化测试套件的一部分(例如使用 terratest),并在没有合适的标签时让测试失败。