You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AWS Organizations与Pulumi,如何确保可打标签资源带指定标签?

确保所有可打标签AWS资源具备指定标签的最佳方案组合

结合你已有的工具栈,推荐以下互补方案实现标签合规的全覆盖:

1. 优化SCP配置(精准控制资源操作)

你之前的SCP问题在于范围过宽或过细,可通过精准的条件和动作设置避免误拦截:

  • 仅针对资源创建/标签修改/资源更新删除类动作,排除只读API(如Get*、Describe*)
  • 组合Null和StringNotEquals条件,确保标签存在且非空
  • 用aws:PrincipalIsAWSService排除AWS内部服务操作,避免干扰平台维护

示例SCP配置:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EnforceTagsOnCreate",
            "Effect": "Deny",
            "Action": [
                "*:Create*",
                "*:TagResource"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:Null": {
                    "aws:RequestTag/Component": "true",
                    "aws:RequestTag/Stack": "true",
                    "aws:RequestTag/Project": "true"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        },
        {
            "Sid": "EnforceTagsOnModify",
            "Effect": "Deny",
            "Action": [
                "*:Update*",
                "*:Delete*",
                "*:UntagResource"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:Null": {
                    "aws:ResourceTag/Component": "true",
                    "aws:ResourceTag/Stack": "true",
                    "aws:ResourceTag/Project": "true"
                },
                "Bool": {
                    "aws:PrincipalIsAWSService": "false"
                }
            }
        }
    ]
}

2. 实时自动补全标签(EventBridge + Lambda)

针对手动创建或漏标的新增资源,用事件驱动的方式自动补全标签:

  • 配置EventBridge规则,监听CloudTrail中的资源创建API调用事件(如Create*动作)
  • 触发Lambda函数,检查资源标签完整性,自动添加缺失的标签
  • 针对存量资源,可编写一次性Lambda脚本批量扫描补全

示例Lambda核心逻辑(Python):

import boto3

tag_client = boto3.client('resourcegroupstaggingapi')
REQUIRED_TAGS = {"Component": "default-component", "Stack": "default-stack", "Project": "default-project"}

def lambda_handler(event, context):
    resource_arn = event['detail']['requestParameters']['resourceArn']
    # 获取现有标签
    resp = tag_client.get_resources(ResourceARNList=[resource_arn])
    existing_tags = {t['Key']: t['Value'] for t in resp['ResourceTagMappingList'][0]['Tags']}
    # 补全缺失标签
    missing_tags = {k: v for k, v in REQUIRED_TAGS.items() if k not in existing_tags}
    if missing_tags:
        tag_client.tag_resources(ResourceARNList=[resource_arn], Tags=missing_tags)

3. AWS Config + 自动修正

利用AWS Config的托管规则和自动修正功能,覆盖存量和新增资源的合规检查:

  • 创建Config规则:选择required-tags托管规则,配置Component、Stack、Project三个标签键
  • 开启自动修正,关联AWS-ApplyTagsToResource自动化文档
  • 配置IAM权限,允许Config对资源执行标签添加操作

该方案可自动扫描资源、发现合规问题并修复,同时生成合规报表。

4. 批量整改存量资源(Resource Groups Tagging API)

对于历史遗留的未打标签资源,用Tagging API批量处理:

# 获取所有缺失Component标签的资源ARN
aws resourcegroupstaggingapi get-resources --tag-filters Key=Component,Values="*" --exclude-compliant-resources --query 'ResourceTagMappingList[*].ResourceARN' --output text > missing-resources.txt

# 批量添加标签
aws resourcegroupstaggingapi tag-resources --resource-arns file://missing-resources.txt --tags Component=your-default-value Stack=your-default-stack Project=your-default-project

可编写Shell脚本循环处理三个标签的补全任务。

综合落地建议

  1. 预防层:Pulumi策略+优化后的SCP,确保IaC和手动创建的资源必须带标签
  2. 自动修正层:EventBridge+Lambda处理实时新增资源,AWS Config覆盖存量和遗漏资源
  3. 批量整改层:用Tagging API脚本一次性修复历史漏标资源

内容的提问来源于stack exchange,提问作者doublethink13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:07:38