Deploys AWS Config rules for continuous compliance monitoring of AWS resources using CIS/PCI DSS managed/custom rules, SSM Automation auto-remediation, and multi-account aggregation.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 为 AWS 资源建立针对监管标准的持续合规监控时
Deploys AWS Config rules for continuous compliance monitoring of AWS resources with managed/custom rules for CIS/PCI DSS, SSM Automation remediation, and multi-account aggregation.
Deploys AWS Config rules for continuous compliance monitoring of resources using managed/custom CIS/PCI rules, SSM remediation, and multi-account aggregation.
Implements AWS Security Hub for aggregating security findings across AWS accounts, enables CIS/PCI DSS compliance standards, configures EventBridge/Lambda auto-remediation, and creates custom organizational risk insights.
Share bugs, ideas, or general feedback.
不适用于:实时威胁检测(使用 GuardDuty)、应用漏洞扫描(使用 Inspector),或一次性合规评估(使用 Prowler 进行更快的即席审计)。
config:*、ssm:* 和 lambda:* 权限的 IAM 角色用于规则管理在每个目标账户中设置 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
启用映射到 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"}
}'
针对组织特定的合规要求构建自定义规则。
# 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"]}
}'
设置 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
}]'
将所有组织账户的合规数据聚合到中央视图。
# 为组织创建 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 规则和修复操作集合,用于特定合规框架 |
场景背景:一家金融服务公司需要在其所有 30 个生产账户中持续证明 CIS AWS Foundations Benchmark 合规,以通过年度 SOC 2 审计。
方法:
常见陷阱: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% 合规