发布于: Oct 30, 2022
本文为大家介绍如何实施并验证成员账户标签已达到成本监控目的的一种方法。假定大家熟悉 Amazon Organizations 的使用方法,而且至少拥有 2 个 Amazon 账户。首先是 root 账户,其次是成本账户。为了简单起见,我们在本篇博文中将介绍如何实施并验证成员账户标签。当然,您也可以使用同样的流程管理其他账户或组织单位(OU)。您应在 root 账户上拥有管理员角色。
如果您已经管理有 Amazon Landing Zone,应该对 Amazon Organizations 比较熟悉。
如果您还不满足以上先决条件,本文建议您首先参阅《教程:组织的创建与配置》。
在本文示例中,我们强制要求各用户创建具有一组预定义值的 Project 标签,并将此标签附加到用户希望创建的任何 CloudFormation 栈当中。
我们还会检查 Amazon Organizations 当中是否已经启用了服务控制策略:
- 前往 Amazon Console 并选择 Amazon Organizations
- 在 Organize accounts 选项卡上,从左侧导航窗格中选择 Root
- 在右侧详情窗格中的 Service control policies 旁,选择 Enable
- 在 What is a service control policy? 下,选择 Enable service control polices

现在,您可以切换至 Policies 选项卡,而后点击 Service control policies(服务控制策略)。您将在这里找到默认的预设策略 FullAWSAccess,此策略负责为各项操作授予访问权限。
您可以单击 Create Policy 以添加用于实现标签要求的新策略。
在本示例中,我们将指定必要的选项,例如策略名称(例如 EnforceProjectTag)与相关描述。另外,我们将在示例中对用户后续将要创建的所有 CloudFormation 栈强制使用 Project 标签。
在这种情况下,策略 JSON 将如下所示:
这项策略的基本原则为:如果用户未分配 Project 标签,则禁止创建任何 CloudFormation 栈(拒绝 cloudformation:CreateStack 操作)。
关于完整操作流程,请参阅 Amazon IAM 操作、资源与条件。
最后,我们将刚刚创建完成的新策略附加至您的成员账户或 OU:
- 返回 Amazon Organizations 主页
- 选择所要附加的目标账户或 OU
- 在左侧选择 Service control policies
- 附加新策略

在完成此项变更后,任何未向新创建 CloudFormation 栈指定 Project 标签的成员账户用户,都将收到以下错误提示:

与强制标签部分一样,验证标签的第一步同样是检查 root 账户是否已经启用 Tag Policies。
- 前往 Amazon Console 并选择 Amazon Organizations
- 在 Organize accounts 选项卡上,选择左侧窗格中的 Root
- 在右侧详情窗格中的 Tag Policies 旁,选择 Enable
现在,我们可以创建一项新策略,用于定义特定标签的可用值区间。在示例中,我们假定 Project 标签只能为以下三个值之一:ProjectA, ProjectB 或者 ProjectC。
您可以按 Amazon Organizations→Organize accounts→Policies→Create Policy 的顺序,指定策略名称与描述。
您可以使用可视化编辑器或相应的 JSON 代码指定策略代码,以下为我们的具体操作方式:
请注意:Amazon CloudFormation 目前尚不支持标签策略强制使用,因此在我们的标签策略中,我们将引用 CloudFormation 模板创建的基本资源或前几个资源。例如,如果我们的 CloudFormation 栈创建的首批资源之一为 EC2 网络接口,则如果不使用 Project=ProjectA, ProjectB 或 ProjectC 进行标记,Amazon 将明确拒绝这项创建操作。
使用可视化编辑器,大家可以通过以下设置创建标签策略:
以上设置等效于以下 JSON 选项卡内容:

其效果可以总结为:如果 CloudFormation 栈未使用包含 ProjectA, ProjectB 或 ProjectC 值的 Project 键进行标记,则拒绝一切 EC2 网络接口或弹性 IP 的创建操作(拒绝 ec2:network-interface ec2:elastic-ip)。
现在,您可以将标签策略附加至成员账户当中。
- 返回至 Amazon Organizations 主页
- 选择所要附加的目标账户或 OU
- 在右侧窗格中选择 Tag Policies
- 选择新策略,而后单击附加

由于此想新标签策略的激活,任何尝试创建 EC2 网络接口、或涉及创建 EC2 网络接口但却未能关联 Project 标签与允许值的 CloudFormation 栈用户,都将收到以下错误提示:

在 Project 标签完成实施与验证之后,您可以在 Cost Explorer 中清晰的监控成本与用量信息,并按标签进行信息过滤。
您可以按 Amazon Console→Cost Explorer→Cost Explorer 图标(lens)的顺序进行访问,并使用以下三个值之一将 Project 设置为标签过滤器:

要正确应用标签策略,用户保证标签值符合预先定义的值区间。这一点对于高效、精确地监控用量与成本尤其重要。在各类组织内,Project、Group 以及 Department 等标签都有助于填补灵活运营与严格合规之间,以及意外开销与明确成本分配之间的空白环节。
相关文章