# Implementing AWS Config Rules For Compliance

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

- Skill: `killvxk/implementing-aws-config-rules-for-compliance` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add killvxk/implementing-aws-config-rules-for-compliance`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/implementing-aws-config-rules-for-compliance/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/implementing-aws-config-rules-for-compliance

---


# 实施 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 记录器和传输通道。

```bash
# 创建用于 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 规则。

```bash
# 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 规则

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

```python
# 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']
    )
```

```bash
# 部署自定义规则
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 文档，自动修复不合规资源。

```bash
# 自动修复公开访问的 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：设置多账户聚合

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

```bash
# 为组织创建 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% 合规
```

