界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

implementing-aws-config-rules-for-compliance

implementing-aws-config-rules-for-compliance

【效率与协作】实施 AWS Config 规则,对 AWS 资源进行持续合规监控,部署符合 CIS 和 PCI DSS 框架的托管和自定义规则,使用 SSM Automation 配置自动修复,并在多账户之间聚合合规数据。

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: implementing-aws-config-rules-for-compliance description: > 实施 AWS Config 规则,对 AWS 资源进行持续合规监控,部署符合 CIS 和 PCI DSS 框架的托管和自定义规则,使用 SSM Automation 配置自动修复,并在多账户之间聚合合规数据。 domain: cybersecurity subdomain: cloud-security tags: [cloud-security, aws, config-rules, compliance, automation, remediation] version: "1.0" author: mahipal license: Apache-2.0

实施 AWS Config 规则以实现合规

适用场景

  • 为 AWS 资源建立针对监管标准的持续合规监控时
  • 实施配置漂移的自动检测和修复时
  • 使用 AWS Organizations 构建跨多个 AWS 账户的合规仪表盘时
  • 审计团队需要持续合规证据而非时点评估时
  • 部署能在资源创建后几分钟内检测不合规资源的护栏时

不适用于:实时威胁检测(使用 GuardDuty)、应用漏洞扫描(使用 Inspector),或一次性合规评估(使用 Prowler 进行更快的即席审计)。

前置条件

  • 在所有目标账户和区域启用 AWS Config 记录
  • 具有 config:*、ssm:* 和 lambda:* 权限的 IAM 角色用于规则管理
  • 配置 AWS Organizations 委派管理员,用于 Config 聚合
  • S3 存储桶用于 Config 传输通道,SNS 主题用于通知
  • CloudFormation StackSets 或 Terraform 用于多账户规则部署

工作流程

步骤 1:启用 AWS Config 记录

在每个目标账户中设置 Config 记录器和传输通道。

# 创建用于 Config 数据的 S3 存储桶
aws s3api create-bucket \
  --bucket config-compliance-data-ACCOUNT_ID \
  --region us-east-1

# 创建 Config 服务关联角色
aws iam create-service-linked-role --aws-service-name config.amazonaws.com

# 启动 Config 记录器
aws configservice put-configuration-recorder \
  --configuration-recorder name=default,roleARN=arn:aws:iam::ACCOUNT:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig \
  --recording-group allSupported=true,includeGlobalResourceTypes=true

# 设置传输通道
aws configservice put-delivery-channel \
  --delivery-channel '{
    "name": "default",
    "s3BucketName": "config-compliance-data-ACCOUNT_ID",
    "snsTopicARN": "arn:aws:sns:us-east-1:ACCOUNT:config-notifications",
    "configSnapshotDeliveryProperties": {"deliveryFrequency": "TwentyFour_Hours"}
  }'

# 启动记录
aws configservice start-configuration-recorder --configuration-recorder-name default

步骤 2:部署用于 CIS 合规的托管 Config 规则

启用映射到 CIS AWS Foundations Benchmark 控制项的 AWS 托管 Config 规则。

# S3 存储桶安全规则
aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "s3-bucket-public-read-prohibited",
  "Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "s3-bucket-server-side-encryption-enabled",
  "Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "s3-bucket-ssl-requests-only",
  "Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_SSL_REQUESTS_ONLY"}
}'

# IAM 安全规则
aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "iam-root-access-key-check",
  "Source": {"Owner": "AWS", "SourceIdentifier": "IAM_ROOT_ACCESS_KEY_CHECK"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "mfa-enabled-for-iam-console-access",
  "Source": {"Owner": "AWS", "SourceIdentifier": "MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "iam-password-policy",
  "Source": {"Owner": "AWS", "SourceIdentifier": "IAM_PASSWORD_POLICY"},
  "InputParameters": "{\"RequireUppercaseCharacters\":\"true\",\"RequireLowercaseCharacters\":\"true\",\"RequireSymbols\":\"true\",\"RequireNumbers\":\"true\",\"MinimumPasswordLength\":\"14\"}"
}'

# 网络安全规则
aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "restricted-ssh",
  "Source": {"Owner": "AWS", "SourceIdentifier": "INCOMING_SSH_DISABLED"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "vpc-flow-logs-enabled",
  "Source": {"Owner": "AWS", "SourceIdentifier": "VPC_FLOW_LOGS_ENABLED"}
}'

# 加密规则
aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "rds-storage-encrypted",
  "Source": {"Owner": "AWS", "SourceIdentifier": "RDS_STORAGE_ENCRYPTED"}
}'

aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "encrypted-volumes",
  "Source": {"Owner": "AWS", "SourceIdentifier": "ENCRYPTED_VOLUMES"}
}'

步骤 3:使用 Lambda 创建自定义 Config 规则

针对组织特定的合规要求构建自定义规则。

# custom_config_rule.py - 确保 EC2 实例具有必需的标签
import json
import boto3

config = boto3.client('config')

REQUIRED_TAGS = ['Environment', 'Owner', 'CostCenter', 'Project']

def lambda_handler(event, context):
    invoking_event = json.loads(event['invokingEvent'])
    configuration_item = invoking_event.get('configurationItem', {})

    if configuration_item['resourceType'] != 'AWS::EC2::Instance':
        return

    tags = {t['key']: t['value'] for t in configuration_item.get('tags', [])}
    missing_tags = [tag for tag in REQUIRED_TAGS if tag not in tags]

    if missing_tags:
        compliance = 'NON_COMPLIANT'
        annotation = f"缺少必需标签: {', '.join(missing_tags)}"
    else:
        compliance = 'COMPLIANT'
        annotation = '所有必需标签均已存在'

    config.put_evaluations(
        Evaluations=[{
            'ComplianceResourceType': configuration_item['resourceType'],
            'ComplianceResourceId': configuration_item['resourceId'],
            'ComplianceType': compliance,
            'Annotation': annotation,
            'OrderingTimestamp': configuration_item['configurationItemCaptureTime']
        }],
        ResultToken=event['resultToken']
    )
# 部署自定义规则
aws configservice put-config-rule --config-rule '{
  "ConfigRuleName": "ec2-required-tags",
  "Source": {
    "Owner": "CUSTOM_LAMBDA",
    "SourceIdentifier": "arn:aws:lambda:us-east-1:ACCOUNT:function:config-required-tags",
    "SourceDetails": [{
      "EventSource": "aws.config",
      "MessageType": "ConfigurationItemChangeNotification"
    }]
  },
  "Scope": {"ComplianceResourceTypes": ["AWS::EC2::Instance"]}
}'

步骤 4:配置自动修复

设置 SSM Automation 文档,自动修复不合规资源。

# 自动修复公开访问的 S3 存储桶
aws configservice put-remediation-configurations --remediation-configurations '[{
  "ConfigRuleName": "s3-bucket-public-read-prohibited",
  "TargetType": "SSM_DOCUMENT",
  "TargetId": "AWS-DisableS3BucketPublicReadWrite",
  "Parameters": {
    "S3BucketName": {"ResourceValue": {"Value": "RESOURCE_ID"}},
    "AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
  },
  "Automatic": true,
  "MaximumAutomaticAttempts": 3,
  "RetryAttemptSeconds": 60
}]'

# 自动修复未加密的 EBS 卷
aws configservice put-remediation-configurations --remediation-configurations '[{
  "ConfigRuleName": "encrypted-volumes",
  "TargetType": "SSM_DOCUMENT",
  "TargetId": "AWS-EnableEBSEncryptionByDefault",
  "Parameters": {
    "AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
  },
  "Automatic": true,
  "MaximumAutomaticAttempts": 1,
  "RetryAttemptSeconds": 300
}]'

# 自动修复允许来自 0.0.0.0/0 SSH 访问的安全组
aws configservice put-remediation-configurations --remediation-configurations '[{
  "ConfigRuleName": "restricted-ssh",
  "TargetType": "SSM_DOCUMENT",
  "TargetId": "AWS-DisablePublicAccessForSecurityGroup",
  "Parameters": {
    "GroupId": {"ResourceValue": {"Value": "RESOURCE_ID"}},
    "AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
  },
  "Automatic": true,
  "MaximumAutomaticAttempts": 3,
  "RetryAttemptSeconds": 60
}]'

步骤 5:设置多账户聚合

将所有组织账户的合规数据聚合到中央视图。

# 为组织创建 Config 聚合器
aws configservice put-configuration-aggregator \
  --configuration-aggregator-name org-compliance-aggregator \
  --organization-aggregation-source '{
    "RoleArn": "arn:aws:iam::ACCOUNT:role/ConfigAggregatorRole",
    "AllAwsRegions": true
  }'

# 跨所有账户查询聚合合规情况
aws configservice get-aggregate-compliance-details-by-config-rule \
  --configuration-aggregator-name org-compliance-aggregator \
  --config-rule-name s3-bucket-public-read-prohibited \
  --compliance-type NON_COMPLIANT \
  --query 'AggregateEvaluationResults[*].[AccountId,AwsRegion,EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType]' \
  --output table

# 按账户获取合规摘要
aws configservice get-aggregate-compliance-summary-by-source \
  --configuration-aggregator-name org-compliance-aggregator \
  --query 'AggregateComplianceCounts[*].[GroupName,ComplianceSummary.CompliantResourceCount.CappedCount,ComplianceSummary.NonCompliantResourceCount.CappedCount]' \
  --output table

核心概念

术语定义
AWS Config 规则(Config Rule)持续或按计划评估 AWS 资源配置是否满足特定要求的合规检查
托管规则(Managed Rule)AWS 提供的预构建 Config 规则,包含用于常见合规检查(如加密和公开访问)的标准化逻辑
自定义规则(Custom Rule)由 Lambda 函数支持的组织专用 Config 规则,评估自定义合规逻辑
修复操作(Remediation Action)SSM Automation 文档或 Lambda 函数,用于自动修复不合规资源
配置聚合器(Configuration Aggregator)AWS Config 功能,将多个账户和区域的合规数据汇总到集中视图
合规包(Conformance Pack)打包为可部署单元的 Config 规则和修复操作集合,用于特定合规框架

工具与系统

  • AWS Config:用于 AWS 资源的持续配置记录和合规评估服务
  • SSM Automation:AWS Systems Manager 文档,用于对不合规资源执行自动修复操作
  • Config 合规包(Config Conformance Packs):适用于 CIS、PCI DSS、NIST 800-53 和 HIPAA 合规的预构建规则集合
  • CloudFormation StackSets:跨 AWS Organizations 多账户部署 Config 规则的机制
  • Config 聚合器(Config Aggregator):跨账户和跨区域的合规数据整合

常见场景

场景:在 30 个 AWS 账户中部署 CIS 合规监控

场景背景:一家金融服务公司需要在其所有 30 个生产账户中持续证明 CIS AWS Foundations Benchmark 合规,以通过年度 SOC 2 审计。

方法:

  1. 通过 CloudFormation StackSets 在所有账户中启用 AWS Config 记录
  2. 使用 StackSets 将 CIS 合规包部署到所有账户
  3. 在安全账户中设置 Config 聚合器,实现全组织可见性
  4. 为安全可自动修复的规则(公开 S3、未加密卷)配置自动修复
  5. 创建 EventBridge 规则,在出现新的 NON_COMPLIANT 评估时发送告警
  6. 构建每周合规报告,聚合所有账户的合规得分
  7. 将 Config 快照存储在具有生命周期策略的 S3 中,用于审计留存

常见陷阱:Config 记录按记录的配置项收费。在资源众多的账户中,成本可能较高。使用有针对性的记录组,专注于与合规相关的资源类型,而不是记录所有资源。网络规则(安全组)的自动修复如果规则是有意设置为宽泛的,可能会中断应用程序。

输出格式

AWS Config 合规报告
===============================
组织: Acme Financial(30 个账户)
框架: CIS AWS Foundations 1.4
报告日期: 2026-02-23
活跃 Config 规则数: 48

合规摘要:
  总体合规率: 87%
  合规资源数:     4,234
  不合规资源数:     612
  不适用:           189

不合规情况最多的规则:
  encrypted-volumes:              89 个资源(14 个账户)
  vpc-flow-logs-enabled:          67 个资源(12 个账户)
  mfa-enabled-for-iam-console:    45 个资源(8 个账户)
  s3-bucket-ssl-requests-only:    34 个资源(6 个账户)
  restricted-ssh:                 28 个资源(5 个账户)

自动修复情况(过去 30 天):
  已修复的公开 S3 存储桶:      12 个
  已限制的安全组:               8 个
  已启用 EBS 默认加密:          6 个
  自动修复总计:                26 个
  修复失败:                     3 次

账户合规排名:
  1. prod-core(account-001):     96% 合规
  2. prod-data(account-002):     94% 合规
  ...
  30. dev-sandbox(account-030):  68% 合规
我的收藏