| name | implementing-aws-macie-for-data-classification |
| description | 实施 Amazon Macie,利用机器学习和模式匹配自动发现、分类并保护 S3 存储桶中的敏感数据,包括 PII、金融数据和凭据检测。
|
| domain | cybersecurity |
| subdomain | cloud-security |
| tags | ["aws","macie","data-classification","s3","pii","sensitive-data","dlp","compliance"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
实施 AWS Macie 进行数据分类
概述
Amazon Macie(亚马逊 Macie)是一项全托管的数据安全与隐私服务,使用机器学习(Machine Learning)和模式匹配(Pattern Matching)来发现和保护 Amazon S3 中的敏感数据。Macie 每天自动评估您的 S3 存储桶清单,识别包含 PII(个人身份信息)、金融信息、凭据及其他敏感数据类型的对象。它提供两种发现方式:用于广泛可见性的自动化敏感数据发现,以及用于深度分析的定向发现任务。
前置条件
- 拥有含待分类数据的 S3 存储桶的 AWS 账户
- 具备 Macie 服务配置所需的 IAM 权限
- 已配置 AWS Organizations(用于多账户部署)
- S3 存储桶位于受支持的区域
启用 Macie
通过 AWS CLI
aws macie2 enable-macie
aws macie2 get-macie-session
aws macie2 update-automated-discovery-configuration \
--status ENABLED
通过 Terraform
resource "aws_macie2_account" "main" {}
resource "aws_macie2_classification_export_configuration" "main" {
depends_on = [aws_macie2_account.main]
s3_destination {
bucket_name = aws_s3_bucket.macie_results.id
key_prefix = "macie-findings/"
kms_key_arn = aws_kms_key.macie.arn
}
}
配置发现任务
为特定存储桶创建分类任务
aws macie2 create-classification-job \
--job-type ONE_TIME \
--name "pii-scan-production-buckets" \
--s3-job-definition '{
"bucketDefinitions": [{
"accountId": "123456789012",
"buckets": [
"production-data-bucket",
"customer-records-bucket"
]
}]
}' \
--managed-data-identifier-selector ALL
创建定期计划任务
aws macie2 create-classification-job \
--job-type SCHEDULED \
--name "weekly-sensitive-data-scan" \
--schedule-frequency-details '{
"weekly": {
"dayOfWeek": "MONDAY"
}
}' \
--s3-job-definition '{
"bucketDefinitions": [{
"accountId": "123456789012",
"buckets": ["all-data-bucket"]
}],
"scoping": {
"includes": {
"and": [{
"simpleScopeTerm": {
"comparator": "STARTS_WITH",
"key": "OBJECT_KEY",
"values": ["uploads/", "documents/"]
}
}]
}
}
}'
自定义数据标识符
为内部 ID 创建自定义标识符
aws macie2 create-custom-data-identifier \
--name "internal-employee-id" \
--description "匹配内部员工 ID 格式 EMP-XXXXXX" \
--regex "EMP-[0-9]{6}" \
--severity-levels '[
{"occurrencesThreshold": 1, "severity": "LOW"},
{"occurrencesThreshold": 10, "severity": "MEDIUM"},
{"occurrencesThreshold": 50, "severity": "HIGH"}
]'
为项目代码创建标识符
aws macie2 create-custom-data-identifier \
--name "project-code-identifier" \
--description "匹配格式为 PRJ-XXXX-XX 的项目代码" \
--regex "PRJ-[A-Z]{4}-[0-9]{2}" \
--keywords '["project", "code", "initiative"]' \
--maximum-match-distance 50
允许列表
创建允许列表以抑制误报
aws macie2 create-allow-list \
--name "test-data-exclusions" \
--description "排除已知测试数据模式" \
--criteria '{
"regex": "TEST-[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}"
}'
托管数据标识符
Macie 提供 300 余种托管数据标识符,涵盖以下类别:
| 类别 | 示例 |
|---|
| PII | 社会安全号码、护照号码、驾驶证、出生日期、姓名、地址 |
| 金融 | 信用卡号、银行账号、SWIFT 代码 |
| 凭据 | AWS 密钥、API 密钥、SSH 私钥、OAuth 令牌 |
| 医疗 | HIPAA 标识符、医疗保险理赔号 |
| 法务 | 税务识别号、国家身份证号 |
发现结果管理
列出发现结果
aws macie2 list-findings \
--finding-criteria '{
"criterion": {
"severity.description": {
"eq": ["High"]
},
"category": {
"eq": ["CLASSIFICATION"]
}
}
}' \
--sort-criteria '{"attributeName": "updatedAt", "orderBy": "DESC"}' \
--max-results 25
获取发现结果详情
aws macie2 get-findings \
--finding-ids '["finding-id-1", "finding-id-2"]'
将发现结果导出至 Security Hub
aws macie2 get-macie-session --query 'findingPublishingFrequency'
EventBridge 集成与自动响应
{
"source": ["aws.macie"],
"detail-type": ["Macie Finding"],
"detail": {
"severity": {
"description": ["High", "Critical"]
}
}
}
用于自动修复的 Lambda 函数
import boto3
import json
s3 = boto3.client('s3')
sns = boto3.client('sns')
def lambda_handler(event, context):
finding = event['detail']
severity = finding['severity']['description']
bucket = finding['resourcesAffected']['s3Bucket']['name']
key = finding['resourcesAffected']['s3Object']['key']
sensitive_types = [d['type'] for d in finding.get('classificationDetails', {}).get('result', {}).get('sensitiveData', [])]
if severity in ['High', 'Critical']:
s3.put_object_tagging(
Bucket=bucket,
Key=key,
Tagging={
'TagSet': [
{'Key': 'macie-finding', 'Value': severity},
{'Key': 'sensitive-data', 'Value': ','.join(sensitive_types)},
{'Key': 'requires-review', 'Value': 'true'}
]
}
)
sns.publish(
TopicArn='arn:aws:sns:us-east-1:123456789012:security-alerts',
Subject=f'Macie {severity} 发现结果: {bucket}/{key}',
Message=json.dumps({
: bucket,
: key,
: severity,
: sensitive_types,
: finding[]
}, indent=)
)
{: }
多账户部署
指定 Macie 管理员账户
aws macie2 enable-organization-admin-account \
--admin-account-id 111111111111
添加成员账户
aws macie2 create-member \
--account '{"accountId": "222222222222", "email": "security@example.com"}'
监控 Macie 运营状态
使用量统计
aws macie2 get-usage-statistics \
--filter-by '[{"comparator": "GT", "key": "accountId", "values": []}]' \
--sort-by '{"key": "accountId", "orderBy": "ASC"}'
分类任务状态
aws macie2 list-classification-jobs \
--filter-criteria '{"includes": [{"comparator": "EQ", "key": "jobStatus", "values": ["RUNNING"]}]}'
参考资料